体系结构 = 组件 + 连接件 + 约束
软件体系结构的核心概念:
- 构/组件
- 软件重用
构件:
- 语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统
软件体系结构建模
软件体系结构建模种类
- 结构模型
最直观、普遍的建模方法。以体系结构的构件、连接件和其他概念刻画结构,通过结构反映系统的重要语义内容:系统配置、约束、隐含的假设条件、风格、性质等。核心是体系结构描述语言
- 框架模型
不侧重描述结构细节,侧重整体结构。主要以特殊的问题为目标建立针对特定问题的结构。
- 动态模型
结构模型和框架模型的补充。
- 过程模型
研究构造系统的步骤和过程。
- 功能模型
由一组功能构件按照层次组成,下层向上层提供服务,可看作特殊框架的模型
4+1模型
模型采用多视图模型方法,从五个不同的视角,包括:逻辑、开发、处理、物理和场景,五个视图,每个视图只关心系统的一个侧面。
逻辑视图
- 描述系统功能需求,即系统提供给最终用户的服务
- 逻辑视图中,系统分解成一系列的功能抽象。这种分解可以进行功能分析、表示在整个系统的各个不同部分的通用机制和设计元素。
- 面向对象中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图。
开发视图
- 也叫模块视图,侧重软件模块的组织和管理。主要考虑软件内部的需求:开发的容易性、软件的重用性和通用性。开发视图通过描述系统输入输出关系的模型图和子系统图来描述。风格通常是层次结构。
处理视图
侧重于系统的运行特性(序列图、状态图、流程图),关注非功能性需求。强调并发性、分布性、系统集成性和容错能力。
物理视图
把软件映射到硬件上,考虑系统性能、规模、可靠性,解决系统拓扑结构、系统安装、通讯等问题。
场景
看做是重要系统活动的抽象,使四个视图有机联系起来。帮助设计者找到体系结构的构件和它们之间的作用关系。也可以分析一个特定的视图。
4+1总结
- 逻辑视图和开发视图——系统静态结构
- 处理视图和物理试图——系统动态结构
软件体系结构核心模型
软件体系结构的生命周期模型
需求分析->建立体系结构->设计->实现->测试
软件体系结构风格
概述
软件体系结构风格
- 描述某一特定应用领域中系统组织方式的惯用模式
- 反映众多系统所共有的结构和语义特性,知道将各个模块和子系统有效地组织成一个完整的系统
经典体系结构
- 数据流风格:管道/过滤器、批处理序列
- 调用/返回风格:主程序/子程序、面向对象、层次结构
- 独立构件风格:进程通讯、事件系统
- 虚拟机风格:解释器、基于规则的系统
- 仓库风格:数据库系统、超文本系统、黑板系统
管道/过滤器
每个构件都有一组输入输出,构件读入输入数据数据流,经过内部处理,产生输出数据流。这个过程通过对输入流的变换及增量计算来完成,在输入被完全消费之前,输出便产生了
这里的构件成为过滤器,这种风格的连接件像数据流传输的管道,将一个过滤器传输到另一个过滤器的输入
特征:
- 以数据流向的过程为核心
- 过滤器自身功能能独立完成,相互无交互
- 过滤器不需要知道其他过滤器的存在与否
- 过滤器进队输入的数据流有限制,并保证输出的正确
- 系统内各部分的执行,与整体系统的最终输出不相关
过滤器
- 被动过滤器:通过时间或过程调用激发动作,接受前续成分推入的内容
- 主动过滤器:作为独立的过程或线程人物,猪肚取线序成分的内容
- 数据源:作为系统的输入过滤器,提供探测数据、采集数据的功能,主动推出数据,激发或等待后继成分启动
- 数据池:作为手机结果的过滤器,分为主动取数据和被动接受推入数据两种方式
连接器
- 管道是两个过滤器的连接器,先进先出的缓存区
- 如果是两个主动式过滤器项链,管道需要有同步控制能力
- 如果过滤器行为收到相邻过滤器的控制,管道通过被动过滤器的过程调用实现
管道/过滤器 优点:
- 对整个系统理解简单化,将系统各个功能抽象为黑盒子
- 较强维护性、易替换
- 一个过滤器可以多次挂接,支持复用
- 支持并发计算,可以将存在并发可能的过滤器,在调度算法的基础上,组织为多任务并发系统。
- 系统的结构清晰,容易进行性能分析
缺点:
- 交互性弱
- 两个相互独立的过滤器,如果存在同步问题,需要花费较大精力去协调
- 需要处理数据在管道中的阻塞状态
- 直接调用被动过滤器,使过滤器的重新组织产生困难
主程序与子过程
结构特征
- 与程序语言的主程序和过程调用概念相对应
- 所有成分,都属于主程序和一系列的子过程的集合
- 主程序充当子过程的调用者
- 子程序之间也存在调用关系
- 过程之间通过参数传入和传出信息
主程序与子调用结构的成分
- 主程序:基本的程序主体成分
- 子调用:各种层次上的函数,可调用成分
- 函数库:固定的函数子调用(二进制代码复用成分)
主程序与子调用结构的连接器
- 仅过程调用一种
优点
- 是程序设计语言中最基本的表现形式,几乎所有的程序设计语言都对此提供支持
- 程序中需要多次执行的代码,可以使用函数或子过程形式,提高代码使用率
缺点
- 难以表达构件间复杂的连接关系。
- 软件规模增长时,难以维护和理解
- 复用性差
数据抽象和面向对象
数据的表示和操作封装在一个抽象数据类型(ADT)或对象中
构件是对象,即抽象数据类型的实例
对象是一种被称作管理者的构件
- 对象负责保持资源完整性
- 对象是通过方法、过程的调用来交互
面向对象结构的特征
- 对象实体是具有自身属性和行为能力的独立个体
- 任何事物处理都是与对象相互作用的结果,采用“消息”达到这种作用
- 发送消息给对象是“请求”
- 接受请求的对象是“响应”
- 响应“消息”的动作是接受请求对象自身的行为能力,它可以向其他对象发出请求
面向对象结构的连接器
- 消息:对象的联系仅通过消息
- 多态机制:以相同的消息发送给对象,由对象自行决定响应何种行为,连接不同的执行成分
优点
- 接近人的认知习惯
- 稳定的结构
- 实现真正意义的信息封装
- 本身的并发特性,支持分布式
- 更容易复用
缺点
- 对象的标识是发送消息前必须知道的,如果标识被改变,消息就不知去向
- 对象接受多个来自不同请求者的同一个消息,所得到的结果有时不可预测,这种情况系统必须考虑并付出代价。
事件驱动和隐式调用
- 构件不直接调用一个处理过程,而是出发或广播事件
- 系统构件的处理过程在一个或多个事件中注册,当一个时间被触发,系统自动调用在这个事件中注册的所有过程
- 一个事件的触发就导致了另一个模块过程的调用
事件驱动过程
- 外部事件以终端方式被接受并处理
- 各个消息通过过滤器来统一形式,并且统一排队等待处理
- 在系统的统一调度下,消息被发送到各自对应的应用队列中
- 各应用队列有各自的用户交互线程,通过消息循环机制,建立自己的交互应用操作
事件驱动和隐式调用结构的特征
- 消息发送——两种方式
- 点发式:经过中间转发,一点到一点响应
- 广播式:经过中间转发,一点到多点响应
- 异步方式:发送成分与接受成分之间采用异步方式,各自独立不受约束。
特征
- 消息过滤
- 系统过滤:被送到系统消息队列之前
- 应用过滤:被送到应用消息队列之前
- 消息过滤功能
- 变换:转变消息形式成为某种统一的类型和取值范围
- 抑制:截获或阻止某种消息
- 转发:转发经过某种处理的消息到需要响应的成分
- 增生:增强某个消息原有的作用,使之成为多个相同或不同的消息
优点
- 消息与响应的非直接调用,使成分之间耦合松散,增加系统成分连接、集成的灵活性
- 支持软件复用
- 系统以维护
- 易于控制异步并发系统
不足
- 请求消息成分和接受消息成分完全自主独立,不受控制,消息序列不易控制
- 中间层必要的消耗,使消息响应速度明显下降
虚拟机
- 执行程序以能被解释的一种伪码形式表示
- 解释引擎根据固定的语法结构,按照伪码的语义逐句结束伪码,同时根据已经处理解释的状态以及输入的数据来完成输出
黑板/知识库
- 以黑板作为协同操作的核心,状态是核心控制的依据
- 每个知识源作为问题求解的独立单位
- 知识源需要协同完成一个事物的多个计算求解步骤
- 协同的策略和调度算法,作为特殊的知识源
-
由特殊的知识源改变操作的核心状态
组成
- 知识源:独立的、与应用程序相关的知识,相互之间不直接通信,交互通过黑板完成
- 黑板:按照与应用程序相关的层次来组织解决问题的数据,知识源通过不断地改变黑板数据来解决问题。它保存系统的输入问题求解各个阶段的中间和反映整个问题求解的状态
- 控制:完全由黑板的状态驱动,黑板状态的改变使用特定知识
优点
- 便于多客户共享大量数据
- 可重用的知识源
- 容错性和健壮性
缺点
- 不同的知识源代理对于共享数据结构要达成一致
- 同步锁机制增大了系统复杂度
- 测试困难
- 开发成本高
过程控制回路
将事物处理看做具有输入、加工、输出、反馈、再输入的一个持续的过程模型
部件连接器 C2风格
通过连接器绑定在一起的按照一组规则运作的并行网络
- 部件是软件的组成部分,系统架构中起结构块作用
- 连接器是建立部件和部件之间连接的成分
部件可以组合,连接器可以相互连接
客户/服务器风格
三个组成部分 数据库服务器、客户应用程序、网络
数据库服务器:安全、并发、数据完整性、数据备份与恢复
客户应用程序
J2EE架构
四个独立层 客户层、表示逻辑层、业务逻辑层、企业信息系统层
软件体系结构设计过程
- 标识构件/组件
- 生成类图
- 对类进行分组
- 把类打包成构件
- 提出软件体系结构模型
- 在建立体系结构的初期,选择一个结构风格
- 把已标识的构件映射到软件体系结构中
- 分析构件之间的相互作用
- 软件体系结构正交化
软件体系结构评估
SA决定系统的属性
- 性能
- 可靠性
- 可用性
- 安全性
- 可修改性
- 功能性
- 可变性