• 1. 第四章编写对象接口
  • 2. 编写对象接口对象接口与对象实现 OMG IDL的语法与语义 使用值类型 使用接口库 设计对象接口的准则
  • 3. 4.1 对象接口与对象实现接口与对象实现之间是多对多关系 对象接口的定义应包括对象的类型名字,对象上可进行的操作,属性,相关的数据类型定义,常量定义,异常定义等信息
  • 4. 4.1.2 接口定义语言对象实现对外提供信息和服务 信息和服务是对象实现与客户程序之间的一种合约 接口定义语言是书写这种合约的标准语言 IDL是一种说明性语言,不是程序设计语言
  • 5. IDL的特点面向对象 用于定义分布式服务的规格说明 定义复杂的数据类型 独立于具体的程序设计语言和特定的硬件,网络和操作系统平台
  • 6. 4.2 语法与定义词法规则 模块声明 类型的声明 常量 异常 接口 值类型
  • 7. 4.2.1 词法规则类似ANSI C++词法规则和预处理特性 关键字是大小写敏感;标识符大小写无关
  • 8. 4.2.2 模块的声明用于限制标识符的作用域 一般将逻辑上密切相关的接口,类型,常量,异常等存放在同一模块中
  • 9. 4.2.3 类型的声明基本数据类型 复合数据类型 枚举 结构 UNION 序列和数组
  • 10. 4.2.4 常量的声明转换为该IDL接口生成的操作接口中的常量声明 接口内 接口外
  • 11. 4.2.5 异常的声明引入关键字exception专门定义异常
  • 12. 4.2.6 接口的声明属性声明 参数传递 单向传递 上下文传递 继承机制 抽象接口
  • 13. 接口——属性属性不应看作对象的状态数据,是一种特殊的操作(0元操作) 可读写属性被映射为java中重载的方法(getter(),setter()) IDL接口中的属性被映射为JAVA语言的方法而不是变量,因此IDL接口可直接映射到JAVA的接口而不是类
  • 14. 接口——参数传递方向in:客户到对象实现 out:对象实现到客户 inout:双向 in可直接映射到java方法的参数 out,inout无法直接映射,利用持有类解决
  • 15. 接口——单向操作没有返回值的操作可设计为oneway操作 对象实现不确认请求是否真的收到
  • 16. 接口——上下文表达式附带于操作中 指明客户端那些影响对象请求执行结果的,与发出调用请求的客户环境有关的因素
  • 17. 4.2.7 值类型的声明作用 典型用法 声明形式 抽象 具体 动态确定参数传递 盒装值类型 定制值类型与可截断值类型
  • 18. 值类型——作用在网络中传递对象状态信息,即为了实现按值传递对象
  • 19. 值类型——典型用法按值调用传递参数:创建实参的副本 远程操作返回一个对象时创建返回的副本 实质:一个对象的目的是为了封装数据,或一个APP需要显式地对某一对象进行复制,该对象应使用IDL值类型而不是接口类型,此时的对象实例称为“值”
  • 20. 值类型——抽象值类型只含操作的基调而没有状态数据和初始化数据,因而不能创建值的实例 可继承多个抽象值类型,但不能继承具体值类型
  • 21. 值类型——具体值类型类似IDL结构类型,但允许包含状态数据和初始化数据 可继承单个具体值和多个抽象值类型,还可支持单个具体接口和多个抽象接口 映射为JAVA的抽象类 对接口的支持关系映射为JAVA中类对接口的实现关系
  • 22. 值类型——动态确定参数传递方式若形参类型为idl接口或值类型,则分别静态地确定了该参数的传递方式为按引用调用和按值调用 抽象接口可支持运行时动态选择参数传递方式 A抽象接口,p实参 规则: p属于具体接口或其子类型;且该类型是A的子类型;p已注册到ORB,则p被当作一个对象引用并按引用传递 P属于值类型且该值类型支持A,则p被当作一个值并按值传递 引发BAD_PARAM异常
  • 23. 值类型——盒装值类型允许将非值类型的IDL数据类型包装为值类型
  • 24. 值类型——定制值类型与可截断值类型不采用默认的对象打包和解包操作,而是由程序员手工实现由CustomMarshal接口继承的marshal()和unmarshal()方法 映射的java抽象类继承CustomValue,而不像具体值类型那样继承StreamableValue 不生成映射的read(),write()方法,需自己实现
  • 25. 4.3 使用值类型IDL定义 编译IDL文件 实现IDL接口 实现值类型 服务程序与客户程序
  • 26. 4.4 使用接口库定义 结构 管理工具 编写接口库客户程序
  • 27. 4.4.1 接口库的定义接口定义也可由一个专门的服务进程来存储或管理,即把IDL文件中地对象接口定义组织成可运行的接口库服务,由该服提供对象接口的相关信息 表达的信息与IDL文件完全相同,更适于动态访问 常见用法:查找一个对象引用的所有IDL接口定义 客户程序或对象实现利用接口库获取一个编译时未知类型的对象引用的详细接口信息,从而更好地利用DII,DSI
  • 28. 4.4.2 结构接口库将接口描述看作对象,为其定义了新的接口,无需引入数据库机制 层次结构 库标识:用于唯一标识一个接口库对象的字符串 IDL:一系列/分隔的标识符:版本号 IDL:Bank/Account/deposit:1.0
  • 29. 4.4.3 管理工具部署:IREP+OSAGENT 客户程序: 工具IR2IDL/IDL2IR 开发
  • 30. 4.5 设计对象接口的准则原则 典型的对象接口