第10章 软件复用技术(10.3-10.6)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可复用组件应具备的属性
①有用性——组件必须提供有用的功能; ②可用性——组件必须易于理解和使用; ③质量——组件及其变形必须能正确工作; ④适应性——组件应该易于通过参数化等 方式在不同语境中进行配置; ⑤可移植性——组件应能在不同的硬件运 行平台和软件环境中工作。
组件复用方式
组件复用有白盒和黑盒两种方式。黑盒 是指不作修改的直接引用;白盒指进行 适应性修改的引用。 源代码在大多数情况下是指适应性修改 地引用;二进制代码组件的复用只能采 用黑盒方式,通常只能了解组件的接口 和属性等信息。
IDL
IDL(Interface Definition Language)是 用于说明对象接口的标识语言。 作用:接口概念一方面把对象的使用与 对象的实现彻底分开;另一方面ORB使 用对象的接口描述可在异类环境下实现 不同数据格式的转换;第三,IDL编译程 序能把接口描述直接映射到目标语言, 极大地加快了代码开发。
例子
Module Shapes { interface Rectangle { attribute attribute Integer length; integer width; integer void void } interface Square Rectangle { } area( ); draw( ); translate(in integer X, in integer Y);
10.4.3 基于CORBA的软件开发
①编写OMG定义的IDL接口规范说明文件,描述服务对象所支持的 操作和类型; ②编译IDL规格说明文件,生成客户端存根和服务器端骨架; ③编写对象实现程序; ④编写服务器和客户主程序结构; ⑤将对象实现程序,服务主程序和生成的服务器骨架编译连接成 服务端可执行程序; ⑥将客户端主程序和生成的客户端存根编译连接成客户端可执行 程序,且若服务器端是基于 Web和浏览器方式的,则相应地编 写HTML超文本文件,链入编写的客户方Java Applet小程序; ⑦分别运行服务器端和客户端程序。
COM组件 COM对象 COM对象
COM接口
COM接口
COM对象
在COM规范中,并没有对COM对象进行严格的 定义。 COM对象同C++语言中的类一样,也包括属性 和方法。属性反映了对象的状态,方法则是对 象提供给外界的接口,客户必须通过接口才能 获得对象的服务。 COM对象以提供功能服务为主,可用来替代传 统的API(Application Programming Interface) 函数。
OMA(层次结构)
Objects Objects Objects Objects
Domain Objects Facilities
Services ORB OS
10.4.1 CORBA的组成
客户程序(Client) 对象实现(Server)
动态调用接口
静态IDL 存根
ORB接口
动态骨 架接口
静态IDL 骨架
10.3 组件技术概述
我们能如此开 发软件吗?
10.3.1 组件的定义与复用
组件(Component),亦称构件,是指语义完 整、语法正确和有可重用价值的单位软件,它 是语义描述、通信接口和实现代码的复合体。 简单地说,组件是具有一定的功能,能够独立 工作或能同其它组件装配起来协调工作的程序 体,其使用同它的开发、生产无关。 组件可分为源代码组件和二进制代码组件。
10.3.2 组件模型
组件模型通常由基于各种语言开发工具、 组件嵌入机制和相关服务(事务、安全、 认证、负载均衡等)组成。 比较成熟的组件模型有OMG的CORBA、 SUN的EJB(Java Bean)和Microsoft的 COM/DCOM/COM+。
三种组件模型间的差别
COM为组件交互定义了一个二进制的标准,只是 Windows平台上广泛采用的模型。 CORBA可以运行在多种不同操作系统上,与平台和 语言无关,但它不是一个二进制的标准。 EJB(Enterprise Java Beans)是一个服务器端组件 模型,Java Beams是一个可供使用的组件,主要用 于构建客户端软件并特别考虑了GUI组件的需要。 EJB和CORBA兼容,并可能相互促进。由于EJB要求 所有组件都要用Java编写,而Java必须运行在Java 虚拟机上,从而会导致Java很难与非Java代码实现 紧密集成。
10.4.4 CORBA的特点
同时支持分布计算技术和面向对象技术。 支持许多现存的语言并把这些语言混合到一个分 布式应用系统之中。 代理机制使得客户端程序和服务器端程序完全分 离,这样服务器端和客户端程序都可自由地修改 而无需通知对方。 提供了“软件总线”的功能,实现了软件组件的 即插即用。 提供了一种高度的互操作性,保证了建立在不同 CORBA产品之上的分布式样对象能够相互通信。
上述两种检索方法均基于语法匹配,这要求使用者对组件库中的有关词汇有较全 面的把握和较精确的理解。理想的检索方法是语义匹配:组件库的用户以形式化 的手段描述所需组件的功能或行为的语义,系统通过定理证明或基于知识的推理 来寻找语义上等价的或相近的组件。
10.3.6组件使用
理解组件 (①组件的功能与行为;②相 关的领域知识;③可适应性约束条件与 例外情形;④可以预见的修改部分及修 改方法); 修改组件; 合成组件 (基于功能的合成技术:调用 与参数传递、基于数据的合成技术:调 用与参数传递、面向对象的合成技术: 继承)。
•module用来引入 一层作用域; •Interface集中一些 相关的操作; •attribute标识了具 有get/set存取器函 数对的数据成员; •in表输入;out表 输出;inout表输入 输出。
}
IDL编译
由IDL编译器根据IDL代码生成相应编程 语言的客户代理(骨架)和服务器代理 (存根)对象等。
10.5 组件对象模型
组件对象模型(Component Object Model, COM) 是微软(Microsoft)的组件软件方案,是为组件的互 操作而定义的二进制组件模型。 分布式组件对象模型(Distribnted Component Object Model,DCOM)是COM的一个分布式扩充, 是在分布式计算环境的远程过程调用的基础上开 发的。 COM+是按COM的标准建立的,并组合了一些工具 的新版本,如MTS(Microsoft Transaction Server)、MSMQ(Microsoft Message Queues)等。
10.5.1 COM标准
COM作为一面向对象的编程模型,目的是提高软件的 交互协同工作能力,而不受开发语言和方法、运行环 境和地点的限制。 在Windows系统平台上,一个COM组件或是一个DLL 文件,或是一个EXE文件。 一个组件程序可以包含多个COM对象,每个COM对象 可以实现多个接口。
接口存 储数据 库 GIOP/IIOP
对象适配器
实现存 储数据 库
ORB核
ORB核/ORB接口
ORB(Object Request Broker)该是作为对象互通信的软总 线。 ORB截获服务请求调用,然后识别网络中服务器的位置,即 对象实现的位置。若服务器不在运行,则ORB启动服务器, 并一直等待到它准备接受服务请求为止。 ORB接口是ORB核给出的接口,同时为客户和对象实现方所 见,提供了一些只能由ORB核提供的服务:对象引用操作、 ORB初始化、对象适配器初始化和获取初始对象引用。 ORB之间的互操作则采用GIOP和IIOP实现。 ORB的特性可使客户程序不用考虑:服务器编程语言、服务 器平台、服务器地点和网络协议。 ORB提供了两个用于存储有关对象信息的服务:接口仓库 (接口存储数据库)和实现仓库(实现存储数据库)。
10.4 公共对象请求代理体系结构
公共对象请求代理体系结构(Common Object Request Broker Architecture, CORBA)是由对 象管理组织OMG制定的一个工业规范,其主要 目标是提供一种机制,在此基础上,对象可以 透明地请求和获得应答。 CORBA的实质是远过程调用与面向对象技术的 有机结合。 OMG于1990年制订了OMA(Object Management Architecture),它可用任何方法 来实现ቤተ መጻሕፍቲ ባይዱCORBA是其中的一种实现方案。
静态调用
静态调用是指通过静态IDL 存根和静态IDL骨架进行的 调用过程。 静态IDL存根对客户端来说 可看作它的远端对象,即 服务器代理;静态IDL骨架 对对象实现来说可看作它 的客户端,即客户代理。 静态调用必须在编译时就 知道特定的目标对象的接 口信息。 静态IDL存根和静态IDL骨 架由编译IDL接口定义语言 文件得到。
客户端ORB请求
静态IDL存根打包请求 (源编程语言格式样→传输格式)
ORB传递且激合对象实现
静态IDL骨架解包 (传输格式→目的编程语言格式)
对象实现
动态调用
动态调用接口 (Dynamic Invocation DII根据接口库提供的IDL接口信息通过函 Interface, DII)和动态 数Create-request动态创建对象请求 骨架接口(Dynamic Skeleton Interface, DSI) ORB传递 可分别被视为通用存根 和通用骨架,它们由 DSI从进入的消息中找出调用的目标对象 及相应的方法,并提供运行时的连接机制 ORB直接提供不依赖于 所调用对象的接口。
对象实现
客户端运期间发请求
对象适配器
对象适配器是ORB与对象实现间的接口, 其主要的工作如下: 对象实现的注册; 生成及管理对象引用; 服务器进程激活; 对象激活/撤销/向上调用。
10.4.2 ORB运行机制
1. 开始; 2. 客户获取特定对象实现的对象引用; 3. 如果对象以静态方式实现,则通过IDL存根向对象实现发出请求,然后转6; 4. 将请求发给ORB提供的DII; 5. DII根据接口库的信息将请求传递给对象实现; 6. ORB传递请求; 7. ORB内核在请求到达后做一定的处理,然后将其送给对象实现登记的对象适配器; 8. 对象适配器接收请求; 9. 如果不是本ORB域登记,则转13; 10. 如果有相应的IDL骨架存在,则对象适配器通过IDL骨架调用对象实现中的方法,并转17; 11. 对象适配器通过DSI调用对象实现方法; 12. 转17; 13. 将请求传给DSI; 14. DSI产生一个代理对象; 15. 代理对象将请求转成中间协议表示形式传给目的ORB; 16. 目的ORB将中间协议表示形式转换成本地DII请求,以实现对对象实现中的方法进行调用; 17.将结果按原路返回给客户;
窗口 图形窗口
菜单
对话框 信息对话框
事件处理 拖放处理
文本窗口
数据录入对话框
键盘事件处理
多面分类方式
10.3.5组件检索
基于关键词的检索 (在图形用户界面上将可复用 组件库的关键词树直观地显示给用户,用户通过 逐级浏览关键词树寻找需要的关键词并提取相应 的组件;或直接输入含通配符的关键词由系统自 动给出合适的候选组件清单,用户选择并提取相 应的组件。); 多面检索 (构造查询、检索组件、排序组件)。
10.3.3 组件获取与描述
通常可以采用以下途径来获取组件:
从现存组件中获取得符合要求的组件,直接使用 或作适应性修改,得到可复用的组件; 通过遗产工程,将具有潜在复用价值的组件提取 出来,得到可复用的组件; 从市场上购买现成的商业组件,即COTS (Commercial Off-The-Shelf,商业现货)组件; 开发新的符合要求的组件。
组件获取后,可对它进行结构化组织并放入 可复用组件库,以备复用。
组件描述
属性。描述了组件的特征。属性值对外 可以读出,也可以修改。 功能接口。即组件向外提供的服务。 依赖关系。指出组件在实例化时所依赖 的其它组件的特定接口,是组件完成其 任务所必需的。
10.3.4组件分类
关键词分类
用户界面