高级软件工程(IDL与ORB接口).ppt
《高级软件工程(IDL与ORB接口).ppt》由会员分享,可在线阅读,更多相关《高级软件工程(IDL与ORB接口).ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4、OMG IDLOMG IDL OMG IDL IDL特点特点IDL规范规范模块模块 接口接口 提前声明提前声明 常量常量 类型声明类型声明 序列序列any 类型类型 属性属性 例外例外操作签名操作签名 预编译预编译1、IDL特点特点 CORBA规范中最有意义的内容规范中最有意义的内容IDL类似于应用程序接口(类似于应用程序接口(API)在客户代码与对象实现(服务)之间定义了在客户代码与对象实现(服务)之间定义了 一个清晰的边界一个清晰的边界 OMG IDL是一个稳定的标准是一个稳定的标准自自1991年公布以来,基本未改变年公布以来,基本未改变是是OMG其它被采纳规范的基础其它被采纳规范的基
2、础已经被已经被ISO采纳(采纳(ISO DIS 14750)OMG IDLOMG IDL一个一个IDL文件可以向多个编程语言映射文件可以向多个编程语言映射IDL是独立于语言的是独立于语言的CORBA规范包含规范包含IDL向具体编程语言的映射向具体编程语言的映射已经发布映射规范的语言包括:已经发布映射规范的语言包括:C,C+,SmallTalk,Ada95 等等 IDL支持平台独立性支持平台独立性IDL是独立于平台的是独立于平台的由由IDL指定的接口可以在不同的指定的接口可以在不同的ORB 与平台上一致地表达与平台上一致地表达只要程序员使用由只要程序员使用由IDL定义的接口定义的接口不会遇到由于
3、使用不会遇到由于使用CORBA导致的导致的平台移植问题平台移植问题OMG IDLOMG IDLIDL是一个纯规范,不涉及实现问题:是一个纯规范,不涉及实现问题:IDL定义的接口不对对象实现进行任何约束定义的接口不对对象实现进行任何约束例如:例如:编程语言编程语言进程进程算法算法等等将客户从对象实现细节中清晰地分离出来将客户从对象实现细节中清晰地分离出来有利于:有利于:软件复用软件复用软件演化软件演化这是这是IDL被广泛接收的重要原因被广泛接收的重要原因OMG IDLOMG IDLIDL设计的质量至为重要设计的质量至为重要IDL通常被用于定义应用系统中的重要接口通常被用于定义应用系统中的重要接口
4、例如:例如:子系统接口子系统接口企业模型接口企业模型接口库接口库接口等等这些接口是复用、互操作的关键部分这些接口是复用、互操作的关键部分IDL的变化将影响系统中的多个软件模块的变化将影响系统中的多个软件模块 好的好的IDL将:将:提高复用与互操作性提高复用与互操作性提高系统的适应性提高系统的适应性降低维护费用降低维护费用 OMG IDLOMG IDL2、IDL规范规范 IDL是一个严格的定义是一个严格的定义 用用OMG IDL编写的接口定义编写的接口定义完整地定义了接口完整地定义了接口 并且并且完全指定了每个操作的参数完全指定了每个操作的参数 OMG IDL接口提供的信息接口提供的信息被用于开
5、发使用接口操作的客户被用于开发使用接口操作的客户 客户程序不用纯描述性语言客户程序不用纯描述性语言OMG IDL编写编写 而是用事先定义的映射而是用事先定义的映射 从从OMG IDL概念映射到的语言编写的概念映射到的语言编写的OMG IDLOMG IDLOMG IDL词法词法 遵循遵循C+的词法规则的词法规则OMG IDL语法语法 是已被提议的是已被提议的ANSI C+标准的子集标准的子集 但比但比C+更严格:更严格:函数返回类型是强制的函数返回类型是强制的 对操作声明的每个正式参数都必须提供名称对操作声明的每个正式参数都必须提供名称 由单个符号由单个符号void组成的参数列表组成的参数列表不
6、允许作为不允许作为 空参数列表的同义字空参数列表的同义字 结构、结构、discriminated联合和枚举要求被标记联合和枚举要求被标记 整数类型不能定义为简单的整数类型不能定义为简单的 int 或或 unsigned它们必须显式声明为它们必须显式声明为short或或long char不能由不能由 signed 或或 unsigned 关键字限定关键字限定OMG IDLOMG IDL(1)IDL 模块模块(Modules)为为IDL定义定义 创建创建 分离的名空间分离的名空间防止不同领域中标识之间的冲突防止不同领域中标识之间的冲突模块可以嵌套模块可以嵌套 以创建以创建具有一定长度的具有一定长度
7、的限定范围的限定范围的名字引用名字引用名字引用例子:名字引用例子:Part:Assembly:ComponentWidget OMG IDLOMG IDL3个模块例子:个模块例子:module Assembly typedef string Widget;module Part typedef:Assembly:Widget PartWidget;module ComponentPart typedef PartWidget ComponentWidget;CORBAServices 对模块进行扩充使用对模块进行扩充使用 每个服务定义了一个或多个模块每个服务定义了一个或多个模块OMG IDLO
8、MG IDL(2)IDL 接口接口(Interface)IDL接口定义分布对象显露的细节接口定义分布对象显露的细节每个每个IDL接口定义了一个新对象类型接口定义了一个新对象类型操作签名操作签名是接口的核心是接口的核心是服务请求的入口点是服务请求的入口点接口接口 清晰地划分了服务的实现与客户之间的边界清晰地划分了服务的实现与客户之间的边界接口的不足之处:未显示代码之间的关系接口的不足之处:未显示代码之间的关系OMG IDLOMG IDL例子:例子:Interface Account/Account definitionsInterface Cheking:Account/Inherits all
9、 Account definitions/adds Checking definitions;Interface Saving:Account/Inherits all Account definitions/adds Savings definitions;IDL 支持多继承支持多继承OMG IDLOMG IDL(3)IDL Forward用于声明用于声明 一个未定义的接口一个未定义的接口例子:例子:interface Employee;/forward declarationstruct EmployeeContacts Employee supervisor;Employee secre
10、tary;Employee union_shop_leader;interface Employee attribute EmployeeContacts contacts;typedef string JobTitle;/other definitions OMG IDLOMG IDL(5)IDL 类型声明类型声明(4)IDL 常量常量(Constants)IDL中类型定义的目的在于中类型定义的目的在于支持操作签名的强类型检查支持操作签名的强类型检查类型声明包括:类型声明包括:IDL中特殊类型的重命名中特殊类型的重命名 创建用户定义的类型创建用户定义的类型例如:例如:枚举枚举结构结构数组数组
11、序列序列联合联合 等等 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_kind;unsigned long card_number,expiration;typedef sequence GuestList
12、;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(PersonKind)case A_GUEST:GuestRecord guest_record;case AN_EMPLOYEEEmployeeR
13、ecord employee_record;default:string description;OMG IDLOMG IDL(6)IDL序列序列(Sequence)序列是序列是IDL特有的特殊数据类型特有的特殊数据类型其本质上是变长数组其本质上是变长数组下面的例子通过下面的例子通过IDL向向C语言的映射语言的映射显示了序列的实现方式显示了序列的实现方式IDL:typedef sequence LongSeq;struct Automobile string make,model;unsigned short year;typedef sequence AutomobileSeq;OMG ID
14、LOMG 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;Automobile *_ buffer;AutomobileSeq;OMG IDLOMG IDL(7)动态动
15、态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的值是自标识的的值是自标识的包含关于运行时类型的信息包含关于
16、运行时类型的信息IDL编译器为用户定义的类型编译器为用户定义的类型 产生产生 type code 值值CORBA 接口池的接口包括接口池的接口包括运行时产生新类型代码的机制运行时产生新类型代码的机制type any 在定义可复用接口方面有用在定义可复用接口方面有用例如,例如,type any 在在 CORBAServices 中被大量使用中被大量使用因为这些服务被期望在任意应用程序中复用因为这些服务被期望在任意应用程序中复用OMG IDLOMG IDL(8)IDL属性属性IDL 定义显露公共的属性与操作定义显露公共的属性与操作如果属性或者操作是私有的如果属性或者操作是私有的则它不应出现在则它不
17、应出现在IDL定义中定义中属性可以是属性可以是只读的(只读的(Read-only)或者或者 可读写的(可读写的(read-write)每个属性都具有一个每个属性都具有一个IDL数据类型数据类型并出现在一个特定的并出现在一个特定的IDL接口定义中接口定义中OMG IDLOMG IDL(9)IDL 例外例外(Exceptions)与其它计算模型相比,与其它计算模型相比,CORBA作出了一个重要的保证作出了一个重要的保证发出调用的客户总是可以接收到发出调用的客户总是可以接收到一个成功的返回一个成功的返回或者一个例外或者一个例外这是对分布计算复杂性的重要简化这是对分布计算复杂性的重要简化并可以明显地降
18、低客户方的代码量并可以明显地降低客户方的代码量例外值的声明类似于例外值的声明类似于IDL结构类型结构类型例如:例如:exception CardExpired string expiration_date;exception CreditLimitExceeded unsigned long credit_limit;exception CardReportedStolen string reporting_instructions;unsigned long hotline_phone_number;OMG IDLOMG IDL例外被分为两类:例外被分为两类:用户定义的用户定义的 与与COR
19、BA定义的定义的 标准例外标准例外与标准例外相关的与标准例外相关的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 ;OMG IDLOMG IDL(10)IDL 操作签名操作签名操作签名规范是操作签名规范是IDL的基本目标的基本目标当当IDL向特定语
20、言编译时向特定语言编译时每个签名对应于一个目标对象每个签名对应于一个目标对象目标对象的类型是接口的声明名字目标对象的类型是接口的声明名字例如:例如:interface Hospital typedef string PatientId;PatientId admit_patient();void release_patient(in PatientIdpatient);确省情况下,确省情况下,IDL操作是同步的操作是同步的当当 有有 oneway 关键字时,关键字时,IDL操作是异步的操作是异步的OMG IDLOMG IDL一个完整的例子:一个完整的例子:interface AirlineRe
21、servation typedef unsigned long ConfirmationNumber;enum SeatKind Window,Aisle,Middle;exception BadFrequentFlyerNumber;exception SeatNotAvailable;ConfirmationNumber make_reservation in string passenger_name,in unsigned long frequent_flyer_number,inout SeatKind seat_kind,out string seat_assignment rai
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 软件工程 IDL ORB 接口
限制150内