大家好,欢迎来到IT知识分享网。
文章目录
- 基于构件的软件工程 (Component-Based Software Engineering)
- 重点:从编程软件偏移到组装软件系统(工程师的焦点从“实现”变成了“集成”)
- 基础:假定在很多大型软件系统中存在足够多的共性,从而使得开发可复用软件组件来满足这些共性是值得的。
1. 构件和构件模型
- 构件:是一个独立的软件单元,可以与其他构件构成一个软件系统
1.1 特征
- 可组装型
所有外部交互必须通过公开定义的接口进行 - 可部署性
必须是自包含的
自包含:指一个模块、组件或系统能够独立地运行和测试,而不依赖于其他模块、组件或系统。
- 文档化
构件必须是完全文档化的,用户根据文档来判断构件是否满足需求。
- 独立性
可以在无其他特殊构件的情况下进行组装和部署,如确实需要其他构件提供服务,则应显示声明。
- 标准化
构件标准化意味着在 CBSE过程中使用的构件必须符合某种标准化的构件模型。
1.2 构件模型
1.2.1 构件模型概述
- 概述:
- 构件模型定义了构件实现、文档化以及开发的标准
- 构件模型提供了一组被构件使用的通用服务
- 平台服务:允许构件在分布式环境下通信和互操作
- 支持服务:是很多构件需要的共性服务(如身份认证服务)
- 主流的构件模型:Web Services 模型、 Sun公司的EJB 模型、微软的.NET模型
中间件实现共性的构件服务,并提供这些服务的接口
1.2.2 构件模型包含要素
1)接口
- 构件通过构件接口来定义
- 构件模型实现:
- 规定应如何定义构件接口
- 在接口定义中应该包含的要素(如操作名、参数以及异常等)
2)使用信息
- 作用:为使构件远程分布和访问,必须给构件一个特定的、全局唯一的名字或句柄
- 构件元数据
- 概述:是构件本身相关的数据(如构件的接口和属性信息)
- 作用:用户可以通过元数据找到构件提供的服务
- 构件模型实现:包括访问构件的元数据的特定方法
构件是通用实体,在部署的时候,必须对构件进行配置来适应应用系统。
3)部署
- 构件模型实现:包括
规格说明
:指出应该如何打包构件使其部署成为一个独立的可执行实体部署信息
:包含有关包中内容的信息和它的二进制构成的信息。
1.2.3 容器理论
2. CBSE过程
- 概述:是支持基于构件组装的软件开发过程
成功的构件复用需要一个经过裁剪、适配的开发过程
2.1 主要活动包括
- 系统需求概览
- 识别候选构件
- 根据发现的构件修改需求
- 体系结构设计
- 构件定制与适配
- 组装构件,创建系统
2.2 与传统的软件开发过程的不同
- CBSE 早期需要完整的需求,以便尽可能多地识别出可复用的构件
而增量式开发中,早期并不需要完整的需求。
- 在过程早期阶段根据可利用的构件来细化和修改需求
如果构件不满足需求,最好能改需求。
- 在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动
- 可能需要为某些构件寻找备用构件
- 可能修改构件以适合功能和架构的要求
- 开发就是将已经找到的构件集成在一起的组装过程
- 包括:
- 将构件与构件模型基础设施集成在一起
- 开发适配器来协调不匹配的构件接口(可选)
- 额外的功能(可选)
- 包括:
在 CBSE 中,体系结构设计阶段特别重要。在这个阶段,将选择一个构件模型和一个实现平台。而模型和平台也决定和限制了可选构件的范围。
3. 构件组装
- 构件组装:指将构件直接集成或是用专门编写的“胶水代码”整合在一起,来创造一个系统或另一个构件的过程。
- 选择组装方式必须考虑:
- 系统所需要的功能性需求、非功能性需求
- 当系统发生改变时,一个构件能被另一个构件替代的难易程度。
3.1 组装方式
1)顺序组装
- 使用:顺序组装两个构件,成为一个新构件
- 需要特定的胶水代码,来保证两个构件的组装
- 上一个构件的输出,与下一个构件的输入相兼容。
- 适用于:作为程序元素的构件或是作为服务的构件。
2)层次组装
- 概述:一个构件直接调用由另一个构件所提供的服务
- 被调用构件为调用构件提供所需的服务
被调用构件的“提供”接口必须和调用构件的“请求”接口兼容。
- 使用:
- 如果接口相匹配,则调用构件可以直接调用被调用构件
- 否则就需要编写专门的胶水代码来实现转换。
3)叠加组装
- 概述:两个或两个以上构件放在一起来创建一个新构件
- 新构件合并了原构件的功能,从而对外提供了新的接口。
- 外部应用可以通过新接口来调用原有构件的接口
- 原有构件不互相依赖,也不互相调用
- 适合于:构件是程序单元或者构件是服务的情况
3.2 构件不兼容
1)构件不兼容的情况
- 参数不兼容
接口每一侧的操作有相同的名字,但参数类型或参数个数不相同。 - 操作不兼容
提供接口和请求接口的操作名不同。 - 操作不完备
一个构件的提供接口是另一个构件请求接口的一个子集,或者相反。
2)解决方法
- 解决方案:编写适配器
- 实现方法:
- 适配器构件使两个可复用构件的接口相一致
- 适配器构件将一个接口转换为另外一个接口
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151644.html