《软件工程实用教程4软件设计1》由会员分享,可在线阅读,更多相关《软件工程实用教程4软件设计1(91页珍藏版)》请在金锄头文库上搜索。
1、软软 件件 工工 程程第四章第四章 软件设计(软件设计(1 1)任务任务1 1 构建软件体系结构构建软件体系结构软件设计概述软件设计概述体系结构风格体系结构风格结构化设计方法结构化设计方法2 2任务任务1 构建软件体系结构构建软件体系结构在第三章中我们针对图书管理系统进行了功能模在第三章中我们针对图书管理系统进行了功能模型的构建,理清了图书管理系统的业务规则和功型的构建,理清了图书管理系统的业务规则和功能性需求,那么,我们是否已经准备好将功能转能性需求,那么,我们是否已经准备好将功能转换成对应的代码了呢?我们知道,一个完整的应换成对应的代码了呢?我们知道,一个完整的应用程序,如果采用结构化语言
2、进行编写,其主要用程序,如果采用结构化语言进行编写,其主要的组成构件是函数,现在的问题是我们是否可以的组成构件是函数,现在的问题是我们是否可以借助于得到的功能模型为合理设定函数模块提供借助于得到的功能模型为合理设定函数模块提供帮助。帮助。3 31 软件设计概述软件设计概述软件设计的目的软件设计的目的设计是一个建模活动,它使用分析阶段得出的信设计是一个建模活动,它使用分析阶段得出的信息(即需求模型)并把这些信息转换为叫做解决息(即需求模型)并把这些信息转换为叫做解决方案的模型。所以设计阶段的目标是定义、组织方案的模型。所以设计阶段的目标是定义、组织和构造将作为结构蓝图的最终解决方案系统的各和构造
3、将作为结构蓝图的最终解决方案系统的各个组成部分。个组成部分。4 4抽象抽象逐步求精逐步求精模块化模块化信息隐藏信息隐藏控制层次控制层次软件的体系结构软件的体系结构软件设计的原理软件设计的原理抽象抽象“抽象抽象”的心理学观念使人能够集中于某个一的心理学观念使人能够集中于某个一般性级别上的问题,而不去考虑无关的底层般性级别上的问题,而不去考虑无关的底层细节,这种解决问题的方式也应用于软件领细节,这种解决问题的方式也应用于软件领域。域。抽象的思维方式应用软件开发领域抽象的思维方式应用软件开发领域 ,软件过,软件过程中的每一个步骤都是软件解决方案抽象级程中的每一个步骤都是软件解决方案抽象级别上的求精。
4、别上的求精。抽象的类型抽象的类型过程抽象过程抽象是对特定和有限的功能命名的序列。例如:查询子系统,实是对特定和有限的功能命名的序列。例如:查询子系统,实现查询功能;进一步抽象层次降低,查询子系统分为:按书现查询功能;进一步抽象层次降低,查询子系统分为:按书名查询,按作者查询,按出版社查询等;按书名查询过程步名查询,按作者查询,按出版社查询等;按书名查询过程步骤,输入关键字,进行查询,显示结果。骤,输入关键字,进行查询,显示结果。数据抽象数据抽象是数据命名的集合。例如:查询是数据命名的集合。例如:查询“书书”,进一步详细定义其,进一步详细定义其属性:书名、作者、出版社、出版日期、属性:书名、作者
5、、出版社、出版日期、ISBNISBN等;书名,进等;书名,进一步定义为长度一步定义为长度5050个字符的字符串。个字符的字符串。控制抽象控制抽象是程序控制机制内部细节的设计。例如:在操作系统中用以是程序控制机制内部细节的设计。例如:在操作系统中用以协调某些活动的同步信号。协调某些活动的同步信号。逐步求精逐步求精逐步求精是由逐步求精是由Niklaus WirthNiklaus Wirth最初提出的一种自最初提出的一种自顶向下设计策略,系统是通过过程细节的连顶向下设计策略,系统是通过过程细节的连续的精化层次开发的,层次结构通过逐步地续的精化层次开发的,层次结构通过逐步地分解功能的宏观声明直至形成程
6、序设计语言分解功能的宏观声明直至形成程序设计语言的语句而开发。的语句而开发。逐步求精和抽象是互补的概念。随着抽象层逐步求精和抽象是互补的概念。随着抽象层次的降低,逐步求精越来越精化,并不断揭次的降低,逐步求精越来越精化,并不断揭示底层的一些细节。示底层的一些细节。 模块化模块化模块化模块化软件被划分成独立命名和可独立访问的被称作模软件被划分成独立命名和可独立访问的被称作模块的构成成分,它们集合到一起满足问题的需求。块的构成成分,它们集合到一起满足问题的需求。模块划分的目的模块划分的目的 进行功能分解,把复杂的大的功能划分成简单进行功能分解,把复杂的大的功能划分成简单的小的子功能,尽量降低每个模
7、块的成本。的小的子功能,尽量降低每个模块的成本。尽量使每个模块间的接口不能太多,太多会使尽量使每个模块间的接口不能太多,太多会使接口成本增加。兼顾二者可取得最佳的划分状态,接口成本增加。兼顾二者可取得最佳的划分状态,确保软件总成本最低。确保软件总成本最低。最小成本区最小成本区M2M1n1n2模块数模块数成本成本成本成本/模块模块接口成本接口成本软件总成本软件总成本模块化和软件成本之间的关系模块化和软件成本之间的关系信息隐藏信息隐藏信息隐藏的原则提出信息隐藏的原则提出“特征在于每个模块都特征在于每个模块都对其他模块隐藏的设计决策对其他模块隐藏的设计决策”,也就是说模,也就是说模块应该设计成其中包
8、含的信息(过程和数据)块应该设计成其中包含的信息(过程和数据)对不需要这些信息的其他模块式不可访问的。对不需要这些信息的其他模块式不可访问的。信息隐藏为后期的软件测试和维护提供了极信息隐藏为后期的软件测试和维护提供了极大的方便。一旦在进行测试时发现缺陷,那大的方便。一旦在进行测试时发现缺陷,那么对模块的变更不会影响或者至少很少影响么对模块的变更不会影响或者至少很少影响其他模块,不会将影响扩大并传播。其他模块,不会将影响扩大并传播。 控制层次控制层次 控制层次控制层次也称为也称为“程序结构程序结构”,它代表了程序构件(模,它代表了程序构件(模块)的组织并暗示控制的层次结构。块)的组织并暗示控制的
9、层次结构。一般用四个特征来描述:深度、宽度、扇入和一般用四个特征来描述:深度、宽度、扇入和扇出。扇出。深度深度定义为控制层次的层数,或者说是控制级别的数量。定义为控制层次的层数,或者说是控制级别的数量。宽度宽度定义为控制层次的跨度。定义为控制层次的跨度。扇入扇入指明有多少个模块直接控制一个给定的模块。指明有多少个模块直接控制一个给定的模块。扇出扇出指明被一个模块直接控制的其他模块的数量。指明被一个模块直接控制的其他模块的数量。控制层次的优化控制层次的优化系统的控制结构中在某一层的模块中的判定或者条系统的控制结构中在某一层的模块中的判定或者条件在系统中产生的结果,影响到其他层的某个处理件在系统中
10、产生的结果,影响到其他层的某个处理或数据,这样该处理就是条件依赖于那个判定。因或数据,这样该处理就是条件依赖于那个判定。因此在控制结构中产生另外两个概念:作用范围和控此在控制结构中产生另外两个概念:作用范围和控制范围。制范围。作用范围作用范围一个模块的作用范围是指条件依赖于这个模块的全部模块。一个模块的作用范围是指条件依赖于这个模块的全部模块。即使一个模块全部处理中只有一小部分为这个判定所影响,即使一个模块全部处理中只有一小部分为这个判定所影响,整个模块也认作在作用范围中。整个模块也认作在作用范围中。控制范围控制范围一个模块的控制范围是指模块本身和它的全部子模块。一个模块的控制范围是指模块本身
11、和它的全部子模块。作用范围和控制范围相关的设计原则作用范围和控制范围相关的设计原则对于任何判定,作用范围应该是这个判定所在模块的控制范对于任何判定,作用范围应该是这个判定所在模块的控制范围的一个子集。通常我们采用把判定节点在结构中上移来达围的一个子集。通常我们采用把判定节点在结构中上移来达到这个原则。到这个原则。例子 模块E的控制范围是I、H、J,模块J的一个判定传递给E,然后再传递给I和H,此时模块J的作用范围是模块E、I、H。内聚内聚耦合耦合模块独立性原则模块独立性原则独立性原则独立性原则 含义含义模块独立性模块独立性, , 是指软件系统中每个模块只涉及软件要求是指软件系统中每个模块只涉及
12、软件要求的具体的子功能的具体的子功能, , 而和软件系统中其它的模块的接口是而和软件系统中其它的模块的接口是简单的。简单的。衡量独立性的标准衡量独立性的标准内聚内聚模块功能强度模块功能强度( (一个一个模块内部模块内部各个元素彼此结合的紧密程度各个元素彼此结合的紧密程度) )的度的度量。量。耦合耦合模块之间模块之间的互相连接的紧密程度的度量。的互相连接的紧密程度的度量。高内聚低耦合高内聚低耦合的模块具有较强的模块独立性。的模块具有较强的模块独立性。内聚内聚偶然内聚偶然内聚设计者随意决定将无关系的几个功能组合在一个模块中,设计者随意决定将无关系的几个功能组合在一个模块中,该模块的内聚程度就是偶然
13、内聚。该模块的内聚程度就是偶然内聚。例子例子为了节省空间,将多个模块中重复出现的语句提取出来,组成一为了节省空间,将多个模块中重复出现的语句提取出来,组成一个新的模块个新的模块逻辑内聚逻辑内聚把逻辑上相似的功能结合到一个模块中。把逻辑上相似的功能结合到一个模块中。放到一个模块中的原因是:使用统一动词但针对不同的对象,有相同放到一个模块中的原因是:使用统一动词但针对不同的对象,有相同的代码段;起始于某多路开关,以后转向不同的代码段,但各代码段的代码段;起始于某多路开关,以后转向不同的代码段,但各代码段间关系很少。这种聚和现象带来一些设计问题:增加了开关量;不易间关系很少。这种聚和现象带来一些设计
14、问题:增加了开关量;不易修改;不易理解;效率低。修改;不易理解;效率低。时间内聚时间内聚 在某一时间同时执行的任务放在同一模块中。如:在某一时间同时执行的任务放在同一模块中。如:初始化模块,集中了初始化功能的模块。初始化模块,集中了初始化功能的模块。过程内聚过程内聚 模块中各个功能相关,按特定次序执行。这种情况模块中各个功能相关,按特定次序执行。这种情况往往发生在流程图中相邻的处理功能。往往发生在流程图中相邻的处理功能。通信内聚通信内聚模块中各个功能需要用到同样的数据,而将其放于一个模块中各个功能需要用到同样的数据,而将其放于一个模块中。如:模块中的各功能都需要利用某个符号表模块中。如:模块中
15、的各功能都需要利用某个符号表(或文件)进行操作。(或文件)进行操作。信息内聚信息内聚模块中各功能利用相同的输入或产生相同的输出。由于它模块中各功能利用相同的输入或产生相同的输出。由于它可能包含几个功能或只是某个功能的一部分,所以内聚性可能包含几个功能或只是某个功能的一部分,所以内聚性不是最高的。不是最高的。功能内聚功能内聚 模块中的各部分是为了完成一个确定的功能模块中的各部分是为了完成一个确定的功能存在于一个模块中的。存在于一个模块中的。偶然内聚逻辑内聚时间内聚过程内聚通信内聚信息内聚功能内聚低高弱强模块内聚性模块独立性耦合耦合内容耦合内容耦合一个模块访问另一个模块边界中的数据或控制,一个模块
16、访问另一个模块边界中的数据或控制,这种耦合是内容耦合也是最强的耦合。这种耦合是内容耦合也是最强的耦合。如果发生下列情形,两个模块之间就发生了内容如果发生下列情形,两个模块之间就发生了内容耦合。耦合。 (1) (1) 一个模块直接访问另一个模块的内部数据一个模块直接访问另一个模块的内部数据 (2) (2) 一个模块不通过正常入口转到另一模块内部一个模块不通过正常入口转到另一模块内部 (3) (3) 两个模块有一部分程序代码重迭两个模块有一部分程序代码重迭( (只可能出现只可能出现在汇编语言中在汇编语言中) )公共耦合公共耦合多个模块都访问一块全局数据区中的数据项(一个磁多个模块都访问一块全局数据
17、区中的数据项(一个磁盘文件、一个全局可访问的内存区),这种耦合程度盘文件、一个全局可访问的内存区),这种耦合程度就是公共耦合。就是公共耦合。 公共耦合的复杂程度随耦合模块的个数增加而显著增公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。两种情况。松散公共耦合和紧密公共耦合。外部耦合外部耦合当模块连接到软件外部环境上时会发生的偶合关当模块连接到软件外部环境上时会发生的偶合关系,具有相对较高的偶合度。系,具有相对较高的偶合度。控制耦合控制耦合模块与模块之间传递的参模块与模
18、块之间传递的参数是控制决策作用的。数是控制决策作用的。中级别的耦合度。中级别的耦合度。标记耦合标记耦合当模块与模块之间传递的参数是数据结构的一部分当模块与模块之间传递的参数是数据结构的一部分时,这种耦合是标记耦合。是数据耦合的变体。时,这种耦合是标记耦合。是数据耦合的变体。数据耦合数据耦合模块与模块之间需要通过常规的参数表访问,数据模块与模块之间需要通过常规的参数表访问,数据通过该列表传递,传递的数据是简单类型的,这种通过该列表传递,传递的数据是简单类型的,这种耦合称为数据耦合。耦合称为数据耦合。非直接耦合非直接耦合两个模块式不同模块的从属模块,相互之间无关因而两个模块式不同模块的从属模块,相
19、互之间无关因而没有直接耦合发生,称为非直接耦合。没有直接耦合发生,称为非直接耦合。内容耦合公共耦合外部耦合控制耦合标记耦合数据耦合非直接耦合高低弱强模块耦合性模块独立性如何降低模块间耦合度?如何降低模块间耦合度?(1) (1) 如模块必须存在耦合,选择适当的耦合类如模块必须存在耦合,选择适当的耦合类型型原则:原则:尽量使用数据耦合尽量使用数据耦合少用控制耦合少用控制耦合限制公共耦合的范围限制公共耦合的范围坚决避免使用内容耦合坚决避免使用内容耦合(2) (2) 降低模块间接口的复杂性降低模块间接口的复杂性内聚与耦合密切相关,同其它模块强耦合的模内聚与耦合密切相关,同其它模块强耦合的模块意味着弱内
20、聚,强内聚模块意味着与其它块意味着弱内聚,强内聚模块意味着与其它模块间松散耦合。模块间松散耦合。设计目标:设计目标:力争力争高内聚高内聚、低、低耦合。耦合。软件设计的过程软件设计的过程 软件设计是一个把软件需求变换成软件表示软件设计是一个把软件需求变换成软件表示的过程。最初这种表示只是描绘出软件的总的框的过程。最初这种表示只是描绘出软件的总的框架,然后进一步细化,在此框架中填入细节,把架,然后进一步细化,在此框架中填入细节,把它加工成在程序细节上非常接近于源程序的软件它加工成在程序细节上非常接近于源程序的软件表示。表示。从工程管理的角度来看的设计过程从工程管理的角度来看的设计过程概要设计概要设
21、计将软件需求转化为数据结构和软件的系统结构。将软件需求转化为数据结构和软件的系统结构。详细设计(过程设计)详细设计(过程设计)通过对结构表示进行细化,得到软件的详细的数据结构通过对结构表示进行细化,得到软件的详细的数据结构和算法。和算法。从技术角度来看的设计过程从分析模型到设计模型之间的对应关系数据设计数据设计将分析时创建的数据模型变换成实现软件所需的数据将分析时创建的数据模型变换成实现软件所需的数据结构。在实体关系图中定义的数据对象和关系以及数结构。在实体关系图中定义的数据对象和关系以及数据字典中描述的详细数据内容提供了数据设计活动的据字典中描述的详细数据内容提供了数据设计活动的基础。基础。
22、详细的数据结构设计将在过程设计中进行。详细的数据结构设计将在过程设计中进行。体系结构设计体系结构设计定义了软件的主要结构性元素,可以用于达成针对系定义了软件的主要结构性元素,可以用于达成针对系统而定义的需求的统而定义的需求的“设计模式设计模式”以及影响体系结构设以及影响体系结构设计的约束之间的关系。计的约束之间的关系。体系结构设计的表示是从分析阶段的系统模型中导出。体系结构设计的表示是从分析阶段的系统模型中导出。接口设计接口设计描述了软件内部、软件和需要协作的系统之间以及描述了软件内部、软件和需要协作的系统之间以及软件和人之间如何进行交互。软件和人之间如何进行交互。数据和控制流图提供了接口设计
23、所需要的信息。数据和控制流图提供了接口设计所需要的信息。构件级设计构件级设计也称为过程设计,将软件体系结构的结构性元素变也称为过程设计,将软件体系结构的结构性元素变换成为对软件构件的过程性描述,也就是模块的数换成为对软件构件的过程性描述,也就是模块的数据结构与算法的设计。据结构与算法的设计。软件设计不同观察角度之间的关系软件设计不同观察角度之间的关系设计阶段的任务设计阶段的任务概要设计的任务概要设计的任务1. 1.制定规范制定规范首先应为软件开发组制定在设计时应该共同遵守的标准,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作以便协调组内各成员的工作根据目标确定最合适
24、的设计方法根据目标确定最合适的设计方法规定设计文档的编制标准规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,规定编码的信息形式,与硬件,操作系统的接口规约,命名规则命名规则2. 2. 软件系统结构的总体设计:基于功能层次结构软件系统结构的总体设计:基于功能层次结构建立系统建立系统 采用某种设计方法,将系统按功能划分成模块的层次结采用某种设计方法,将系统按功能划分成模块的层次结构构 确定每个模块的功能确定每个模块的功能 建立与已确定的软件需求的对应关系建立与已确定的软件需求的对应关系 确定模块间的调用关系确定模块间的调用关系 确定模块间的接口确定模块间的接口 评估模块划分的
25、质量评估模块划分的质量3. 3. 处理方式设计处理方式设计确定为实现系统的功能需求所必需的算法,评估算法的确定为实现系统的功能需求所必需的算法,评估算法的性能性能确定为满足系统的性能需求所必需的算法和模块间的控确定为满足系统的性能需求所必需的算法和模块间的控制方式制方式 周转时间周转时间 响应时间响应时间 吞吐量吞吐量 精度精度 确定外部信号的接收发送形式确定外部信号的接收发送形式4. 4. 数据设计数据设计确定软件涉及的文件系统的结构以及数据库的模式、子确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计。模式,进行数据完整性和安全性的设计。确定输入,输出文件的
26、详细的数据结构。确定输入,输出文件的详细的数据结构。结合算法设计,确定算法所必需的逻辑数据结构及其操结合算法设计,确定算法所必需的逻辑数据结构及其操作。作。确定对逻辑数据结构所必需的那些操作的程序模块确定对逻辑数据结构所必需的那些操作的程序模块( (软件软件包包) )。限制和确定各个数据设计决策的影响范围。限制和确定各个数据设计决策的影响范围。若需要与操作系统或调度程序接口所必须的控制表等数若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则。据时,确定其详细的数据结构和使用规则。5. 5.可靠性设计可靠性设计可靠性设计也叫做质量设计。可靠性设计也叫做质量设计。
27、在运行过程中,为了适应环境的变化和用户新的要求,在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。软件易于修改和易于维护。6. 6.编写概要设计阶段的文档编写概要设计阶段的文档概要设计阶段完成时应编写以下文档概要设计阶段完成时应编写以下文档 概要设计说明书概要设计说明书 数据库设计说明书数据库设计说明书 用户使用手册用户使用手册 制定初步的集成测试计划制定初步的集成测试计划7
28、. 7.概要设计评审概要设计评审可追溯性:可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求一项需求接口:接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内低耦合的要求。模块作用范围是否在其控制范围之内风险:风险:确认该设计在现有技术条件下和预算范围内是否能按时实现确认该设计在现有技术条件下和预算范围内是否能按时实现实用性:确认该设计对于需求的解决方案是否
29、实用实用性:确认该设计对于需求的解决方案是否实用技术清晰度:技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达确认该设计是否以一种易于翻译成代码的形式表达可维护性:可维护性:确认该设计是否考虑了方便未来的维护确认该设计是否考虑了方便未来的维护质量:质量:确认该设计是否表现出良好的质量特征确认该设计是否表现出良好的质量特征各种选择方案:各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么看是否考虑过其它方案,比较各种选择方案的标准是什么限制:限制:评估对该软件的限制是否现实,是否与需求一致评估对该软件的限制是否现实,是否与需求一致其它具体问题:其它具体问题:对于文档、可测试性、
30、设计过程等进行评估对于文档、可测试性、设计过程等进行评估详细设计的活动详细设计的活动 确定软件各个组成部分内的算法以及各部分的内确定软件各个组成部分内的算法以及各部分的内部数据组织部数据组织 选定某种过程的表达形式来描述各种算法选定某种过程的表达形式来描述各种算法 进行详细设计的评审进行详细设计的评审2 体系结构风格体系结构风格软件体系结构的重要性软件体系结构的重要性体系结构是系统的高层表示,是不同的系统相关人员讨体系结构是系统的高层表示,是不同的系统相关人员讨论的焦点。论的焦点。在系统开发的早期阶段给出系统的体系结构,实际上就在系统开发的早期阶段给出系统的体系结构,实际上就是对系统分析的过程
31、。对体系结构的设计对系统能否满是对系统分析的过程。对体系结构的设计对系统能否满足关键性需求如系统的性能、可靠性和可维护性等的评足关键性需求如系统的性能、可靠性和可维护性等的评估具有极深的影响。估具有极深的影响。系统体系结构的内容是关于系统的组织和组件间的互操系统体系结构的内容是关于系统的组织和组件间的互操作,其形式是一个紧凑的易于管理的描述单元。体系结作,其形式是一个紧凑的易于管理的描述单元。体系结构能在具有相似需求的系统之间互用,由此来支持大规构能在具有相似需求的系统之间互用,由此来支持大规模的软件复用。产品体系结构的开发就是希望有一个通模的软件复用。产品体系结构的开发就是希望有一个通用的产
32、品体系结构供一系列相关系统的使用。用的产品体系结构供一系列相关系统的使用。54 54参考风格的种类参考风格的种类C2C2风格风格管道管道/ /过滤器风格过滤器风格数据抽象和面向对象风格数据抽象和面向对象风格基于事件的隐式调用风格基于事件的隐式调用风格层次系统风格层次系统风格客户机客户机 服务器风格服务器风格(1)C2风格风格C2C2是一种基于分层结构,事件驱动的软件构架风格。是一种基于分层结构,事件驱动的软件构架风格。基本元素是构件基本元素是构件(Component)(Component)和连接器和连接器( ( Connector)Connector)组成规则组成规则系统中的构件和连接件都有一
33、个顶部和一个底部系统中的构件和连接件都有一个顶部和一个底部; ;构件的构件的顶端接口用于发出请求、接收结果,底端接口则用于接顶端接口用于发出请求、接收结果,底端接口则用于接收请求发出结果;收请求发出结果;构件的顶部应连接到某连接件的底部,构件的底部则应构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的是不允许的; ;一个连接件可以和任意数目的其它构件和连接件连接一个连接件可以和任意数目的其它构件和连接件连接; ;当两个连接件进行直接连接时,必须由其中一个的底部当两个连接件进行直接连接时,必须
34、由其中一个的底部到另一个的顶部到另一个的顶部特点特点基底独立性基底独立性系统中的构件可实现应用需求,并能将任意复杂度的功能封系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起装在一起; ;消息通讯机制消息通讯机制所有构件之间的通讯是通过以连接件为中介的异步消息交换所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的机制来实现的; ;实现与构架分离实现与构架分离构件相对独立,构件之间依赖性较少。系统中不存在某些构构件相对独立,构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制线程件将在同一地址空间内执行,或某些构件共享特定控制线程之类的相
35、关性假设。之类的相关性假设。 该体系结构被用于当输入数据被通过一系列计算该体系结构被用于当输入数据被通过一系列计算或操纵构件变换为输出数据情形。或操纵构件变换为输出数据情形。(2)数据流体系结构(管道和过滤器模型)数据流体系结构(管道和过滤器模型)(3)数据抽象和面向对象风格)数据抽象和面向对象风格描述描述这种风格建立在数据抽象和面向对象的基础上,这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。象数据类型或对象中。实例实例-CORBA-CORBA(4)基于事件的隐式调用风格)基于事件的隐式调用风格
36、描述描述其思想是构件不直接调用一个过程,而是触发或广播一个或多其思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。程,这样,一个事件的触发就导致了另一模块中的过程的调用。例子例子最早出现在守护进程、约束满足性检查和包交换网络等方面的最早出现在守护进程、约束满足性检查和包交换网络等方面的应用程序中。应用程序中。(5)分层系
37、统模型(抽象机模型)分层系统模型(抽象机模型)描述描述也称为按服务进行划分。也称为按服务进行划分。层是对模型中不同抽象层次上的逻辑结构进行分组的一种层是对模型中不同抽象层次上的逻辑结构进行分组的一种特定方式。特定方式。系统按照层次结构组织,每一层向它的上一层提供服务,系统按照层次结构组织,每一层向它的上一层提供服务,同时又是它的下层的客户。同时又是它的下层的客户。系统内的交互限定在邻接层之间。系统内的交互限定在邻接层之间。除了邻接层,一个内部层次对于其他外部层次是隐藏的。除了邻接层,一个内部层次对于其他外部层次是隐藏的。邻接层的关系并不严格。邻接层的关系并不严格。例如例如网络协议的参考模型网络
38、协议的参考模型OSIOSI使用层有助于解决的问题使用层有助于解决的问题源码的变更波及整个系统;源码的变更波及整个系统;应用逻辑与用户界面交织在一起,无法复用于其他应用逻辑与用户界面交织在一起,无法复用于其他不同界面或分布到其他处理结点之上;不同界面或分布到其他处理结点之上;潜在的一般性技术服务或业务逻辑与更特定于应用潜在的一般性技术服务或业务逻辑与更特定于应用的逻辑交织在一起,无法被复用、分布到其他结点的逻辑交织在一起,无法被复用、分布到其他结点或方便地使用不同实现进行替换;或方便地使用不同实现进行替换;不同关注领域之间高度耦合,难以为不同开发者清不同关注领域之间高度耦合,难以为不同开发者清晰
39、地界定和分配任务。晰地界定和分配任务。信息系统逻辑架构信息系统逻辑架构中常见的层中常见的层 功能划分与层次划分之间的关系功能划分与层次划分之间的关系 层次划分是对构架的横向分解,功能划分是对构架层次划分是对构架的横向分解,功能划分是对构架的纵向分解。它们之间的关系,如图所示。的纵向分解。它们之间的关系,如图所示。 描述描述描述描述 典型的分布式系统模型典型的分布式系统模型典型的分布式系统模型典型的分布式系统模型 合作的双方都会利用各自的计算能力负责一定的计算工作,从合作的双方都会利用各自的计算能力负责一定的计算工作,从合作的双方都会利用各自的计算能力负责一定的计算工作,从合作的双方都会利用各自
40、的计算能力负责一定的计算工作,从而提高整个系统的能力和效率。而提高整个系统的能力和效率。而提高整个系统的能力和效率。而提高整个系统的能力和效率。组成部分组成部分组成部分组成部分 一组功能各自独立的服务器一组功能各自独立的服务器一组功能各自独立的服务器一组功能各自独立的服务器为其他子系统提供服务。如打印服务器为其他子系统提供服务。如打印服务器为其他子系统提供服务。如打印服务器为其他子系统提供服务。如打印服务器, , , , 文件服务器文件服务器文件服务器文件服务器, , , , 编译服务器编译服务器编译服务器编译服务器等。等。等。等。 一组客户机一组客户机一组客户机一组客户机并发访问多个服务器提
41、供的服务。并发访问多个服务器提供的服务。并发访问多个服务器提供的服务。并发访问多个服务器提供的服务。或存在一些客户机可并发执行的客户机程序。或存在一些客户机可并发执行的客户机程序。或存在一些客户机可并发执行的客户机程序。或存在一些客户机可并发执行的客户机程序。 一个网络一个网络一个网络一个网络使得客户机能够访问服务器。使得客户机能够访问服务器。使得客户机能够访问服务器。使得客户机能够访问服务器。(6)客户机)客户机 服务器模型(服务器模型(C/S)CatalogueCatalogueserverserverVodioVodioserverserverPicturePictureserverse
42、rverHypertextHypertextserverserverCatalogueCatalogueFilm clipFilm clipfilesfilesDigitizedDigitizedphotographsphotographsHypertextHypertextwebwebWide - bandwidth networkWide - bandwidth network Client 1Client 1Client 2Client 2Client 3Client 3Client 4Client 4Film & Picture library system Film & Pictur
43、e library system 的体系结构的体系结构3 结构化设计方法结构化设计方法结构化设计结构化设计主要是在主要是在2020世纪世纪7070年代由年代由ConstantineConstantine和和YourdonYourdon等等总结了一些优秀的程序设计实践而发展起来的。总结了一些优秀的程序设计实践而发展起来的。其最大的好处就是极大的增加了代码的复用能力。其最大的好处就是极大的增加了代码的复用能力。它的主要表示方法是一种分层次的结构图。它的主要表示方法是一种分层次的结构图。主要思想主要思想认为一个程序、一组程序或者一组系统无非是有认为一个程序、一组程序或者一组系统无非是有一组功能操作来
44、构成的,并进而吸取了结构化分一组功能操作来构成的,并进而吸取了结构化分析的析的“黑盒子黑盒子”的概念。的概念。结构化设计的目标结构化设计的目标将软件设计为结构互相独立、功能单一的模块,将软件设计为结构互相独立、功能单一的模块,建立系统的模块结构图。建立系统的模块结构图。69 69(1)软件结构图概述)软件结构图概述软件结构图软件结构图传入模块传入模块 从下属模块取得数据,经过某些处理,再从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。据流。传出模块传出模块 从上级模块获得数据,进行某些处理,再从上级模块获
45、得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。据流。变换模块变换模块 它从上级模块取得数据,进行特定的处理,它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。叫做变换数据流。协调模块协调模块 对所有下属模块进行协调和管理的模块。对所有下属模块进行协调和管理的模块。70 70(2)数据流类型的划分)数据流类型的划分事务流事务流数据流经常可以被描述成有一个称为数据流经常可以被描述成有一个称为事务事务的单个数据项,的单个数
46、据项,它可以沿多条路径之一触发其他数据流。它可以沿多条路径之一触发其他数据流。变换流变换流如果信息沿输入通路进入系统,同时由外部形式如果信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,变换成内部形式,进入系统的信息通过变换中心,精加工处理后,再沿输出通路变换成外部形式离精加工处理后,再沿输出通路变换成外部形式离开软件系统,则具有上述特征的数据流称为变换开软件系统,则具有上述特征的数据流称为变换流。流。73 73(3)事务分析)事务分析事务分析具体步骤事务分析具体步骤识别事务源识别事务源利用数据流图和数据词典,从问题定义和需求分析的结利用数据流图和数据词典,从问
47、题定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来自物理果中,找出各种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员还必须区别系统的输入、中输入装置。有时,设计人员还必须区别系统的输入、中心加工和输出中产生的事务。心加工和输出中产生的事务。规定适当的事务型结构规定适当的事务型结构在确定了该数据流图具有事务型特征之后,根据模块划在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。分理论,建立适当的事务型结构。事务分析具体步骤(续)事务分析具体步骤(续)识别各种事务和它们定义的操作识别各种事务和它们定义的操作从问题定义和需求分析中找出的事务及其操作
48、所必需的从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细地定义它全部信息,对于系统内部产生的事务,必须仔细地定义它们的操作。们的操作。注意利用公用模块注意利用公用模块在事务分析的过程中,如果不同事务的一些中间模块可在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。把这些低层模块构造成公用模块。事务分析具体步骤(续)事务分析具体步骤(续)对每一事务,或对联系密切的一组事务,建立一对每一事务,或对联系密切的一组事务,建立一个事务处
49、理模块;如果发现在系统中有类似的事个事务处理模块;如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。务,可以把它们组成一个事务处理模块。对事务处理模块规定它们全部的下层操作模块对事务处理模块规定它们全部的下层操作模块对操作模块规定它们的全部细节模块对操作模块规定它们的全部细节模块事务型软件结构图事务型软件结构图事务型系统结构事务型系统结构它接受一项事务,根据事务处理的特点和性质,它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。选择分派一个适当的处理单元,然后给出结果。在事务型系统结构图中,事务中心模块按所接受在事务型系统结构图中,事务中心模块按所
50、接受的事务的类型,选择某一事务处理模块执行。各的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干用若干个操作模块,而操作模块又可能调用若干个细节模块。个细节模块。例子例子调整后的软件结构图调整后的软件结构图(4)变换分析)变换分析变换分析步骤变换分析步骤重画数据流图;重画数据流图;区分有效区分有效( (逻辑逻辑) )输入、有效输入、有效( (逻辑逻辑) )输出和中心变换输出和中心变换部分;部分;进行一级分解,设计上层模块;进行一级分解,设计上层模块;进行二级分解,设计输入、输出
51、和中心变换部分进行二级分解,设计输入、输出和中心变换部分的中、下层模块。的中、下层模块。变换型软件结构图变换型软件结构图变换型软件结构变换型软件结构变换型数据处理问题的工作过程大致分为三步,即取得数据,变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据;变换数据和给出数据;相应于取得数据、变换数据、给出数据,变换型系统结构;相应于取得数据、变换数据、给出数据,变换型系统结构;图由输入、中心变换和输出等三部分组成。图由输入、中心变换和输出等三部分组成。例子例子1格式格式检查检查3产生产生收据收据2计算计算汇费汇费4记账记账汇款单汇款单合格的合格的汇款单汇款单处理后的处理后的
52、汇款单汇款单收据收据明细账明细账变换中心变换中心输出输出输入输入业务业务数据数据练习练习练习练习汇款处理系统汇款处理系统取得合格取得合格汇款单汇款单计算计算汇费汇费记账记账输出处理后输出处理后的汇款单的汇款单输入汇款单输入汇款单格式检查格式检查产生收据产生收据打印收据打印收据合格的合格的汇款单汇款单处理后的处理后的汇款单汇款单合格的合格的汇款单汇款单业务数据业务数据处理后的处理后的汇款单汇款单汇款单汇款单合格的合格的汇款单汇款单汇款单汇款单处理后的处理后的汇款单汇款单收据收据收据收据业务数据业务数据进行变换分析时需注意的内容进行变换分析时需注意的内容在选择模块设计的次序时,必须对一个模块的全部
53、直在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。下层模块的设计。在设计下层模块时,应考虑模块的耦合和内聚问题,在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。以提高初始结构图的质量。使用使用“黑箱黑箱”技术技术在设计当前模块时,先把这个模块的所有下层模块定义成在设计当前模块时,先把这个模块的所有下层模块定义成“黑黑箱箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。,在设计中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的在这一步定义好的“黑箱黑箱”,在
54、下一步就可以对它们进行设计,在下一步就可以对它们进行设计和加工。这样,又会导致更多的和加工。这样,又会导致更多的“黑箱黑箱”。最后,全部。最后,全部“黑箱黑箱”的内容和结构应完全被确定。的内容和结构应完全被确定。在模块划分时,一个模块的直接下属模块一般在在模块划分时,一个模块的直接下属模块一般在5 5个左右。如果直接下属模块超过个左右。如果直接下属模块超过1010个,可设中间个,可设中间层次。层次。如果出现了以下情况,就停止模块的功能分解:如果出现了以下情况,就停止模块的功能分解:当模块不能再细分为明显的子任务时;当模块不能再细分为明显的子任务时;当分解成用户提供的模块或程序库的子程序时;当分解成用户提供的模块或程序库的子程序时;当模块的界面是输入输出设备传送的信息时;当模块的界面是输入输出设备传送的信息时;当模块不宜再分解得过小时。当模块不宜再分解得过小时。变换分析是软件系统结构设计的主要方法。变换分析是软件系统结构设计的主要方法。优化设计基本原则:优化设计基本原则:合理控制系统的深度与宽度合理控制系统的深度与宽度合理控制模块的扇出数(扇出数合理控制模块的扇出数(扇出数5-75-7) 模块的大小要适当模块的大小要适当消除重复的功能消除重复的功能 作用范围要在控制范围之内作用范围要在控制范围之内 设计单入口单出口模块设计单入口单出口模块练习练习