高级软件IDL与ORB接口ppt课件.ppt_第1页
高级软件IDL与ORB接口ppt课件.ppt_第2页
高级软件IDL与ORB接口ppt课件.ppt_第3页
高级软件IDL与ORB接口ppt课件.ppt_第4页
高级软件IDL与ORB接口ppt课件.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4 OMGIDL OMGIDL IDL特点IDL规范模块接口提前声明类型声明序列any类型属性例外操作签名预编译 高级软件工程 1 IDL特点CORBA规范中最有意义的内容IDL类似于应用程序接口 API 在客户代码与对象实现 服务 之间定义了一个清晰的边界OMGIDL是一个稳定的标准自1991年公布以来 基本未改变是OMG其它被采纳规范的基础已经被ISO采纳 ISODIS14750 OMGIDL 高级软件工程 一个IDL文件可以向多个编程语言映射IDL是独立于语言的CORBA规范包含IDL向具体编程语言的映射已经发布映射规范的语言包括 C C SmallTalk Ada95等IDL支持平台独立性IDL是独立于平台的由IDL指定的接口可以在不同的ORB与平台上一致地表达只要程序员使用由IDL定义的接口不会遇到由于使用CORBA导致的平台移植问题 OMGIDL IDL是一个纯规范 不涉及实现问题 IDL定义的接口不对对象实现进行任何约束例如 编程语言进程算法等将客户从对象实现细节中清晰地分离出来有利于 软件复用软件演化这是IDL被广泛接收的重要原因 OMGIDL 高级软件工程 IDL设计的质量至为重要IDL通常被用于定义应用系统中的重要接口例如 子系统接口企业模型接口库接口等这些接口是复用 互操作的关键部分IDL的变化将影响系统中的多个软件模块好的IDL将 提高复用与互操作性提高系统的适应性降低维护费用 OMGIDL 高级软件工程 2 IDL规范IDL是一个严格的定义用OMGIDL编写的接口定义完整地定义了接口并且完全指定了每个操作的参数OMGIDL接口提供的信息被用于开发使用接口操作的客户客户程序不用纯描述性语言OMGIDL编写而是用事先定义的映射从OMGIDL概念映射到的语言编写的 OMGIDL OMGIDL词法遵循C 的词法规则OMGIDL语法是已被提议的ANSIC 标准的子集但比C 更严格 函数返回类型是强制的对操作声明的每个正式参数都必须提供名称由单个符号void组成的参数列表不允许作为空参数列表的同义字结构 discriminated联合和枚举要求被标记整数类型不能定义为简单的int或unsigned它们必须显式声明为short或longchar不能由signed或unsigned关键字限定 OMGIDL 高级软件工程 1 IDL模块 Modules 为IDL定义创建分离的名空间防止不同领域中标识之间的冲突模块可以嵌套以创建具有一定长度的限定范围的名字引用名字引用例子 Part Assembly ComponentWidget OMGIDL 3个模块例子 moduleAssembly typedefstringWidget modulePart typedef Assembly WidgetPartWidget moduleComponentPart typedefPartWidgetComponentWidget CORBAServices对模块进行扩充使用每个服务定义了一个或多个模块 OMGIDL 高级软件工程 2 IDL接口 Interface IDL接口定义分布对象显露的细节每个IDL接口定义了一个新对象类型操作签名是接口的核心是服务请求的入口点接口清晰地划分了服务的实现与客户之间的边界接口的不足之处 未显示代码之间的关系 OMGIDL 高级软件工程 例子 InterfaceAccount Accountdefinitions InterfaceCheking Account InheritsallAccountdefinitions addsCheckingdefinitions InterfaceSaving Account InheritsallAccountdefinitions addsSavingsdefinitions IDL支持多继承 OMGIDL 3 IDLForward用于声明一个未定义的接口例子 interfaceEmployee forwarddeclarationstructEmployeeContacts Employeesupervisor Employeesecretary Employeeunion shop leader interfaceEmployee attributeEmployeeContactscontacts typedefstringJobTitle otherdefinitions OMGIDL 高级软件工程 5 IDL类型声明 4 IDL常量 Constants IDL中类型定义的目的在于支持操作签名的强类型检查类型声明包括 IDL中特殊类型的重命名创建用户定义的类型例如 枚举结构数组序列联合等 OMGIDL 例子 typedefunsignedlongPhoneNumber typedefstringGuestName Address enumChargeCard MasterCard Visa AmericanExpress structGuestRecord GuestNamename Addressaddress PhoneNumbernumber ChargeCardcard kind unsignedlongcard number expiration typedefsequenceGuestList OMGIDL 高级软件工程 typedefstructEmployeestruct stringname Addressaddress unsignedlongsocial security number EmployeeRecord typedefEmployeeRecordEmployee 100 enumPersonKind A GUEST AN EMPLOYEE AN OTHER cunionPersonswitch PersonKind caseA GUEST GuestRecordguest record caseAN EMPLOYEEEmployeeRecordemployee record default stringdescription OMGIDL 6 IDL序列 Sequence 序列是IDL特有的特殊数据类型其本质上是变长数组下面的例子通过IDL向C语言的映射显示了序列的实现方式IDL typedefsequenceLongSeq structAutomobile stringmake model unsignedshortyear typedefsequenceAutomobileSeq OMGIDL 高级软件工程 C typedefstruct CORBA unsigned long maximum CORBA unsigned long length CORBA long buffer LongSeq typedefstruct CORBA char make model CORBA unsigned shortyear Autumobile typedefstruct unsignedlong maximum unsignedlong length Automobile buffer AutomobileSeq OMGIDL 高级软件工程 7 动态IDLTypeAny IDL提供了强类型接口定义的能力同时也存在弱类型数据值的能力方式 CORBAtypeany 例如 typedefanyDynamicallyTypedValue structRunTimeValue stringdescription anyrun time value exceptionuserError stringexplanation anyexception value OMGIDL 类型Any的值是自标识的包含关于运行时类型的信息IDL编译器为用户定义的类型产生typecode值CORBA接口池的接口包括运行时产生新类型代码的机制typeany在定义可复用接口方面有用例如 typeany在CORBAServices中被大量使用因为这些服务被期望在任意应用程序中复用 OMGIDL 高级软件工程 8 IDL属性 IDL定义显露公共的属性与操作如果属性或者操作是私有的则它不应出现在IDL定义中属性可以是只读的 Read only 或者可读写的 read write 每个属性都具有一个IDL数据类型并出现在一个特定的IDL接口定义中 OMGIDL 9 IDL例外 Exceptions 与其它计算模型相比 CORBA作出了一个重要的保证发出调用的客户总是可以接收到一个成功的返回或者一个例外这是对分布计算复杂性的重要简化并可以明显地降低客户方的代码量例外值的声明类似于IDL结构类型例如 exceptionCardExpired stringexpiration date exceptionCreditLimitExceeded unsignedlongcredit limit exceptionCardReportedStolen stringreporting instructions unsignedlonghotline phone number OMGIDL 例外被分为两类 用户定义的与CORBA定义的标准例外与标准例外相关的IDL defineex body unsignedlongminor completion statuscompleted enumcompletion status COMPLETED YES COMPLETED NO COMPLETED MAYBE enumexception type NO EXCEPTION USER EXCEPTION SYSTEM EXCEPTION OMGIDL 10 IDL操作签名 操作签名规范是IDL的基本目标当IDL向特定语言编译时每个签名对应于一个目标对象目标对象的类型是接口的声明名字例如 interfaceHospital typedefstringPatientId PatientIdadmit patient voidrelease patient inPatientIdpatient 确省情况下 IDL操作是同步的当有oneway关键字时 IDL操作是异步的 OMGIDL 一个完整的例子 interfaceAirlineReservation typedefunsignedlongConfirmationNumber enumSeatKind Window Aisle Middle exceptionBadFrequentFlyerNumber exceptionSeatNotAvailable ConfirmationNumbermake reservation instringpassenger name inunsignedlongfrequent flyer number inoutSeatKindseat kind outstringseat assignment raises BadFrequentflyerNumber SeatNotAvailable context TicketAgent Agency OMGIDL IDL很重要是CORBA规范的关键是分离客户与实现的关键是具体代码实现的起点IDL从何而来 手工编写OOD导出 OMGIDL 5 ORB接口 ORB操作综述对象引用操作ORB初始化获取初始对象应用策略对象线程相关的操作 ORB接口 1 ORB操作综述由ORB核心实现不依赖于所使用的对象适配器 ORB接口 对于所有的ORB和所有的对象实现而言这些操作都是一样的它们既可以由客户端的对象执行也可以由实现方的对象执行一些这样的操作在ORB上出现另一些在对象引用上出现尽管在描述方式上这些操作看起来就象对象上的操作一样但是 因为该部分所讨论的操作都由ORB自身实现所以实际上不是对象上的操作 ORB接口 因为对象引用是不透明的而且各ORB之间不一样所以对于对象引用的长期存储或对象引用的通信 除激活之外 来说对象引用不是一个很方便的值因而必须解决两个问题 允许对象引用转换成一个客户可以存储在其他介质上的值并确保该值以后能够转换为正确的对象引用 2 对象引用与字符串的转换 ORB接口 ORB接口 可以通过object to string操作把一个对象引用转化为一个字符串该字符串值就可以以任何字符串所能被处理的方式进行存储或通信string to object操作接受由object to string产生的字符串并返回相应的对象引用 3 对象引用操作有一些操作可以在所有对象上进行它们并不是通常意义上的操作因为这些操作直接由ORB实现而并不传递到对象实现端我们将以在对象引用上的操作的方式来讨论这些操作尽管它们的接口实际上依赖于语言绑定 ORB接口 interfaceObject PIDLInterfaceDefget interface booleanis nil Objectduplicate voidrelease booleanis a instringlogical type id booleannon existent booleanis equivalent inObjectother object unsignedlonghash inunsignedlongmaximum 这样的操作包括 ORB接口 voidcreate request inContextctxinIdentifieroperation inNVListarg list inoutNamedValueresult outRequestrequest inFlagsreq flag Policyget policy inPolicyTypepolicy type DomainManagersListget domain managers Objectset policy overrides inPolicyListpolicies inSetOverrideTypeset add ORB接口 InterfaceDefget interface ImplementationDefget implementation 确定对象实现和接口对象引用上的get interface操作返回InterfaceRepository里的一个对象该对象提供可能对程序有用的类型信息Object上的get implementation操作返回实现池里的一个对象该对象描述对象的实现 ORB接口 Objectduplicate voidrelease 复制和释放对象引用的拷贝 如果需要多于一个的对象引用则客户可以用duplicate操作创建一个副本注意 对象实现不能创建副本而且实现方也不能区别在一个特定的请求中客户使用的是原来的对象引用还是副本当程序不再需要一个对象引用时则可以用release操作收回它所占用的存储空间注意 对象实现不能进行这样的操作对象自身和任何其他对它的引用都不会受到release操作的影响 ORB接口 booleanis a instringlogical type id 等价性检查操作定义该操作的目的是在一个ORB范围上帮助维护对象引用的类型安全性如果该对象确实是该类型的一个实例或者如果该类型是该对象的 最底层 的类型的祖先则该操作返回true booleanis nil 测试一个对象引用是否为空一个值为OBJECT NIL的对象引用表示没有对象 ORB接口 booleannon existent 用来检测一个对象 如一个代理对象 是否已被破坏那些维护着包括对象引用的状态的服务 如桥 事件通道和基本关系服务等可以利用它们的 空闲时间 使用该操作从对象表中筛选出那些不再存在的对象并以垃圾收集的形式删除它们 ORB接口 unsignedlonghash inunsignedlongmaximum booleanis equivalent inObjectother object 对象引用同一性为了有效地管理包含大量对象引用的状态部分服务需要支持一个对象引用同一性的概念这样的服务包括 桥关系服务其他分层的服务等CORBA提供了两个有关同一性的操作一个操作是把对象引用映射到不相邻的组里这样的组里的对象引用具有潜在的等价性 另一个操作是支持开销更大的成对地定价性检查这些操作一起支持对以对象引用为关键字的表的高效地维护和检索 ORB接口 Policyget policy inPolicyTypepolicy type 获取与对象相关的策略 Objectset policy overrides inPolicyListpolicies inSetOverrideTypeset add 设置策略 DomainManagersListget domain managers 获取域管理者 ORB接口 4 ORB初始化当应用程序要求CORBA环境时它需要一种获得ORB和OA伪对象引用的机制这样的机制有两个作用 把应用程序初始化到ORB和OA环境向应用程序返回ORB和OA伪对象引用以便将来使用ORB和OA操作 ORB接口 在ORB中初始化应用程序并获得ORB的伪对象引用的操作不是在一个对象上进行的因为应用程序开始时并没有一个能激活操作的对象ORB初始化操作是应用程序进入CORBA世界的引导程序应用程序可以初始化到一个或多个ORB中去当完成一个ORB初始化之后 返回该ORB的伪对象引用然后可以用该伪对象引用获得该ORB的其他对象引用 例如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论