第1章 软件体系结构基本概念
1.1软件体系结构基本概念
1.2软件体系结构风格、模式和框架
1.3软件结构的基本元素和连接
1.4软件体系结构设计的基本原则
1.1 软件体系结构的基本概念
软件体系结构是软件工程的重要研究领域,软件体系结构并没有统一的定义。
90年代开始,很多专家学者对软件体系结构引起广泛关注,综合软件体系结构的定义,比较权威性的论述是:
总体组织
全局控制
通讯、同步、协议
设计元素的功能
物理分布和集成
软件体系结构要点:
1.2 软件体系结构风格、模式和框架
风格是表达特定系统元素和组织方式的通用范例(idiomaticparadigm)。软件体系结构风格,反映众多系统共有结构的习惯用法和语义,表述系统的静态结构方式,强调软件元素的组织形式和通常用法。
设计模式是软件问题高效和成熟的设计模板(pattern),模板包含了固有的问题的处理逻辑,强调处理逻辑采用方式的直接复用。
框架是待实例化的、可复用的大粒度部件结构。框架面向不同规模的应用问题,是通用的结构。强调针对实际问题和通用结构。
1.3软件结构的基本元素和连接
软件结构的表示从低层到高层,高层软件结构是建立在基础结构之上的。
软件构成的基础结构包括:
①数据类型结构
数据类型是最基本的软件结构元素,是描述复杂算法和软件结构的基础,即数据结构。
数据类型包括:
基本数据类型
抽象数据类型
②控制流连接结构
包括:
•条件连接
•循环连接
•控制转向连接
进程中的控制连接(内部调用)进程之间的连接
同一机器空间 链询调用方式分 析调用方式
不同机器空间(远程过程调用)
④软件的层次结构
层次结构是分析和解决问题普遍适用的方法
下层仅向相邻的上层提供支持,上层依赖相邻的下层被建造
使用及支持关系不仅限制在相邻的层次之间
1.4软件体系结构设计的基本原则
在大量的软件开发实践中,对于软件结构的设计有被普遍性采用的原则,这些原则和策略多年来一直被广泛地运用着。它们独立于具体的软件开发方法。
基本原则包括:
•抽象
•分而治之
•信息隐蔽
•模块化
•高内聚和低耦合
•关注点分离
•策略和实现分离
•接口和实现分离
人们认识复杂事物的基本方法。抽象的实质是突出表现事物的主要特征和属性,忽略细节部分;并且,运用这些特征和属性,提取具有普遍意义的事物行为。
数据抽象:描述特定数据对象的属性集合
过程抽象:特定操作过程命名的操作序列
控制抽象:隐含内部细节的控制逻辑
将大的问题分解,分别处理分解的局部问题,会降低问题的复杂性和难度。
软件设计中运用的分解包括:
按照事务的过程方式分解,将整体问题分解成为多层,每层完成同一过程的各项处理,并提取规范统一形式的接口,以提供对下层(下一过程)的支持。
在每一层面,将问题分成多项独立的处理部分,它们原则上不要直接的联系,而是通过集中的控制。
处理中的所有信息和操作被限制在局部过程中,尽量减少外部的直接接触与共享,提高独立性,减小相互的耦合性。
将处理过程尽量隐蔽,使外界只了解其简单、统一的可访问形式。以减少外界可能的错误干扰和破坏。
模块:可被独立命名、具有独立作用的软件成分
指软件成份内部各处理单元的关系程度。能做到每个成分都有必然关系,缺一不可的紧密程度是最好的内聚形式。
指软件成份之间的关系特性。软件成份之间应尽量做到没有直接关系,使其保持相对独立、松散耦合的关系会使未来的修改、复用简单,出错带来的影响小。
常见的耦合形式
内容耦合:一个软件成份直接修改另一个软件成份的内容
公共耦合:多个软件成份需要处理同一个外部的公共数据
控制耦合:软件成份的动作依赖于接收的控制信号
标记耦合:软件成份的接口参数具有一个复杂的内部结构
数据耦合:软件成份之间仅通过简单类型的形式参数传递
常见的内聚形式
偶然内聚:将没有直接关系,只是分散在多处的成分合起来
逻辑内聚:将仅是逻辑相关的处理成分合起来
时间内聚:将需在同一时间执行并无直接关系的处理成分合起来
过程内聚:将过程顺序相关的处理成分合起来
通讯内聚:将需要对同一个外部数据操作的处理成分合起来
顺序内聚:将两个具有输入输出顺序关系的软件成份合起来
功能内聚:保证每个成分只完成单一的功能
关注点是软件系统中特别需要考虑的多变部分。例如,软件成分的执行会受到运行环境、设备条件,以及通信设施等的制约和限制,为了适应不同的运行环境和条件,需要进行必要的参数调整和驱动配置。为此进行的这部分设计和开发,即是所谓的关注点。
软件系统中涉及关注点的成分应该与非关注点的成分分为相互独立的部分,这样的设计会使未来的系统容易配置,实现机器无关性。
策略是指软件中用于处理选择控制的决策成分。通过上下文相关的决策分析、信息语义解释分析、参数选择等进行判断,以决定怎样地具体数据加工和功能实现。
实现是指软件系统中有规范步骤及完整执行算法的成分
通常,决策部分是异变的成分,而实现部分相对稳定,并可多次复用。将策略成分和实现成分分别设计成独立的部分,使系统维护的范围减小,以提高系统的维护性和复用性。
接口是软件成分对外规范形式的、可访问的操作集合,提供软件成分的功能及使用方式。一个软件成分可以不只一个接口,每个接口提供不同的一组相关的操作。
实现是软件成分外部不可见的操作执行部分
为了达到软件成分的高复用,为适应多种形式的访问,可采用分设多种接口来实现。这就需要采用接口和实现独立设计的方式,以提高系统的可移植性和复用性。