1、高级软件工程全册高级软件工程全册配套课件配套课件1、概述(、概述(1学时)学时) 课程内容设置背景与依据课程内容设置背景与依据2、软件构件(分布式对象)模型(、软件构件(分布式对象)模型(20学时)学时) (1)CORBA(11) (2)COM(9)3、软件体系结构(、软件体系结构(12学时)学时) (1)体系结构)体系结构(6) (2)OMA (3) (3)DNA (3)4、软件建模(开发过程与结果)(、软件建模(开发过程与结果)(15学时)学时) (1)use case(3) (2)class (6) (3)sequence (6)一、授课内容与方式一、授课内容与方式5、其它话题(、其它话
2、题(6学时)学时) (1)软件复用)软件复用 领域工程、应用工程、再工程领域工程、应用工程、再工程 (2)工程管理()工程管理(CMM) . . .二、实习内容与方式二、实习内容与方式 分成两组,每人分别针对不同的领域,利用分成两组,每人分别针对不同的领域,利用CORBA 或者或者DCOM开发一个小系统,鼓励多人协作开发。开发一个小系统,鼓励多人协作开发。三、成绩计算方法三、成绩计算方法1、自学材料,提交反馈意见与报告。、自学材料,提交反馈意见与报告。 20分分2、开发实习,提交程序及文档。、开发实习,提交程序及文档。 30分分3、期末笔试,提交答卷。、期末笔试,提交答卷。 50分分四、参考文
3、献四、参考文献1、 OMG,The Common Object Request Broker: Architecture and Specification,v2.31,1999.10。2、潘爱民,、潘爱民,COM原理与应用原理与应用,清华大学出版社,清华大学出版社, 1999年年11月。月。 3、 Mary Shaw, David Garlan, Software Architecture, Prentice Hall, 1996。4、 OMG,Unified Modeling Language Specification, v1.3,1999年年6月。月。1、4可以从可以从 www.omg
4、.org 或者或者 下载下载2、3可以从书店购买。可以从书店购买。5、邵维忠,杨芙清,、邵维忠,杨芙清,面向对象的系统分析面向对象的系统分析,清华大学出,清华大学出 版社,版社,1999年。年。6、王立福,张世琨,朱冰,、王立福,张世琨,朱冰,软件工程软件工程,北京大学出版社,北京大学出版社, 1997年。年。7、周之英,、周之英,现代软件工程现代软件工程,科学出版社,科学出版社,1999年年9月。月。8、Thomas J.Mowbray, William A.Ruh, INSIDE CORBA, ADDISON-WESLEY,1997。9、Ivar Jacobson, Grady Booch
5、, James Rumbaugh,“Unified Software Developing Process”,Addison-Wesley, 1999.9。10、Mark C. Paulk,Bill Curtis,Mary Beth Chrissis,Charles V. Weber,Capability Maturity Model for Software, Version 1.1,CMU/SEI-93-TR-024,1993。今日作业:在今日作业:在课程内容课程内容侧重点侧重点授课方式授课方式 等方面提出建设性建议等方面提出建设性建议 并阐述理由并阐述理由提交方式:电子邮件,提交方式:电
6、子邮件,TO:第一章第一章 概概 述述1、软件发展现状、软件发展现状 2、软件发展趋势、软件发展趋势3、现有软件标准、现有软件标准4、软件工程研究范围的扩展、软件工程研究范围的扩展1、软件发展现状、软件发展现状 (1)已经存在大量正在运行的软件)已经存在大量正在运行的软件 金融、电信、航空航天等金融、电信、航空航天等 (2)软件的应用范围不断扩大)软件的应用范围不断扩大商务、交通、家电等,商务、交通、家电等,“无处不在的软件无处不在的软件” (3)软件的规模与复杂性持续增加)软件的规模与复杂性持续增加越来越多的知识正在由软件进行显式表达越来越多的知识正在由软件进行显式表达 (4)出现了大量与软
7、件相关的标准)出现了大量与软件相关的标准(3)的需求)的需求 (5)软件危机仍然存在(软件脱节)软件危机仍然存在(软件脱节)1968-20002、软件发展趋势、软件发展趋势(1)遗留软件将继续发挥作用)遗留软件将继续发挥作用(2)软件应用范围将继续扩大,成为信息社会的物理设施)软件应用范围将继续扩大,成为信息社会的物理设施(3)网络化软件将是发展重点)网络化软件将是发展重点(4)软件的可靠性与安全性日趋重要)软件的可靠性与安全性日趋重要(5)工业化生产是必由之路)工业化生产是必由之路3、与软件相关的各种标准、与软件相关的各种标准(1)网络协议:)网络协议:ISO/OSI vs TCP/IP(2
8、)软件构件:)软件构件:CORBA vs COM(3)建模语言:)建模语言:UML(4)数据访问:)数据访问:ODBC(5)工程管理:)工程管理:CMM vs ISO(9001-3,15504)4、软件工程研究范围的扩展、软件工程研究范围的扩展 软件工程:软件工程:“确立并使用正确的工程原理和方法,确立并使用正确的工程原理和方法, 以便能够经济地获得可靠而有效的软件以便能够经济地获得可靠而有效的软件”。 Friedrich I. Bauer 原则原则 (形式化、模块化等)(形式化、模块化等) 方法与技术(过程及结果表示)方法与技术(过程及结果表示)开发方法(结果描述为主):开发方法(结果描述为
9、主):结构化方法结构化方法面向对象方法面向对象方法开发模型(过程描述为主):开发模型(过程描述为主):瀑布模型瀑布模型渐进(增量)模型渐进(增量)模型螺旋模型螺旋模型喷泉模型喷泉模型 工具工具 高级软件工程:高级软件工程:以传统软件工程研究内容为以传统软件工程研究内容为基础基础, 以面向对象技术、网络计算技术、软件复用技术为以面向对象技术、网络计算技术、软件复用技术为核心核心 以以CORBA、COM、UML标准等为主要参考标准等为主要参考 讨论、研究软件开发过程中需要关注的讨论、研究软件开发过程中需要关注的新焦点新焦点 新概念(原理):新概念(原理):软件构件软件构件体系结构体系结构 新方法(
10、技术):新方法(技术):过程与结果过程与结果软件复用与软件复用与工程管理工程管理方法与技术方法与技术原则原则工具工具面向对象技术面向对象技术分布计算技术分布计算技术软件复用技术软件复用技术传统软件工程传统软件工程高级软件工程高级软件工程概念与原理概念与原理方法与技术方法与技术 工具与环境工具与环境第二章第二章 软件构件软件构件 本章本章 以分布对象为核心以分布对象为核心结合结合 CORBA与与 COM介绍介绍 运行级大粒度构件运行级大粒度构件 的的 概念与原理概念与原理 构件构件 是是 系统中可以明确辨识的构成成分系统中可以明确辨识的构成成分软件构件软件构件 是是 软件系统中软件系统中 具有一
11、定意义的具有一定意义的 独立构成成分独立构成成分可复用软件构件可复用软件构件 是是 可以被多个软件系统所复用的、可以被多个软件系统所复用的、具有具有 独立功能的软件系统构成成分独立功能的软件系统构成成分构件构件 是可以被直接复用的软件实体是可以被直接复用的软件实体由构件接口与构件实现两部分组成由构件接口与构件实现两部分组成 构件分类:构件分类:纵向:纵向:系统级构件系统级构件应用构件应用构件 共性共性面向领域面向领域 横向:横向:界面构件(控件)界面构件(控件)业务构件业务构件数据访问构件数据访问构件本课程重点关注:本课程重点关注:应用构件应用构件 业务构件业务构件 这样的构件与这样的构件与
12、分布对象技术中的构件(分布对象)概念分布对象技术中的构件(分布对象)概念 完全吻合完全吻合 一、分布对象技术发展过程一、分布对象技术发展过程二、二、CORBA三、三、COM四、不同实现技术的比较四、不同实现技术的比较一、分布对象技术发展过程一、分布对象技术发展过程 程序程序 = 算法算法 + 数据结构数据结构 软件软件 = 程序程序 + 文档文档 模块化是软件的规模与复杂性模块化是软件的规模与复杂性 发展到一定程度时产生的必然结果发展到一定程度时产生的必然结果 关注焦点的不同,形成了不同的技术:关注焦点的不同,形成了不同的技术:数据与操作的封装数据与操作的封装 面向对象技术面向对象技术利用网络
13、计算环境利用网络计算环境 分布计算技术分布计算技术利用已经开发出的代码利用已经开发出的代码 软件复用技术软件复用技术 不论哪种技术不论哪种技术模块形式及模块之间的协作方式是关键问题模块形式及模块之间的协作方式是关键问题 面向对象技术:面向对象技术: 对象对象对象之间的关联对象之间的关联分布计算技术:分布计算技术: 不同节点上的运行程序不同节点上的运行程序及程序之间的通讯及程序之间的通讯软件复用技术:软件复用技术: 软件构件软件构件软件构件的组装软件构件的组装从运行时刻不同模块所处的进程考虑,从运行时刻不同模块所处的进程考虑,两个模块之间存在如下三种关系:两个模块之间存在如下三种关系: 同一进程
14、内部:同一进程内部:子程序子程序共享变量共享变量 同一机器的不同进程:同一机器的不同进程:操作系统提供进程间通讯操作系统提供进程间通讯 不同机器上:不同机器上: 消息传递:消息传递:TCP/IP 远程过程调用:远程过程调用:RPC(DCE)模块化继续发展的结果之一即为模块化继续发展的结果之一即为 分布对象分布对象分布对象技术是分布对象技术是面向对象技术面向对象技术分布式计算(网络计算)技术分布式计算(网络计算)技术软件复用技术软件复用技术 的结合的结合 三者具有内在的一致性:自治、协作三者具有内在的一致性:自治、协作分布对象技术的核心:分布对象技术的核心:分布对象模型,以及分布对象间的互操作分
15、布对象模型,以及分布对象间的互操作分布对象技术的实现:分布对象技术的实现: OMG的的CORBA 微软的微软的DCOM二、二、CORBA 本本 节节 内内 容容1、OMG与与CORBA2、CORBA对象模型对象模型3、CORBA概述概述4、IDL5、ORB接口接口6、IR7、POA8、举例、举例(9、CCM)1、OMG与与CORBA(1)OMG(www.omg.org);成立于成立于19891989年年4 4月月固定成员很少固定成员很少不做开发:不做开发:OMG不写任何代码不写任何代码致力于利用现有的技术进行应用系统的集成致力于利用现有的技术进行应用系统的集成目前已经拥有超过目前已经拥有超过1
16、0001000个的成员:个的成员:包括软件厂商、系统集成商以及最终用户包括软件厂商、系统集成商以及最终用户OMG与与CORBA总线总线 (2)如何使分布对象互操作)如何使分布对象互操作 计算机硬件中的模块及互联方式:OMG与与CORBAObject Request BrokerObject ServicesApplication InterfacesDomain InterfacesCommon FacilitiesOMG与与CORBAOMA:Object Management ArchitectureOMG发布的与发布的与CORBA相关的规范相关的规范1、ORB CORBA: Common
17、Object Request Broker Architecture and Specification2、Object ServicesCORBAservices: Common Object Services Specification.3、Common Facilities CORBAfacilities: Common Facilities Architecture本章介绍本章介绍CORBA的主要内容的主要内容其它规范的部分内容将在第三章中进行介绍其它规范的部分内容将在第三章中进行介绍OMG与与CORBACORBA规范(规范(2.3.1)内容)内容第一部分:第一部分:CORBA COR
18、E第一章:对象模型,第一章:对象模型,描述CORBA环境中的计算模型第二章:第二章:CORBA 综述,综述,描述ORB结构,以及接口、实现信息第三章:第三章:OMG IDL 词法与语义,词法与语义,描述 OMG IDL,IDL被用于 描述客户对象调用、对象实现提供的接口第四章:第四章:ORB 接口,接口,定义ORB中不依赖于对象适配器的功能接口第五章:值类型语义第五章:值类型语义,描述通过值传送对象的语义。第六章:抽象接口语义,第六章:抽象接口语义,解释一种抽象接口,它提供了延迟至 运行时刻决定对象由引用还是由值传送。OMG与与CORBA第七章:动态调用接口(第七章:动态调用接口(DII),
19、客户端接口, 允许动态创建并发出对象的请求。第八章:动态骨架接口(第八章:动态骨架接口(DSI), 服务器端接口,可以从ORB 向对象实现发出请求, 该实现体不具有它所实现对象 类型的编译知识。第九章:第九章: Any Values的动态管理的动态管理,描述动态Any Values 的接口。第十章:接口池,第十章:接口池,描述ORB的一个组成部分,它管理并提供对 对象定义集合的访问。第十一章:可移植对象适配器(第十一章:可移植对象适配器(POA),),定义一组IDL接口, 实现体用它们访问ORB功能。OMG与与CORBA第二部分:第二部分:CORBA 互操作互操作第十二章:互操作综述第十二章:
20、互操作综述第十三章:第十三章: ORB 互操作体系结构互操作体系结构第十四章:建立第十四章:建立ORB间互操作的桥间互操作的桥第十五章:第十五章: General Inter-ORB Protocol(GIOP)第十六章:第十六章: DCE ESIOP - Environment-Specific Inter-ORB Protocol (ESIOP)OMG与与CORBA 第三部分:第三部分:CORBA 协作协作第十七章:协作体系结构第十七章:协作体系结构第十八章:第十八章: Mapping: COM and CORBA第十九章:第十九章: Mapping: OLE Automation and
21、 CORBA第二十章:与非第二十章:与非CORBA 系统互操作系统互操作第二十一章:第二十一章: InterceptorsOMG与与CORBA第一章:第一章:CORBA对象模型对象模型第二章:第二章:CORBA 综述综述第三章:第三章:OMG IDL 第四章:第四章:ORB 接口接口第五章:值类型语义第五章:值类型语义第六章:抽象接口语义第六章:抽象接口语义第七章:动态调用接口第七章:动态调用接口第八章:动态骨架接口第八章:动态骨架接口第九章:第九章: Any Values的动态管理的动态管理第十章:接口池第十章:接口池第十一章:可移植对象适配器(第十一章:可移植对象适配器(POA)本节主要讲
22、述内容本节主要讲述内容 应用程序具体开发步骤应用程序具体开发步骤 2、CORBA对象模型(概念)对象模型(概念)客户客户对象对象(执行服务)(执行服务)以以 客户客户/服务器模式服务器模式 为为 对象间互操作模型对象间互操作模型CORBA对象模型对象模型请求请求 对象系统的实现执行请求服务所需的计算活动对象系统的实现执行请求服务所需的计算活动 这些活动可以包括计算请求的结果和更新系统状态这些活动可以包括计算请求的结果和更新系统状态 在这个过程中可能发出其它请求在这个过程中可能发出其它请求 实现模型包括两部分:执行模型和构造模型实现模型包括两部分:执行模型和构造模型 执行模型描述如何执行服务执行
23、模型描述如何执行服务 构造模型描述如何定义服务构造模型描述如何定义服务 符合传统对象的语义,具有封装、继承、多态等特点。符合传统对象的语义,具有封装、继承、多态等特点。 “对象对象 是是 可标识的封装实体,可标识的封装实体, 提供提供 客户可以请求的一个或多个客户可以请求的一个或多个 服务服务”。CORBA对象模型对象模型 客户通过发出客户通过发出请求请求来请求服务。来请求服务。 “从客户的初始化开始,至与该初始化因果相关的最后一个从客户的初始化开始,至与该初始化因果相关的最后一个 事件之间的全部因果相关的事件序列事件之间的全部因果相关的事件序列”。 最后一个事件可能为:最后一个事件可能为:
24、客户从服务器接收到与请求相关的最后响应。客户从服务器接收到与请求相关的最后响应。 服务器在单向请求的情况下处理完相关操作。服务器在单向请求的情况下处理完相关操作。 与请求相关的事件序列因失败而终止。与请求相关的事件序列因失败而终止。 与请求相关的信息包括:与请求相关的信息包括:操作操作目标对象目标对象零个或多个(实际)参数零个或多个(实际)参数以及可选的请求环境以及可选的请求环境CORBA对象模型对象模型任何可以作为合法请求(实)参数的皆可以是值。任何可以作为合法请求(实)参数的皆可以是值。 尤其是,一个值是一个尤其是,一个值是一个OMG IDL数据类型的一个实例。数据类型的一个实例。 对象引
25、用是可靠地指示一个特定对象的值。对象引用是可靠地指示一个特定对象的值。 特别地,每次在请求中使用引用时,对象引用将标识相特别地,每次在请求中使用引用时,对象引用将标识相同的对象(受到某些空间和时间的实际限制)。同的对象(受到某些空间和时间的实际限制)。 对象可以由多个不同的对象引用指示。对象可以由多个不同的对象引用指示。CORBA对象模型对象模型 类型是与一个定义在一组实体之上的谓词(结果为布尔类型是与一个定义在一组实体之上的谓词(结果为布尔 型的单参数数学函数)相关联的可标识实体。如果谓词对于型的单参数数学函数)相关联的可标识实体。如果谓词对于 某个实体为真,某个实体为真, 那么该实体那么该
26、实体满足满足类型。类型。 满足类型的实体称为满足类型的实体称为类型的成员类型的成员。 类型用于在签名(类型用于在签名(signaturesignature,基调、函数头),基调、函数头)中对可中对可 能的参数进行约束、特征化可能的返回结果。能的参数进行约束、特征化可能的返回结果。 对象类型(对象类型(object type)是成员为对象引用的类型。)是成员为对象引用的类型。 CORBA对象模型对象模型 一个操作是一个指示不可分割原语的可标识实体,该原语一个操作是一个指示不可分割原语的可标识实体,该原语是可以被请求的服务体。请求一个操作的活动被称为调用是可以被请求的服务体。请求一个操作的活动被称
27、为调用( invoking ,唤起)操作。,唤起)操作。 一个操作是由操作标识符标识的。一个操作是由操作标识符标识的。 操作有一个描述请求参数合法值和返回值的签名。操作有一个描述请求参数合法值和返回值的签名。签名包括:签名包括: 请求该操作时所需参数的规定请求该操作时所需参数的规定 操作结果的规定操作结果的规定 请求操作所引发例外处理的规定和它们附带的参数类型请求操作所引发例外处理的规定和它们附带的参数类型 可能影响请求的其它环境信息规定可能影响请求的其它环境信息规定 客户预期从请求操作获得的执行语义指示客户预期从请求操作获得的执行语义指示CORBA对象模型对象模型 操作签名的一般形式为:操作
28、签名的一般形式为: oneway(param1,.,paramL)oneway(param1,.,paramL) raises(except1,.,exceptN)context(name1,.,nameM) raises(except1,.,exceptN)context(name1,.,nameM) 其中:其中: 可选的可选的onewayoneway关键字指示对该操作的请求预期获得最佳效果关键字指示对该操作的请求预期获得最佳效果语义;如果操作成功返回结果,则默认语义是只有一次,如语义;如果操作成功返回结果,则默认语义是只有一次,如果返回例外处理,则默认语义是最多一次。果返回例外处理,则默认
29、语义是最多一次。 是返回结果的类型是返回结果的类型 为接口中的操作提供名称为接口中的操作提供名称 操作所需的操作参数;它们以修饰符操作所需的操作参数;它们以修饰符inin、outout或或inoutinout标记,标记,目的是指示信息流的方向(相对于执行请求的对象)目的是指示信息流的方向(相对于执行请求的对象) 可选的可选的raisesraises表达式指示可以引发的用户定义例外处理,它们表达式指示可以引发的用户定义例外处理,它们用于终止对该操作的请求;如果没有提供这样的表达式,那么用于终止对该操作的请求;如果没有提供这样的表达式,那么不会引发任何用户定义的例外处理不会引发任何用户定义的例外处
30、理 可选的可选的contextcontext表达式指示将对对象实现有效的请求环境信息;表达式指示将对对象实现有效的请求环境信息;没有其它信息需要与请求一起传送。没有其它信息需要与请求一起传送。CORBA对象模型对象模型 “ “接口是一组操作的描述,客户可以通过该接口向对象请求接口是一组操作的描述,客户可以通过该接口向对象请求这些操作这些操作”。 接口提供了句法描述,说明支持该接口的对象所提供服务的接口提供了句法描述,说明支持该接口的对象所提供服务的如何被访问。如何被访问。 我们说一个对象我们说一个对象满足满足一个接口,如果它按照操作的规约通过一个接口,如果它按照操作的规约通过接口的操作提供其服
31、务。接口的操作提供其服务。 一个给定接口的一个给定接口的接口类型接口类型是一个对象类型,一个对象引用满是一个对象类型,一个对象引用满足该类型,当且仅当所引用的对象也满足该接口。足该类型,当且仅当所引用的对象也满足该接口。 接口是用接口是用OMG IDLOMG IDL指定的。接口继承提供的复合机制允许对象指定的。接口继承提供的复合机制允许对象支持多个接口。支持多个接口。CORBA对象模型对象模型 一个值类型是一个实体,同时具有接口与结构的许多特征。一个值类型是一个实体,同时具有接口与结构的许多特征。 它是关于客户可能请求的操作集合与可以由客户访问的状态它是关于客户可能请求的操作集合与可以由客户访
32、问的状态集合的描述。集合的描述。 值类型实例总是某种编程语言中的本地实在实现体。值类型实例总是某种编程语言中的本地实在实现体。 值类型是用值类型是用OMG IDL指定的。指定的。 一个抽象接口是一个实体,在运行时可能表示一个通常的一个抽象接口是一个实体,在运行时可能表示一个通常的接口,也可能表示一个值类型。实体运行时刻的类型取决于它接口,也可能表示一个值类型。实体运行时刻的类型取决于它们使用的语义。们使用的语义。CORBA对象模型对象模型属性是接口的一部分属性是接口的一部分属性从逻辑上等价于声明一对辅助函数属性从逻辑上等价于声明一对辅助函数一个获取属性的值(一个获取属性的值(setset)一个
33、设置属性的值(一个设置属性的值(getget) 属性可以是只读的属性可以是只读的CORBA对象模型对象模型概念小结:概念小结:对象对象(Object)请求请求(Request)类型类型(Type)接口接口(Interface)操作操作(Operation)属性属性(Attribute)Class ?为什么不同的体系中概念存在不一致?为什么不同的体系中概念存在不一致?视角不同、抽象层次不同视角不同、抽象层次不同OOP、OOD、OOA、运行、运行?CORBA对象模型对象模型 公共对象请求代理体系结构(公共对象请求代理体系结构(CORBA)的设计目的是)的设计目的是 集成大量不同的对象系统。集成大量
34、不同的对象系统。内容:内容: CORBA 概述概述CORBA 概述概述例子例子 : Grid ObjectGrid objectserver123581321345589144233widthheightget(row,col)set(row,col,value)clientCORBA 概述概述客户客户 是是 希望在对象上执行操作的实体希望在对象上执行操作的实体对象实现对象实现 是是 实现对象的代码和数据实现对象的代码和数据ORB 负责负责 组成请求的数据的通讯组成请求的数据的通讯 查找请求所需对象实现的机制查找请求所需对象实现的机制 准备接收请求的对象实现准备接收请求的对象实现客户如何通过客
35、户如何通过ORB向对象实现发出请求向对象实现发出请求CORBA 概述概述对象请求代理的结构对象请求代理的结构CORBA 概述概述客户利用存根或者客户利用存根或者DII发出请求发出请求CORBA 概述概述对象实现通过对象实现通过Skeleton或者或者DSI接收请求接收请求CORBA 概述概述接口池与实现池接口池与实现池对对CORBA结构中元素的解释结构中元素的解释ORB及接口及接口客户客户对象实现对象实现 对象引用对象引用IDL及向编程语言的映射及向编程语言的映射客户存根与客户存根与DII实现骨架与实现骨架与DSI对象适配器对象适配器接口池接口池实现池实现池CORBA 概述概述CORBA 概述
36、概述对象请求代理(对象请求代理(ORB) 不要求将不要求将ORB实现为单独的构件实现为单独的构件而仅定义其接口而仅定义其接口 任何提供正确接口的任何提供正确接口的ORB实现都是可以接受的实现都是可以接受的 ORB的具体实现包括:的具体实现包括: ORB Core、IDL编译器、编译器、IR、Object Adapter ORB可以有多种实现可以有多种实现 它们对对象引用有不同的表示方法它们对对象引用有不同的表示方法 并且有不同的调用执行方法并且有不同的调用执行方法 ORB Core 提供对象的基本表示,以及请求的通讯提供对象的基本表示,以及请求的通讯 特别地:编排特别地:编排/反编排(反编排(
37、Marshal/Unmarshal) 将高层语言的参数等表示转换为将高层语言的参数等表示转换为便于底层网络传输的形式便于底层网络传输的形式ORB接口接口 ORB接口是客户与对象实现可以直接访问到的接口是客户与对象实现可以直接访问到的ORB功能接口功能接口 其它多数功能提供给其它多数功能提供给对象适配器对象适配器stubskeleton动态调用动态调用 ORB接口接口 对所有对所有ORB都是一样的都是一样的 不依赖于任何对象的接口或对象适配器不依赖于任何对象的接口或对象适配器CORBA 概述概述CORBA 概述概述客户(客户(Client) (对象的)客户访问对象的对象引用(对象的)客户访问对象
38、的对象引用并且调用对象上的操作并且调用对象上的操作 客户只知道对象的逻辑结构客户只知道对象的逻辑结构根据它的接口,并通过调用感受对象的行为根据它的接口,并通过调用感受对象的行为 尽管一般认为客户是向对象发出请求的程序或进程尽管一般认为客户是向对象发出请求的程序或进程 但是客户只是相对于特定对象而言的,是一个相对概念但是客户只是相对于特定对象而言的,是一个相对概念 一个对象的实现可以是其它对象的客户一个对象的实现可以是其它对象的客户客户客户客户客户服务器服务器服务器服务器CORBA 概述概述对象实现对象实现 通过通过 为为 对象实例对象实例 定义定义 数据数据 和和 为为 对象方法对象方法 定义
39、定义 代码代码 提供提供 对象的语义对象的语义对象可以具有不同的实现方式,包括:对象可以具有不同的实现方式,包括:单独的服务器单独的服务器库库每个方法的程序每个方法的程序封装应用程序封装应用程序面向对象的数据库面向对象的数据库 等等等等对象实现不依赖于对象实现不依赖于ORB或者客户调用对象的方式或者客户调用对象的方式对象实现可以对象实现可以 通过通过 选择选择Object Adapter 达到达到 选择与选择与ORB相关服务的接口相关服务的接口 的的 目的目的对象实现(对象实现(Object Implementation) 对象引用提供在对象引用提供在ORB内指定对象时所需要的信息内指定对象时
40、所需要的信息 对象引用对于客户和对象实现都是一个位流对象引用对于客户和对象实现都是一个位流(opaque)的概念的概念 因此客户与对象实现可以与引用的实际表示分离。因此客户与对象实现可以与引用的实际表示分离。 在选择对象引用表示上,不同的在选择对象引用表示上,不同的ORB可以有所差别可以有所差别 传递给客户的对象引用表示仅在客户的生命期内有效传递给客户的对象引用表示仅在客户的生命期内有效 对于一个特定的编程语言,所有的对于一个特定的编程语言,所有的ORB都必须提供对象引用都必须提供对象引用 (通常称为对象)的相同语言映射。(通常称为对象)的相同语言映射。 这就允许用特定语言编写的程序可以在独立
41、于特定这就允许用特定语言编写的程序可以在独立于特定ORB的情的情 况下访问对象引用。况下访问对象引用。 语言映射也可以提供其它访问对象引用的方式语言映射也可以提供其它访问对象引用的方式CORBA 概述概述对象引用(对象引用(Object Reference) OMG接口定义语言(接口定义语言(OMG IDL)通过)通过 指定指定 对象接口对象接口 定义定义 对象类型对象类型 接口包括一组已命名的操作和这些操作的参数。接口包括一组已命名的操作和这些操作的参数。 IDL 是一个分析设计结果是一个分析设计结果 描述描述ORB操纵的对象操纵的对象其源代码的存在对其源代码的存在对ORB正常工作不是必须的
42、正常工作不是必须的 在运行时刻,以在运行时刻,以stub程序或者运行时接口程序或者运行时接口repository的形式的形式提供等价的信息。提供等价的信息。 通过通过IDL,特定对象实现告诉它潜在的客户:,特定对象实现告诉它潜在的客户:什么是有效的操作什么是有效的操作 以及以及 如何调用这些操作如何调用这些操作 从从IDL定义可以将定义可以将CORBA对象向对象向特定编程语言特定编程语言 或者或者 对象系统对象系统 映射映射CORBA 概述概述OMG接口定义语言接口定义语言interface Grid readonly attribute short height; readonly attr
43、ibute short width; void set(in short row, in short col, in long value); long get(in short row, in short col);例子:例子:grid.idlCORBA 概述概述CORBA中主要构件的接口全部由中主要构件的接口全部由IDL进行定义进行定义例如:例如:ORB接口、接口、Stub、Skeleton、对象适配器、对象适配器更主要的用途是定义应用对象!更主要的用途是定义应用对象! 语言映射包括定义特定于语言的数据类型和通过语言映射包括定义特定于语言的数据类型和通过ORB访问对象的过程接口。访问对象的
44、过程接口。 它包括它包括:客户客户stub接口的结构(面向对象的语言不需要)接口的结构(面向对象的语言不需要)动态调用接口动态调用接口实现骨架实现骨架对象适配器和直接对象适配器和直接ORB接口接口 语言映射也包括对象调用之间以及客户或实现中控制线程语言映射也包括对象调用之间以及客户或实现中控制线程之间的交互。之间的交互。 最常见的映射提供同步调用:当对象操作完成时子程序返回最常见的映射提供同步调用:当对象操作完成时子程序返回 编译开关(选项)控制映射具体策略。编译开关(选项)控制映射具体策略。CORBA 概述概述IDL向具体语言的映射向具体语言的映射CORBA 概述概述ORB client l
45、ibraryORB server library编译编译 IDL:gridS.cppserver skeletongridC.cppclient stubsClientServergrid.hcommon declarationsgrid.idl所产生的所产生的 C+ 头文件头文件(Orbix):class Grid : public virtual CORBA:Object public: static Grid_ptr _bind(.); virtual CORBA:Short height(CORBA:Environment&); virtual CORBA:Short width(CO
46、RBA:Environment&); virtual void set(CORBA:Short row, CORBA:Short col, CORBA:Long value, CORBA:Environment &); virtual CORBA:Long get(CORBA:Short row, CORBA:Short col, CORBA:Environment &);CORBA 概述概述客户存根(客户存根(Client stub) 由由IDL编译器根据编译器根据IDL文件生成文件生成 客户访问对象的操作主要方式客户访问对象的操作主要方式 实现实现对象位置透明性对象位置透明性 向非面向对象
47、语言映射时向非面向对象语言映射时 将为每个接口类型产生一个将为每个接口类型产生一个stub编程接口编程接口 面向对象的编程语言不需要面向对象的编程语言不需要stub接口接口 它通过伪对象的方式提供访问对象的操作。它通过伪对象的方式提供访问对象的操作。CORBA 概述概述DII(动态调用接口动态调用接口) 客户指定要调用的对象、要执行的操作和调用或调用序列客户指定要调用的对象、要执行的操作和调用或调用序列中操作的参数集,而不是调用特定于特殊对象上特殊操作的中操作的参数集,而不是调用特定于特殊对象上特殊操作的stub 子程序。子程序。 客户代码必须提供要执行操作的信息和传送参数的类型客户代码必须提
48、供要执行操作的信息和传送参数的类型 动态调用接口的特性可能因编程语言映射的不同而不同动态调用接口的特性可能因编程语言映射的不同而不同 客户通过静态还是动态接口发出请求客户通过静态还是动态接口发出请求对于对象实现是透明的对于对象实现是透明的CORBA 概述概述CORBA_Create_request(.)CORBA_Request_add_arg(.)CORBA_Request_add_arg(.)CORBA_Request_invoke(.)CORBA_Request_delete(.)实现骨架实现骨架(Implementation Skeleton) 由由IDL编译器根据编译器根据IDL文件
49、生成文件生成 对象适配器访问对象实现中方法的主要形式对象适配器访问对象实现中方法的主要形式 对于一种特定映射语言,以及可能的特定对象适配器对于一种特定映射语言,以及可能的特定对象适配器 Skeleton 与与 stub 不是必然对应的不是必然对应的客户也可以通过动态调用接口发出请求客户也可以通过动态调用接口发出请求 但也可以编写不使用但也可以编写不使用skeleton调用实现方法的对象适配器调用实现方法的对象适配器CORBA 概述概述动态骨架接口动态骨架接口(DSI) 通过一个通过一个“提供访问操作名与参数的接口提供访问操作名与参数的接口” 获得获得 一个对象的实现一个对象的实现 实现代码必须向实现代码必须向ORB 提供提供 所有操作参数的描述所有操作参数的描述 ORB 提供提供 任何输入参数的值,以便在执行操作时使用任何输入参数的值,以便在执行操作时使用 在执行操作后,实现代码向在执行操作后,实现代码向ORB 提供提供 任何输出参数的值或者例外处理任何输出参数的值或者例外处理 适配器通过静态还是动态骨架接口访问对象实现适配器通过静态还是动态骨架接口访问对象实现 对于客户是透明的对于客户是透明的CORBA 概述概述动态骨架与动态调用可以被一起用于创建网关(动态骨架与动态调用可以被一起用于创建网关(Gateway) 这些网关包括:不同这些网关包括:不同ORB环境之间的网关环境之间的