第4章系统设计 4.1系统结构设让 4.2网络设计 4.3数据库设让 4,4代码设计 4.5输入输出设让 4.6模块设让 4.7系统设计报告 4.8实验三 BACK
第4章 系 统 设 计 4.1 系统结构设计 4.2 网 络 设 计 4.3 数据库设计 4.4 代 码 设 计 4.5 输入输出设计 4.6 模 块 设 计 4.7 系统设计报告 4.8 实 验 三
41系统结构设计 4.1.1系统结构设计的基本原则 1.结构化设计的基本思想 结构化设计的基本思想是将一个系统分为若干个彼此具有 一定独立性,同时又有一定联系的组成部分,这些组成部分称 为模块。对每一个系统都可以按功能由顶向下逐层分解为一个 多层次的具有独立功能的许多模块,一直分解到每一个模块都 能很容易实现为止。 结构化设计方法集中体现了软件工程中的模块化原则, 模块化可以使系统开发的整体工作量变小。在使用模块化方法 时应注意模块化是与模块独立性紧密相连的,如果模块之间联 系过于密切,虽然每个模块工作量减小,但模块之间接口将很 复杂,这将使得接口工作量增大
4.1 系统结构设计 4.1.1 系统结构设计的基本原则 1. 结构化设计的基本思想 结构化设计的基本思想是将一个系统分为若干个彼此具有 一定独立性,同时又有一定联系的组成部分,这些组成部分称 为模块。对每一个系统都可以按功能由顶向下逐层分解为一个 多层次的具有独立功能的许多模块,一直分解到每一个模块都 能很容易实现为止。 结构化设计方法集中体现了软件工程中的模块化原则, 模块化可以使系统开发的整体工作量变小。在使用模块化方法 时应注意模块化是与模块独立性紧密相连的,如果模块之间联 系过于密切,虽然每个模块工作量减小,但模块之间接口将很 复杂,这将使得接口工作量增大
2.模块的耦合性 耦合性表现了模块的外部特征,模块之间的耦合程度越低, 说明模块的独立性越好。常见的耦合方式有下面几种: 1)非直接耦合 非直接耦合是指两个模块能彼此独立工作,没有直接的关 系,仅通过主程序的控制和调用来实现,两者之间不传递任何 信息 2)数据耦合 数据耦合是指两个模块之间通过数据交换实现相互间的联 系。一个模块带参数调用另一个模块,被调用模块执行后返回 个参数给调用它的模块。传入和返回的参数都是单个的数据 项
2. 模块的耦合性 耦合性表现了模块的外部特征,模块之间的耦合程度越低, 说明模块的独立性越好。常见的耦合方式有下面几种: 1) 非直接耦合 非直接耦合是指两个模块能彼此独立工作,没有直接的关 系,仅通过主程序的控制和调用来实现,两者之间不传递任何 信息。 2) 数据耦合 数据耦合是指两个模块之间通过数据交换实现相互间的联 系。一个模块带参数调用另一个模块,被调用模块执行后返回 一个参数给调用它的模块。传入和返回的参数都是单个的数据 项
3)标记耦合 标记耦合是指一个模块调用另一个模块时,不是传送 数据本身,而是传送存放数据的变量名或文件名等数据标 记。这种耦合比数据耦合具有更多的出错机会,复杂程度 高于数据耦合。例如,C语言中通过传递一个变量的地址给 另一个模块就是一种标记耦合的形式,它的复杂程度很显 然高于值传递,出错的可能性更大
3) 标记耦合 标记耦合是指一个模块调用另一个模块时,不是传送 数据本身,而是传送存放数据的变量名或文件名等数据标 记。这种耦合比数据耦合具有更多的出错机会,复杂程度 高于数据耦合。例如,C语言中通过传递一个变量的地址给 另一个模块就是一种标记耦合的形式,它的复杂程度很显 然高于值传递,出错的可能性更大
4)控制耦合 个模块调用另一个模块时传递的不是数据参数,而是一个 控制变量,它用来控制被调用模块的功能,称为控制耦合。通常 被调用的模块含有多种功能,由传递的控制变量决定调用哪一种 功能。被调用模块的逻辑控制走冋,受控于调用模块 控制耦合的耦合程度较髙,在设计时应尽量避免。控制耦合增加 了理解和编程的复杂性,我们看一下图4.1所示的例子。假设模块 A通过传递开关变量f调用模块B(图4.1(a)),模块B返回变量ⅹ 模块B中包含有两种功能(图4.1(b)),则在编制模块A的程序 时首先要理解开关变量f的含义,同时在模块A中还必须设置开关 变量的值。模块A可能还要根据不同的返回值进行不同的处理
4) 控制耦合 一个模块调用另一个模块时传递的不是数据参数,而是一个 控制变量,它用来控制被调用模块的功能,称为控制耦合。通常 被调用的模块含有多种功能,由传递的控制变量决定调用哪一种 功能。被调用模块的逻辑控制走向,受控于调用模块。 控制耦合的耦合程度较高,在设计时应尽量避免。控制耦合增加 了理解和编程的复杂性,我们看一下图4.1所示的例子。假设模块 A通过传递开关变量f调用模块B(图4.1(a)),模块B返回变量x。 模块B中包含有两种功能(图4.1(b)),则在编制模块A的程序 时首先要理解开关变量f的含义,同时在模块A中还必须设置开关 变量的值。模块A可能还要根据不同的返回值进行不同的处理
A 判断 B 功能1 功能2 功能1 功能2 (b) 图41改控制耦合为数据耦合的方法示意图
A B f x (a) (b) 判 断 功 能1 功 能2 (c) A 功 能1 功 能2 图4.1 改控制耦合为数据耦合的方法示意图
在绝大多数情况下,控制耦合是可以避免的,对于图4.1中 的例子,可以采取如下的方法: ①将被调用模块B中的判定上移到模块A中去。 ②将被调用模块B中包含的两种功能分为两个模块。 经过这样处理后,控制耦合改变为数据耦合,图4.1(c)是改 变后的模块调用示意图。 5)外部耦合 外部耦合是指模块与外部环境之间的联系,例如输入输出 模块,只有当需要的外部设备正常工作时,这些模块才能正常 工作
在绝大多数情况下,控制耦合是可以避免的,对于图4.1中 的例子,可以采取如下的方法: ① 将被调用模块B中的判定上移到模块A中去。 ② 将被调用模块B中包含的两种功能分为两个模块。 经过这样处理后,控制耦合改变为数据耦合,图4.1(c)是改 变后的模块调用示意图。 5) 外部耦合 外部耦合是指模块与外部环境之间的联系,例如输入输出 模块,只有当需要的外部设备正常工作时,这些模块才能正常 工作
6)公共耦合 公共耦合是指多个模块共享全局数据区,如C语言中的共 用外部变量、 FORTRAN语言中的 COMMON共用数据区等。公 共耦合的耦合程度较高,属于强耦合,设计时应该避免使用。 7)内容耦合 内容耦合指一个模块直接访问另一个模块的内部信息 (程序代码或内部数据)。这是最不好的耦合形式,它对模 块的独立性破坏最大
6) 公共耦合 公共耦合是指多个模块共享全局数据区,如C语言中的共 用外部变量、FORTRAN语言中的COMMON共用数据区等。公 共耦合的耦合程度较高,属于强耦合,设计时应该避免使用。 7) 内容耦合 内容耦合指一个模块直接访问另一个模块的内部信息 (程序代码或内部数据)。这是最不好的耦合形式,它对模 块的独立性破坏最大
3.模块的内聚性 内聚性是一个模块内软件成分之间联系的强弱程度的 定性度量,是模块内部特征的表现。内聚性越高,表明各 成分之间的联系强度越大。模块的内聚性好,一般与其它 模块的关联程度也相对较弱,模块的独立性也较好
3. 模块的内聚性 内聚性是一个模块内软件成分之间联系的强弱程度的 定性度量,是模块内部特征的表现。内聚性越高,表明各 成分之间的联系强度越大。模块的内聚性好,一般与其它 模块的关联程度也相对较弱,模块的独立性也较好
1)偶然内聚 偶然内聚是指模块中各软件成分之间没有有意义的联系。 有时若干个模块中存在若干相同的语句序列,程序员为了节省 存储空间将它们抽取出来形成一个单独的模块。这些语句只有 与调用它们的模块放在一起时才具有意义,这些语句本身相互 之间并没有有意义的联系,这个新的模块是偶然内聚的。 偶然内聚的可理解性差,难于修改,内聚程度最低,设计 时应该尽量避免使用
1) 偶然内聚 偶然内聚是指模块中各软件成分之间没有有意义的联系。 有时若干个模块中存在若干相同的语句序列,程序员为了节省 存储空间将它们抽取出来形成一个单独的模块。这些语句只有 与调用它们的模块放在一起时才具有意义,这些语句本身相互 之间并没有有意义的联系,这个新的模块是偶然内聚的。 偶然内聚的可理解性差,难于修改,内聚程度最低,设计 时应该尽量避免使用