高级软件工程(idl与orb接口)

上传人:aa****6 文档编号:51278142 上传时间:2018-08-13 格式:PPT 页数:46 大小:105KB
返回 下载 相关 举报
高级软件工程(idl与orb接口)_第1页
第1页 / 共46页
高级软件工程(idl与orb接口)_第2页
第2页 / 共46页
高级软件工程(idl与orb接口)_第3页
第3页 / 共46页
高级软件工程(idl与orb接口)_第4页
第4页 / 共46页
高级软件工程(idl与orb接口)_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《高级软件工程(idl与orb接口)》由会员分享,可在线阅读,更多相关《高级软件工程(idl与orb接口)(46页珍藏版)》请在金锄头文库上搜索。

1、4 4、OMG IDLOMG IDLOMG OMG IDL IDL IDL特点 IDL规范模块接口提前声明常量类型声明序列 any 类型属性例外 操作签名预编译1、IDL特点CORBA规范中最有意义的内容 IDL类似于应用程序接口(API) 在客户代码与对象实现(服务)之间定义了一个清晰的边界OMG IDL是一个稳定的标准 自1991年公布以来,基本未改变 是OMG其它被采纳规范的基础 已经被ISO采纳(ISO DIS 14750)OMG IDLOMG IDL一个IDL文件可以向多个编程语言映射 IDL是独立于语言的 CORBA规范包含IDL向具体编程语言的映射 已经发布映射规范的语言包括:

2、C, C+, SmallTalk, Ada95 等IDL支持平台独立性 IDL是独立于平台的 由IDL指定的接口可以在不同的ORB与平台上一致地表达 只要程序员使用由IDL定义的接口 不会遇到由于使用CORBA导致的 平台移植问题OMG IDLOMG IDLIDL是一个纯规范,不涉及实现问题: IDL定义的接口不对对象实现进行任何约束 例如:编程语言 进程 算法等 将客户从对象实现细节中清晰地分离出来 有利于: 软件复用 软件演化这是IDL被广泛接收的重要原因OMG IDLOMG IDLIDL设计的质量至为重要 IDL通常被用于定义应用系统中的重要接口 例如: 子系统接口 企业模型接口 库接口

3、等 这些接口是复用、互操作的关键部分 IDL的变化将影响系统中的多个软件模块好的IDL将:提高复用与互操作性 提高系统的适应性 降低维护费用OMG IDLOMG IDL2、IDL规范IDL是一个严格的定义用OMG IDL编写的接口定义 完整地定义了接口 并且 完全指定了每个操作的参数OMG IDL接口提供的信息 被用于开发使用接口操作的客户客户程序不用纯描述性语言OMG IDL编写而是用事先定义的映射从OMG IDL概念映射到的语言编写的OMG IDLOMG IDLOMG IDL词法 遵循C+的词法规则 OMG IDL语法 是已被提议的ANSI C+标准的子集但比C+更严格: 函数返回类型是强

4、制的 对操作声明的每个正式参数都必须提供名称 由单个符号void组成的参数列表 不允许作为 空参数列表的同义字 结构、discriminated联合和枚举要求被标记 整数类型不能定义为简单的 int 或 unsigned 它们必须显式声明为short或long char不能由 signed 或 unsigned 关键字限定OMG IDLOMG IDL(1)IDL 模块 (Modules)为IDL定义 创建 分离的名空间 防止不同领域中标识之间的冲突模块可以嵌套以创建具有一定长度的 限定范围的名字引用名字引用例子: Part:Assembly:ComponentWidgetOMG IDLOMG

5、IDL3个模块例子: module Assembly typedef string Widget; ;module Part typedef:Assembly:Widget PartWidget;module ComponentPart typedef PartWidget ComponentWidget; ; ;CORBAServices 对模块进行扩充使用 每个服务定义了一个或多个模块OMG IDLOMG IDL(2) IDL 接口 (Interface)IDL接口定义分布对象显露的细节 每个IDL接口定义了一个新对象类型操作签名是接口的核心 是服务请求的入口点接口 清晰地划分了服务的实现

6、与客户之间的边界接口的不足之处:未显示代码之间的关系OMG IDLOMG IDL例子: Interface Account /Account definitions Interface Cheking: Account /Inherits all Account definitions /adds Checking definitions ;Interface Saving: Account /Inherits all Account definitions /adds Savings definitions ;IDL 支持多继承OMG IDLOMG IDL(3) IDL Forward用于声

7、明 一个未定义的接口 例子: interface Employee; /forward declaration struct EmployeeContacts Employee supervisor; Employee secretary; Employee union_shop_leader; interface Employee attribute EmployeeContacts contacts; typedef string JobTitle; / other definitions OMG IDLOMG IDL(5) IDL 类型声明(4) IDL 常量 (Constants)ID

8、L中类型定义的目的在于 支持操作签名的强类型检查 类型声明包括:IDL中特殊类型的重命名创建用户定义的类型 例如: 枚举 结构 数组 序列 联合 等 OMG IDLOMG IDL例子: typedef unsigned long PhoneNumber;typedef string GuestName, Address;enum ChargeCard MasterCard, Visa, AmericanExpress;struct GuestRecord GuestName name; Address address; PhoneNumber number; ChargeCard card_k

9、ind; unsigned long card_number, expiration; ;typedef sequence GuestList;OMG IDLOMG IDLtypedef struct Employeestruct string name; Address address; unsigned long social_security_number; EmployeeRecord;typedef EmployeeRecord Employee100;enum PersonKind A_GUEST, AN_EMPLOYEE,AN_OTHER;cunion Person switch

10、 (PersonKind) case A_GUEST: GuestRecord guest_record; case AN_EMPLOYEE EmployeeRecord employee_record; default: string description; ;OMG IDLOMG IDL(6) IDL序列 (Sequence) 序列是IDL特有的特殊数据类型 其本质上是变长数组下面的例子通过IDL向C语言的映射 显示了序列的实现方式IDL:typedef sequence LongSeq; struct Automobile string make, model; unsigned sh

11、ort year; typedef sequence AutomobileSeq;OMG IDLOMG IDLC: typedef struct CORBA_unsigned_long _maximum; CORBA_unsigned_long _length; CORBA_long *_buffer; LongSeq;typedef struct CORBA_char *make, *model; CORBA_unsigned_short year; Autumobile;typedef struct unsigned long _maximum; unsigned long _length

12、; Automobile *_ buffer; AutomobileSeq;OMG IDLOMG IDL(7) 动态IDL Type AnyIDL 提供了强类型接口定义的能力 同时也存在弱类型数据值的能力 方式:CORBA type any。例如:typedef any DynamicallyTypedValue;struct RunTimeValue string description; any run_time_value; ;exception userError string explanation; any exception_value; ;OMG IDLOMG IDL类型Any

13、的值是自标识的 包含关于运行时类型的信息IDL编译器为用户定义的类型 产生 type code 值 CORBA 接口池的接口包括 运行时产生新类型代码的机制type any 在定义可复用接口方面有用 例如,type any 在 CORBAServices 中被大量使用 因为这些服务被期望在任意应用程序中复用OMG IDLOMG IDL(8)IDL属性IDL 定义显露公共的属性与操作 如果属性或者操作是私有的 则它不应出现在IDL定义中属性可以是只读的(Read-only) 或者 可读写的(read-write)每个属性都具有一个IDL数据类型 并出现在一个特定的IDL接口定义中OMG IDLO

14、MG IDL(9) IDL 例外 (Exceptions)与其它计算模型相比,CORBA作出了一个重要的保证 发出调用的客户总是可以接收到一个成功的返回 或者一个例外 这是对分布计算复杂性的重要简化 并可以明显地降低客户方的代码量 例外值的声明类似于IDL结构类型 例如: exception CardExpired string expiration_date; ; exception CreditLimitExceeded unsigned long credit_limit; ; exception CardReportedStolen string reporting_instructi

15、ons; unsigned long hotline_phone_number; ;OMG IDLOMG IDL例外被分为两类:用户定义的 与 CORBA定义的 标准例外与标准例外相关的IDL:#define ex_body unsigned long minor; completion_status completed; ;enum completion_status COMPLETED_YES,COMPLETED_NO,COMPLETED_MAYBE ;enum exception_type NO_EXCEPTION, USER_EXCEPTION, SYSTEM_EXCEPTION ;O

16、MG IDLOMG IDL(10) IDL 操作签名操作签名规范是IDL的基本目标 当IDL向特定语言编译时 每个签名对应于一个目标对象 目标对象的类型是接口的声明名字 例如:interface Hospital typedef string PatientId; PatientId admit_patient ( ); void release_patient ( in PatientIdpatient ); ;确省情况下, IDL操作是同步的 当 有 oneway 关键字时,IDL操作是异步的OMG IDLOMG IDL一个完整的例子:interface AirlineReservation typedef unsigned long ConfirmationNumber; enum SeatKind Window, Aisle, Middle

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号