编写对象接口 - 山东大学课程中心0.ppt

编写对象接口 - 山东大学课程中心0.ppt

第四章编写对象接口 编写对象接口 对象接口与对象实现 OMG IDL的语法与语义 使用值类型 使用接口库 设计对象接口的准则 4.1 对象接口与对象实现 接口与对象实现之间是多对多关系 接口与对象分离 客户程序仅仅依赖于接口,不涉及对象实现 客户程序可采用与实现完全不同风格的程序设计语言 对象接口成为对外公布对象行为的唯一途径 对象接口的定义应包括对象的类型名字,对象上可进行的操作,属性,相关的数据类型定义,常量定义,异常定义等信息 4.1.2 接口定义语言 对象实现对外提供信息和服务 信息和服务是对象实现与客户程序之间的一种合约,需严格遵循规定 接口定义语言是书写这种合约的标准语言 IDL是一种说明性语言,不是程序设计语言 IDL的特点 面向对象 用于定义分布式服务的规格说明 定义复杂的数据类型 独立于具体的程序设计语言和特定的硬件,网络和操作系统平台 4.2 语法与定义 词法规则 模块声明 类型的声明 常量 异常 接口 值类型 4.2.1 词法规则 类似ANSI C++词法规则和预处理特性 关键字是大小写敏感;标识符大小写无关 4.2.2 模块的声明 用于限制标识符的作用域 一般将逻辑上密切相关的接口,类型,常量,异常等存放在同一模块中 4.2.3 类型的声明 基本数据类型(9种) 复合数据类型 枚举 结构 UNION 序列和数组 typedef typedef wstring PersonName; typedef enum enum PoliticalStatus {PartyMember, LeagueMember, Other}; struct struct Person { PersonName name; // 姓名 boolean sex; // 性别 short age; // 年龄 PoliticalInfo politics; // 政治面貌 }; union 4.2.4 常量的声明 转换为该IDL接口生成的操作接口中的常量声明 const double PI=3.14 接口内 public final static double PI=(double)3.14; 接口外 public interface PI{ public final static double value = (double)3.14} 4.2.5 异常的声明 引入关键字exception专门定义异常 4.2.6 接口的声明 属性声明 参数传递 单向传递 上下文传递 继承机制 抽象接口 接口——属性 属性不应看作对象的状态数据,是一种特殊的操作(0元操作) 可读写属性被映射为java中重载的方法(getter(),setter()) IDL接口中的属性被映射为JAVA语言的方法而不是变量,因此IDL接口可直接映射到JAVA的接口而不是类 属性声明 接口——参数传递方向 in:客户到对象实现 out:对象实现到客户 inout:双向 in可直接映射到java方法的参数 out,inout无法直接映射,利用持有类解决 参数传递方向 interface Modes { long op1(in long inArg, out long outArg, inout long inoutArg); Modes op2(in Modes inArg, out Modes outArg, inout Modes inoutArg); }; ModesOperations.java ModesHolder.java 客户端的使用 接口——单向操作 没有返回值的操作可设计为oneway操作 对象实现不确认请求是否真的收到 不会阻塞客户程序的执行过程,也不允许引发任何异常或返回任何值 oneway void log(in string userName,in string description); 接口——上下文表达式 附带于操作中 指明客户端那些影响对象请求执行结果的,与发出调用请求的客户环境有关的因素 是由关键字context引导的一系列字符串常量列表 对象实现受到远程调用请求后,可根据客户程序的请求上下文确定如何提供服务 接口——抽象接口 用于操作的形参声明,从而可在运行时根据实参的类型动态决定参数传递方式是按值调用还是按引用调用 4.2.7 值类型的声明 作用 典型用法 声明形式 抽象 具体 动态确定参数传递 盒装值类型 定制值类型与可截断值类型 值类型——作用 在网络中传递对象状态信息,即为了实现按值传递对象 值类型——典型用法 按值调用传递参数:创建实参的副本 远程操作返回一个对象时创建返回的副本 实质:一个对象的

文档评论(0)

1亿VIP精品文档

相关文档