高级软件工程(IDL与ORB接口)

上传人:xu****iu 文档编号:246238698 上传时间:2024-10-13 格式:PPT 页数:46 大小:304.11KB
返回 下载 相关 举报
高级软件工程(IDL与ORB接口)_第1页
第1页 / 共46页
高级软件工程(IDL与ORB接口)_第2页
第2页 / 共46页
高级软件工程(IDL与ORB接口)_第3页
第3页 / 共46页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,4、OMG IDL,OMG IDL,IDL特点,IDL规范,模块,接口,提前声明,常量,类型声明,序列,any,类型,属性,例外,操作签名,预编译,1、IDL特点,CORBA规范中最有意义的内容,IDL类似于应用程序接口(API),在客户代码与对象实现(服务)之间定义了,一个清晰的边界,OMG IDL是一个稳定的标准,自1991年公布以来,基本未改变,是OMG其它被采纳规范的基础,已经被ISO采纳(ISO DIS 14750),OMG IDL,一个IDL文件可以向多个编程语言映射,IDL是独立于语言的,CORBA规范包含IDL向具体编程语言的映射,已经发布映射规范的语言包括:,C,C+,SmallTalk,Ada95 等,IDL支持平台独立性,IDL是独立于平台的,由IDL指定的接口可以在不同的ORB,与平台上一致地表达,只要程序员使用由IDL定义的接口,不会遇到由于使用CORBA导致的,平台移植问题,OMG IDL,IDL是一个纯规范,不涉及实现问题:,IDL定义的接口不对对象实现进行任何约束,例如:编程语言,进程,算法等,将客户从对象实现细节中清晰地分离出来,有利于:,软件复用,软件演化,这是IDL被广泛接收的重要原因,OMG IDL,IDL设计的质量至为重要,IDL通常被用于定义应用系统中的重要接口,例如:,子系统接口,企业模型接口,库接口等,这些接口是复用、互操作的关键部分,IDL的变化将影响系统中的多个软件模块,好的IDL将:提高复用与互操作性,提高系统的适应性,降低维护费用,OMG IDL,2、IDL规范,IDL是一个严格的定义,用OMG IDL编写的接口定义,完整地定义了接口 并且,完全指定了每个操作的参数,OMG IDL接口提供的信息,被用于开发使用接口操作的客户,客户程序不用纯描述性语言OMG IDL编写,而是用事先定义的映射,从OMG IDL概念映射到的语言编写的,OMG IDL,OMG IDL词法 遵循C+的词法规则,OMG IDL语法 是已被提议的ANSI C+标准的子集,但比C+更严格:,函数返回类型是强制的,对操作声明的每个正式参数都必须提供名称,由单个符号,void,组成的参数列表,不允许作为 空参数列表的同义字,结构、,discriminated,联合和枚举要求被标记,整数类型不能定义为简单的,int,或,unsigned,它们必须显式声明为,short,或,long,char,不能由,signed,或,unsigned,关键字限定,OMG IDL,(1)IDL 模块(Modules),为IDL定义 创建 分离的名空间,防止不同领域中标识之间的冲突,模块可以嵌套,以创建具有一定长度的,限定范围的名字引用,名字引用例子:,Part:Assembly:ComponentWidget,OMG IDL,3个模块例子:,module Assembly,typedef string Widget;,;,module Part,typedef:Assembly:Widget PartWidget;,module ComponentPart,typedef PartWidget ComponentWidget;,;,;,CORBAServices,对模块进行扩充使用,每个服务定义了一个或多个模块,OMG IDL,(2)IDL 接口(Interface),IDL接口定义分布对象显露的细节,每个IDL接口定义了一个新对象类型,操作签名是接口的核心,是服务请求的入口点,接口清晰地划分了服务的实现与客户之间的边界,接口的不足之处:未显示代码之间的关系,OMG 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 IDL,(3)IDL Forward,用于声明 一个未定义的接口,例子:,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 IDL,(5)IDL 类型声明,(4)IDL 常量(Constants),IDL中类型定义的目的在于,支持操作签名的强类型检查,类型声明包括:,IDL中特殊类型的重命名,创建用户定义的类型,例如:,枚举,结构,数组,序列,联合等,OMG 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;,OMG IDL,typedef 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_EMPLOYEE,EmployeeRecord employee_record;,default:string description;,;,OMG IDL,(6)IDL序列(Sequence),序列是IDL特有的特殊数据类型,其本质上是变长数组,下面的例子通过IDL向C语言的映射,显示了序列的实现方式,IDL:,typedef sequence LongSeq;,struct Automobile,string make,model;,unsigned short year;,typedef sequence AutomobileSeq;,OMG IDL,C:,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 IDL,(7)动态IDL Type Any,IDL,提供了强类型接口定义的能力,同时也存在弱类型数据值的能力,方式:CORBA type any。,例如:,typedef any DynamicallyTypedValue;,struct RunTimeValue,string description;,any run_time_value;,exception userError,string explanation;,any exception_value;,OMG IDL,类型Any,的值是自标识的,包含关于运行时类型的信息,IDL编译器为用户定义的类型 产生 type code 值,CORBA 接口池的接口包括,运行时产生新类型代码的机制,type any 在定义可复用接口方面有用,例如,type any 在 CORBAServices 中被大量使用,因为这些服务被期望在任意应用程序中复用,OMG IDL,(8)IDL,属性,IDL 定义显露公共的属性与操作,如果属性或者操作是私有的,则它不应出现在IDL定义中,属性可以是只读的(Read-only),或者可读写的(read-write),每个属性都具有一个IDL数据类型,并出现在一个特定的IDL接口定义中,OMG IDL,(9)IDL 例外(Exceptions),与其它计算模型相比,CORBA作出了一个重要的保证,发出调用的客户总是可以接收到一个成功的返回,或者一个例外,这是对分布计算复杂性的重要简化,并可以明显地降低客户方的代码量,例外值的声明类似于IDL结构类型,例如:,exception CardExpired string expiration_date;,exception CreditLimitExceeded,unsigned long credit_limit;,exception CardReportedStolen,string reporting_instructions;,unsigned long hotline_phone_number;,OMG 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 ;,OMG IDL,(10)IDL 操作签名,操作签名规范是IDL的基本目标,当IDL向特定语言编译时,每个签名对应于一个目标对象,目标对象的类型是接口的声明名字,例如:,interface Hospital,typedef string PatientId;,PatientId admit_patient();,void release_patient(in PatientIdpatient);,;,确省情况下,IDL操作是同步的,当 有 oneway 关键字时,IDL操作是异步的,OMG IDL,一个完整的例子:,interface AirlineReservation,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 SeatKi
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!