基于体系结构的软件开发模式

合集下载

第6章 基于体系结构的软件开发过程

第6章 基于体系结构的软件开发过程

第6章 基于体系结构的软件开发过程 6.2 导出体系结构需求
• 体系结构需求从如下3个来源之一导出:系 统的质量目标,系统的业务目标,或将在 该系统上工作的人员的业务目标。后者的 例子可以是这样的一个组织,他们希望建 立一个由熟悉C++图形用户界面的人员组成 的核心小组,这里的需求就可以是使用C++。
第6章 基于体系结构的软件开发过程 6.2 导出体系结构需求
• 可以把需求细分为与系统功能相关的和与体系结 构相关的。由于本章的重点在于设计的体系结构 方面,我们将不讨论功能需求的组织。但需要注 意的是功能需求往往为数众多,可以分成多个不 同的抽象层次,并具体表示为用例。在后续步骤 中,我们将假设有一个相对较小的功能类的列表 可用。我们首先将明确地讨论体系结构需求,然 后处理怎样把它们具体化的问题。
第6章 基于体系结构的软件开发过程 6.2 导出体系结构需求
• 下一步是列举体系结构需求。这些需求就是列举 体系结构驱动器序列,并产生其它重要的体系结 构需求。仍然用前面给出的两个例子说明:在体 系结构驱动器是对产品线的要求的例子中,体系 结构需求可能是对体系结构变更点的列举和对性 能与可靠性需求的列举。在数据库的例子中,需 求可能是对数据库管理系统的变更点(或不变点) 的列举,可以是系统可能要进行的更改的类型的 列举,还可以是一些性能需求。
第6章 基于体系结构的软件开发过程
6.1 概述
• 基于体系结构的开发过程来自于对一些大 型系统的总结,尤其是来自于这些系统的 体系结构设计师。这些系统或者应用于大 型企业,或者是军事应用。所有的系统的 规模都在100KSLOC(thousands source lines of code,千代码行)以上。

基于体系结构的软件开发研究

基于体系结构的软件开发研究

( ) 件 体 系结 构 的 定 义 一 软
D w y eP r e an er y和 A e l 曾 这 样 定 义 : 件 1xWo f 软
2 0世 6 0年代 的软 件 危 机使 人 们 开 始 重 视 软件 工 程 的研究 。起 初 , 们 把 软件 设 计 的重 点 放 在数 人 据结 构 和 算法 的选 择 上 , 着 软 件 系统 规 模 越 来 越 随 大 、 来越 复杂 , 越 整个 系统 的结 构 和规 格 说 明显 得 越
重要性 已远远超 过特 定算法和数据结构 的选择 。本文讨 论 了体 系结 构的概念 、 研究 背景 、 发展现状 、 研 究 方向 、 主要 内容 以及基于体系结构的软件开发过程 。 [ 关键词 ] 软件工程 ; 体系结构 ; 构件
[ 中图分类号 ]T 3 1 总体结构。 在 基 于体 系结 构 的软 件 开 发 过 程 中 , 过 分 析 通 找 出其 中 的稳 定 需 求 和 易变 需 求 , 立 可 复用 的领 建 域 模型 。根 据用户 需求 和领 域模 型 产 生应 用 系统 的 需 求规 格说 明 。在领 域 模 型 的基 础 上 , 出特 定 领 找 域的软件体系结构 。高层设计的任务是根据需求规 格 说 明进行 体 系结 构设 计 , 过 复用 体 系结 构 库 中 通 的特定领域大的体系结构 , 或创造合适该应用环境 的体 系结 构 , 加 以提 炼 存 放 到 库 中备 用 。低 层 设 并 计 主要 解决 具 体 构 件 和 连接 件 的设 计 问题 , 过 复 通 用 库 中存 放 的设 计模式 和其 他类 型的 可 复用 设计 件 或者根 据情 况设计 新 的构件 , 并提 炼 到库 中备 用 。 用 软件 体 系结 构 理论指 导 软件 开 发具 有 很 多优 点, 因此 越 来 越 多 的软 件 开 发 者认 识 到 有 效 的软 件 系统 方 法 必 须辅 以体 系 结 构 的设 计 , 实 的 软件 体 坚 系结 构 基 础 将 直 接 带 来 软 件 开 发 和 维 护 上 巨 大

基于SOA体系结构软件开发的研究与实现

基于SOA体系结构软件开发的研究与实现

基于SOA体系结构软件开发的研究与实现SOA(Service Oriented Architecture,面向服务体系结构)是一种软件开发和设计方法,用于构建松散耦合、可重用和可扩展的系统。

SOA的核心理念是将业务功能划分为独立的服务,并通过网络进行通信和交互。

在基于SOA体系结构进行软件开发的研究与实现中,需要考虑以下几个关键点:1. 服务定义与描述:为了实现服务的独立和可复用性,需要对服务进行清晰的定义和描述。

通常使用Web Service Description Language (WSDL)或者Unified Modeling Language(UML)等标准化工具来描述和定义服务。

2.服务注册与发现:在SOA中,服务的注册与发现是实现服务间通信和交互的关键。

服务提供者需要将自己的服务注册到服务注册表中,而服务消费者则通过查询服务注册表来发现适合自己需求的服务。

这样可以实现服务的动态组合和调用。

3. 服务协作与编排:在SOA中,服务之间可能需要进行复杂的协作和编排。

这可以通过BPEL(Business Process Execution Language)等工具来实现。

BPEL允许将多个服务组合成为一个业务流程,并定义各个服务之间的交互规则。

4.服务安全与可靠性:在SOA体系结构中,服务的安全和可靠性是至关重要的。

因为通过网络进行通信,存在数据泄漏、篡改和服务不可用等风险。

为了保证服务的安全和可靠性,可以使用安全令牌、身份认证、消息加密和滚动事务等机制。

5.服务监控与管理:SOA体系结构中的服务是分布式的,因此需要对服务进行监控和管理。

监控可以包括服务的调用次数、响应时间、失败率等指标。

通过监控,可以及时发现和解决问题,确保服务的高可用性和可靠性。

在实际的软件开发中,可以使用一些成熟的SOA框架和工具来支持基于SOA体系结构的开发。

例如,Apache CXF、IBM WebSphere和Oracle SOA Suite等。

【软件体系结构】 复习

【软件体系结构】 复习

第一章1. 体系结构发现、演化、重用体系结构发现解决如何从已经存在的系统中提取软件的体系结构,属于逆向工程范畴。

由于系统需求、技术、环境、分布等因素的变化而最终导致软件体系结构的变动,称之为软件体系结构演化。

体系结构重用属于设计重用,比代码重用更抽象。

由于软件体系结构是系统的高层抽象,反映了系统的主要组成元素及其交互关系,因而较算法更稳定,更适合于重用。

2.基于软件体系结构的软件开发方法:问题定义—>软件需求—>软件体系结构—>软件设计—>软件实现3.评价软件体系结构的方法权衡分析方法(ATAM方法),软件体系结构分析方法(SAAM方法),中间设计的积极评审(ARID方法)第二章1. 建模结构模型:研究结构模型的核心是体系结构描述语言。

以体系结构的构件,连接件和其他概念来刻画结构。

并力图通过结构来反映系统的重要语义内容。

框架模型:与结构模型类似,但不太侧重细节,而侧重于整体结构。

动态模型:是对结构和框架模型的补充,研究系统大颗粒的行为性质。

过程模型:研究构造系统的步骤和过程,结构是遵循某些过程脚本的结果。

功能模型:认为体系结构是由一组功能构件按层次组成,下层向上层提供服务。

功能模型可以看作是一种特殊的框架模型。

4+1视图模型:逻辑视图、进程视图、物理视图、开发视图和场景视图逻辑视图主要支持系统的功能需求,即系统提供给最终用户的服务。

在逻辑视图中,系统分解成一系列的功能抽象,这些抽象主要来自问题领域。

这种分解不但可以用来进行功能分析,而且可用作标识在整个系统的各个不同部分的通用机制和设计元素。

在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图开发视图通过系统输入输出关系的模型图和子系统图来描述。

进程视图侧重于系统的运行特性,主要关注一些非功能性的需求。

物理视图主要考虑如何把软件映射到硬件上。

逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。

基于体系结构的软件开发模式

基于体系结构的软件开发模式

基于体系结构的 软件开发模式Ξ 博士 张世琨 教授 王立福中国科学院院士 杨芙清(北京大学计算机科学技术系,北京 100871)摘 要:随着软件规模和复杂性的不断增加,系统总体结构设计和说明的重要性远远超过了特定算法和数据结构的选择,软件体系结构作为描述系统高层设计的手段,已成为软件工程领域研究的一个热点。

本文讨论了体系结构的研究背景,研究内容,同其他相关领域,包括面向对象和软件设计模式的关系,以及基于体系结构的软件开发模式所包括的主要活动。

关键词:软件体系结构 构件 连接件 面向对象 设计模式1 背景随着信息时代的到来,计算机在国民经济和社会生活中获得广泛、深入的应用,软件系统的规模和复杂性在不断增长,目前的软件开发手段相对滞后于社会对软件的需求,需要采用工程化的方法开发软件,这就是所谓的软件工程。

在软件工程实践中,人们越来越深刻地认识到,随着软件系统规模和复杂性的增长,系统总体结构设计和说明的重要性已远远超过特定算法和数据结构的选择,良好的体系结构对保证系统的成功至关重要。

软件体系结构层次的设计主要包括以下方面:系统构件的描述,构件之间的交互,指导构件交互的模式,以及施加在模式上的约束[10]。

如同建筑一样,每个软件系统都具有一定的体系结构。

但在过去大多数的软件工程实践中,体系结构设计是非形式化的、随意的,从而难以分析和维护。

因此带来的直接后果是:体系结构设计只是被开发人员含糊地理解;体系结构的选择建立在直觉和经验、而非坚实的工程原则之上;难以对体系结构设计作出一致或完整的分析;随着系统的演化,体系结构难以保持和维护;缺乏有效的工具辅助人们进行体系结构的设计。

对于软件体系结构的研究始于Dewayne Perry和Alexander Wolf[9],David G arlan和Mary Shaw[5]所作的工作,以及对体系结构风格(styles)的分类和评价[6],形式化表示和特定领域软件体系结构(DSSAs)的应用[3]。

第七章基于体系结构的软件开发课件

第七章基于体系结构的软件开发课件
MVC是一种复合的设计模式 基础设计模式有20多种 P202
郑州大学软件学院 赵哲
设计模式
创建型
为你创建对象或类,不必由你来创建。
结构型
有助于将对象或类组合成更大的结构。如复 杂的用户界面和统计数据
行为型
有助于定义对象或类之间的通信
郑州大学软件学院 赵哲
设计模式与软件体系结构
设计模式是软件体系结构的构造块 多个模式组合起来可以完成软件体系结
郑州大学软件学院 赵哲
优秀的程序
可维护 可复用 可扩展 灵活性好
郑州大学软件学院 赵哲
写一个程序
接受输入的数字A、数字B,和运算符+ 或-,然后实现运算
如:输入1、2、+,则程序可以得到3
郑州大学软件学院 赵哲
代码无错便是优?
代码要规范 尽量消除Bug 通过面向对象的继承、封装、多态来降
基于体系结构的QQ设计3-5
文档化 复审 实现
郑州大学软件学院 赵哲
基于体系结构的QQ设计6
演化 有需求才会有演化 增加穿越火线等
郑州大学软件学院 赵哲
划重点
第六章: 6.1.3、6.3、6.4.1 第七章: +-法代码重要 以课件为主 以了解为主
郑州大学软件学院 赵哲
郑州大学软件学院 赵哲
ABSD有关术语
质量场景 预期刺激和非预期刺激 非预期刺激可能不能真正实现,但是可
以用它们来决定边界条件
郑州大学软件学院 赵哲
回顾
设计模式 MVC ABSD ABSD有关术语
郑州大学软件学院 赵哲
设计模式
创建型
为你创建对象或类,不必由你来创建。
结构型
有助于将对象或类组合成更大的结构。如复 杂的用户界面和统计数据

基于体系结构的软件开发

基于体系结构的软件开发
12
第七章 基于体系结构的软件开发
7.1 设计模式
◇ 设计模式概述
使用观察者的MVC MVC主动模型 ◎ 使用观察者的MVC主动模型 接口,并向模型注册。 各个视图实现 Observer 接口,并向模型注册。模型将跟 踪由所有观察器组成的列表。当模型发生改变时, 踪由所有观察器组成的列表。当模型发生改变时,模型将会 遍历所有已注册的观察器,并将更改通知它们。 遍历所有已注册的观察器,并将更改通知它们。此方法通常 称为"发布-订阅" 称为"发布-订阅"。
3
第七章 基于体系结构的软件开发
7.1 设计模式
◇ 设计模式概述
◎ MVC的背景 MVC的背景 软件系统的重要功能之一是从数据存储检索数据, 软件系统的重要功能之一是从数据存储检索数据 , 并将 其显示给用户。在用户更改数据之后,系统再将更新内容 其显示给用户。在用户更改数据之后, 存储到数据存储中。如果将数据存储和界面显示代码放在 存储到数据存储中。 一起,则可以减少编码量并提高应用程序性能。 一起,则可以减少编码量并提高应用程序性能。 但这样做也存在很多问题。 但这样做也存在很多问题。
15
第七章 基于体系结构的软件开发
7.1 设计模式
◇ 设计模式的基本成分
模式名称:通常用来描述一个设计问题、 ◎ 模式名称:通常用来描述一个设计问题、它的解法和 后果,由一到两个词组成。 后果,由一到两个词组成。 问题:告诉我们什么时候要使用设计模式、 ◎ 问题 : 告诉我们什么时候要使用设计模式、 解释问题 及其背景。 及其背景。 解决方案:描述设计的基本要素,它们的关系、 ◎ 解决方案:描述设计的基本要素, 它们的关系、各自 的任务以及相互之间的合作。 的任务以及相互之间的合作。 后果:描述应用设计模式后的结果和权衡。 ◎ 后果 :描述应用设计模式后的结果和权衡。 比较与其 他设计方法的异同,得到应用设计模式的代价和优点。 他设计方法的异同,得到应用设计模式的代价和优点。

基于体系结构的软件开发研究及应用

基于体系结构的软件开发研究及应用
维普资讯
10 2
福 建 电

20 0 8年第 3期
基 于体 系结构 的软件开发研究及应用
秦怀斌 ,官学彪 ,郭
【 摘
理 ,杜文军
(.  ̄- 大 学信 息科 学与 技 术 学 院 新 疆 石 河子 8 20 2 宁夏 中卫 市城 区鼓 楼 东街 文 昌 变 电所 宁 夏 中卫 7 50 1石 r- t - 30 3 . 5 0 0)

建 立 关 系 的软件开发模型 软 件体 系结 构 =构 件 。 接 件 , 束 l f 连 约 该 定 义 认 为 软件 体 系 结 构 是 软 件 设 计 过 程 的 一 个 层 次 。 这 体 系 结 构 审查 及 演 化 是 对 已 经 设 计 好 的 体 系 结 构 进 行 复 发 及 以适 应 新 的 层 次 超 越 计 算 过 程 中 的算 法 设 计 和数 据结 构 设 计 ,并 认 为 系 查 . 现 设 计 中 的缺 陷或 错 误 , 时 对 其 进 行 修 改 ,
定 义 1 Galn& S a 定 义 : ra hw
需求分析
的 软 件 设计 方 案 。并 设 计 出 系 统 中的 实 功 需 l 型 能 求 模 际构 件 。 性能需求 需 求规格说明: 32基 于 体 系结 构 的软 件 开 发 模 型 . 软 件 体 系 结 构 作 为 软 件 开 发 中 的一
件 业得 到 了 飞速 发 展 。 人 们 重视 软 件 工 程 之 初 , 精 力 主 要 放 在 把 在 研究 数 据结 构 和算 法 上 , 即认 为 : 序 = 据 结 构+ 程 数 算法 。 随 着 软 件 系统 规 模越 来 越 大 、 越来 越 复 杂 , 统 的 软 件 工 程 学 已 不 能 传 满 足 开 发 需 要 。人 们 逐 渐 发 现 , 于大 规 模 复杂 系统 的开 发 , 对 对 系 统 的 总 体 结 构描 述 和 规 格 说 明 比对 系 统 的 数 据 结 构 和 算 法 更 重 要 。 此 基 础上 。 为控 制 软 件 复 杂 性 、 高软 件 系 统 质量 、 在 作 提 支 持 软 件 开 发 和 复用 的重 要 手 段 之 一『 软 件 体 系 结 构 概 念 出现 并 l 1 . 逐 渐 发展 起 来 了 软 件 体 系 结 构 是 软件 系统 设 计 的 高 级 抽 象 。体 现 了 系 统 设 计 的 基 本 思 想 和 系统 开 发 中的 早 期 决 策 .对 系 统 具 有 深 远 的 影 响 。 件体 系 结 构 在 明 确 了 系 统 的各 个 组 成 部 分 的 同 时 。 限 定 软 也 了 各 部 分 间 的交 互方 式 嘲 件 体 系结 构研 究 的是 系 统 构 件 、 软 构 件之间 的关系 。 及软件系统构造 、 束 、 义 、 以 约 语 分析 、 性 和 系 属 统 需 求 。 件 体 系 结构 研 究 的 最 终 目的 是减 少 大 型系 统 、 杂 系 软 复 统 开 发 的 时 间 和 成本 。 高 系统 开 发质 量 。 提 2 软 件体 系 结构 及 相 关 概 念 . 虽 然 软 件 体 系 结 构 在 软 件 工 程 学 中 有 着 越 来 越 广 泛 的 应 用 。 迄 今 为止 。 但 不论 在 学 术 界 还 是 工 业 界 都 没 有 一 个 被 人 们 所 公 认 的 定 义 。 下 面 给 出两 个 较 有 影 响 力 的定 义 PI -: I  ̄
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于体系结构的 软件开发模式Ξ 博士 张世琨 教授 王立福中国科学院院士 杨芙清(北京大学计算机科学技术系,北京 100871)摘 要:随着软件规模和复杂性的不断增加,系统总体结构设计和说明的重要性远远超过了特定算法和数据结构的选择,软件体系结构作为描述系统高层设计的手段,已成为软件工程领域研究的一个热点。

本文讨论了体系结构的研究背景,研究内容,同其他相关领域,包括面向对象和软件设计模式的关系,以及基于体系结构的软件开发模式所包括的主要活动。

关键词:软件体系结构 构件 连接件 面向对象 设计模式1 背景随着信息时代的到来,计算机在国民经济和社会生活中获得广泛、深入的应用,软件系统的规模和复杂性在不断增长,目前的软件开发手段相对滞后于社会对软件的需求,需要采用工程化的方法开发软件,这就是所谓的软件工程。

在软件工程实践中,人们越来越深刻地认识到,随着软件系统规模和复杂性的增长,系统总体结构设计和说明的重要性已远远超过特定算法和数据结构的选择,良好的体系结构对保证系统的成功至关重要。

软件体系结构层次的设计主要包括以下方面:系统构件的描述,构件之间的交互,指导构件交互的模式,以及施加在模式上的约束[10]。

如同建筑一样,每个软件系统都具有一定的体系结构。

但在过去大多数的软件工程实践中,体系结构设计是非形式化的、随意的,从而难以分析和维护。

因此带来的直接后果是:体系结构设计只是被开发人员含糊地理解;体系结构的选择建立在直觉和经验、而非坚实的工程原则之上;难以对体系结构设计作出一致或完整的分析;随着系统的演化,体系结构难以保持和维护;缺乏有效的工具辅助人们进行体系结构的设计。

对于软件体系结构的研究始于Dewayne Perry和Alexander Wolf[9],David G arlan和Mary Shaw[5]所作的工作,以及对体系结构风格(styles)的分类和评价[6],形式化表示和特定领域软件体系结构(DSSAs)的应用[3]。

在国家“九五”重点科技攻关项目中,杨芙清院士领导的青鸟工程提出了基于构件2构架模式的软件生产线[1]。

软件体系结构已成为目前软件工程领域研究的热点之一。

2 软件体系结构事实上,软件体系结构并不是最近才出现的新生事物。

多年以来,软件开发人员在实践中已经总结出许多行之有效的体系结构,适用于多种不同的场合。

例如,UN IX操作系统中的管道机制,ISO/OSI的网络层次参考模型,人工智能中的黑板系统,以及图形用户界面编程的事件驱动模型等。

尽管对这些术语人们很少给出确切的定义,但它们却表达了关于复杂系统的整体结构,以及系统所具有的各种特性的语义信息,如系统未来的演化路径、总体的计算模式、同其他类似系统的关系等。

然而,软件体系结构的研究目前还处于比较初始的阶段,对什么是软件体系结构还没有一个标准的、为大家所普遍接受的定义。

一般认为,一个软件系统的体系结构定义了组成系统的计算构件和构件之间的相互作用关系。

在体系结构层次的构件包括:客户、服务器、数据库、过滤器(filters)等。

构件之间的交互可以是非常简单的,如过程调用、共享数据访问、消息连接等;也可以是复杂并具有丰富语义的,如客户2服务器协议、数据访问协议、异步事件广播和管道(pipes)等。

以往人们在软件系统设计中,通常把功能性的实体当作Ξ国家“九五”重点科技攻关项目资助课题。

第一位的,如结构化设计方法中的模块,面向对象方法中的类和对象。

在一定意义上,模块和对象都是系统中的构件,它们之间的相互关系就是构件之间的连接。

而模块之间的调用关系,对象之间的消息连接、聚集等各种关系,往往并没有作为单独的实体出现,它们通常附属于上述第一位的实体。

软件体系结构层次的设计定义了系统的高层构件和构件之间的关系。

系统构件之间的关系通常十分复杂,包含丰富的语义和复杂的规约。

因此有必要把构件之间的关系也作为第一位的实体,称之为连接件(connectors ),构件通过连接件相互作用。

作为独立的实体,连接件可以表达构件之间丰富的语义信息。

连接件和构件应该是独立且各有分工的,构件应该只定义它的能力(包括功能和非功能两个方面),而至于它如何使用,特别是在特定环境下同其他构件的连接,应由连接件来定义。

构件和连接件都通过接口对外提供功能,屏蔽内部实现细节。

系统的体系结构规定了组成系统构件和连接件,各自承担的责任、对外提供的接口、接口协议和约束。

目前在软件体系结构领域的研究主要集中于以下几个方面:体系结构描述语言、体系结构风格及其分类、特定领域的体系结构、体系结构的形式化基础等[10]。

3 同其他相关研究领域的关系随着软件系统规模和复杂性的增加,软件复用在当前比以往任何时候都显得更为重要。

人们在多个领域、多个层次开展了对软件复用的研究,从早期的源代码复用、函数/子程序库复用,到面向对象中的继承机制,以及最近的设计模式等,复用的抽象层次越来越高,最高层次的复用是对某种风格的软件体系结构的复用,每种体系结构风格确定了系统的设计元素及其组装规则。

风格通过集中于特定的设计空间,简化了系统的设计和实现过程,从而达到降低开发和维护费用的目的。

这部分集中讨论体系结构同面向对象设计和软件设计模式之间的关系。

311 体系结构设计和面向对象设计面向对象设计范型提供了一种描述系统设计的方法。

对象封装了数据和操作,并向外提供显式的接口。

消息通讯用作连接对象的“胶水”和定义通讯信道。

尽管面向对象设计概念被用于解决一些体系结构设计的问题,并且在目前的软件开发实践中被广泛采用。

但面向对象设计和目前正在出现的一类针对体系结构设计的工具和符号有着很大的区别。

从下面的一个例子我们可以看出,软件体系结构的概念允许设计人员描述一个构件的多重、丰富的接口,以及描述和封装构件之间交互的复杂协议,这些用传统的面向对象的概念和符号是很难描述的。

图1给出了一个系统的体系结构图,该体系结构是“pipe 2and 2filter ”风格的,所有的构件都是过滤器,负责进行数据转换并提供特殊类型的输入输出接口;所有的连接件都是管道,描述了两个过滤器之间的二元关系和数据传输协议,每个管道都有两个接口———“源”(source )只能连接到过滤器的输出接口,“潭”(sink )只能连接到过滤器的输入接口。

图1 一个Pipe 2and 2filter 模式的简单系统的体系结构图 关于该设计有三点值得注意的地方,首先,Filters 之间的交互协议是显式的和良好定义的;第二,构件和连接件(在这个例子中就是Filters 和Pipes )都有多重良好定义的接口,以此限制了通过接口连接的设计元素的行为,例如,上游Filters 只能向Pipes 中写数据,下游Filters 只能从Pipes 读数据,防止了构件对连接件功能的不恰当的访问(例如,上游Filters 从Pipes 中读数据);最后,因为连接件所具有的丰富的语义,就有可能通过对设计的评价,确定未来系统的全局特性,例如系统吞吐量、系统瓶颈等。

图2是对上述系统进行面向对象设计的结果,采用了James Rumbaugh 等提出的OM T 表示。

图2左边的类图说明每个Filter 通过pipe 同其他Filter 连接,每个pipe 连接有“源”和“潭”以指示方向性。

图2右边是使用该结构的一个简单系统的实例图。

图2 上述系统的面向对象设计 关于该设计有几点值得注意的地方,首先,在两个Fil2 ters“first2stage”和“second2stage”之间的连接不是同Filters一样的第一位实体,因此不能支持复杂的协议描述。

并且这个一般的连接意味着,上游的Filters可以访问下游Filters的任何公共方法。

尽管面向对象方法中的对象可以表达复杂的实体,但是对象之间的连接能力却是比较弱的。

第二,任一对象如果可以向另一对象发送信息,前者就可以请求后者激活它的任意公共方法。

也就是说,每一对象向其他对象提供了单一的接口,于是一个服务器对象就不能根据不同客户对象的特定要求,以及两个对象之间的连接类型限制对不同接口的访问。

第三,对象之间的简单连接意味着至少其中一个对象要知道另一个对象的存在,并了解它对外提供的公共方法。

这就违背了Pipe2and2filter模式的一般原则,以UN IX中的管道机制为例,上下游Filters之间是相互独立的,它们无需了解对方的任何情况,只通过遵守通过标准输入/输出传递信息的协议。

即使把Pipe连接件作为第一类实体,在传统的面向对象方法中,依然存在对象无法根据特定的连接类型限制对公共接口的访问等问题。

以上的例子表明,由对象构成的系统未必是进行体系结构设计的最好方法。

面向对象设计只是一种特殊的体系风格,这里所有的构件都是对象,所有的连接件都是简单的连接(例如消息连接、聚集等)。

体系结构设计关心的是,通过构件及其连接进行系统的合成。

这种合成提供了系统的抽象描述,允许对系统总体特性进行适当的约束和分析。

正是系统的总体特性造成了体系结构设计和面向对象设计的重要区别。

两者都描述系统的结构,但从总体上说,体系结构设计比面向对象设计提供了更为丰富的抽象机制,特别是描述复杂的系统连接的“胶水”(连接件)。

除了在上面例子中描述的Pipe连接件之外,还可以定义N元连接件,例如事件驱动系统,基于RPC的SQL查询,两阶段提交的事务协议等。

体系结构还允许设计者为构件关联多个接口,以表达设计的拓扑结构和基于语义的约束。

体系结构作为系统设计的一种高层抽象表示,同面向对象设计不能互相替代,它们在软件开发的不同阶段和层次上发挥各自的作用,例如,我们可以使用面向对象设计细化体系结构中复杂的构件或连接件。

312 体系结构风格和设计模式面向对象的软件开发方法通常给出了软件设计的一般原则和步骤,但缺乏解决具体设计问题的办法,而且一般的设计方法存在两个重要的局限,(1)描述成组对象之间的复杂交互,和(2)打包相关的对象集合以便于复用。

软件设计模式是解决这些问题的一条途径。

设计模式描述了在特定环境中反复出现的一类设计问题,并提供经过实践检验的解决这类问题的通用模式。

设计模式的基本思想是,公共的“习惯用法”(idioms)在软件设计中被不断重复发现,因此这些模式应该被有意识地归纳整理,并用于类似问题的解决上。

尽管设计模式同面向对象设计没有必然的联系,但目前在这个领域的大部分工作集中于对象组装模式。

设计模式的使用扩展了面向对象的设计能力。

说明和复用软件设计模式的一个基本需求是:很好地理解问题域、支持设计元素的封装、并经过长期演化,得到一批可以有效的解决实际问题的“习惯用法”。

模式描述语言允许具有丰富设计经验的软件开发者归纳整理有效的设计模式以备以后复用。

相关文档
最新文档