总体设计
总体设计过程
层次——抽象,模块——求精
模块化定理(龙军)
耦合
数据耦合
两个模块之间只通过参数进行数据传递,是最低程度的耦合,因为模块之间一定会相互调用,除非全都用静态变量。
控制耦合
两个模块之间交换的数据包含控制信息,一般有因果关系,一个的控制信息决定了另一个的走向
公共耦合
通过公共区进行数据交换,(可以参考后台开发的不可重入函数)包括静态数据,共享内存通信区(管道,共享内存),任何介质上的物理设备和文件。
公共耦合会给调试带来很大困难。
内容耦合
直接访问另一个模块的数据,除非另一个模块修改的时候会发送通知给调用模块。
一个模块不通过调用入口进入另一个模块。
一个模块有多个入口。
代码重叠(汇编)
结论
内聚
模块内部紧密程度
高内聚
功能内聚:10
某块内所有元素完成且仅完成一个功能。
顺序内聚:9
模块内所有元素和一个功能密切相关,而且只能顺序执行,例如,求二次方程的根。
中内聚
通信内聚:7
模块内所有元素使用同一个输入获得数据,或输出到同一个输出文件中,例如,计算信息熵,append到同一个矩阵中。
过程内聚:5
模块内所有元素和一个功能密切相关,且必须按一定顺序执行。
低内聚
时间内聚:3
模块包含的任务必须在同一时间段内执行,例如系统初始化工作,银行取钱工作。
逻辑内聚:1
一个模块内的任务在逻辑上属于同一类,例如一个模块用于各种输出。
偶然内聚:0
模块内任务很松散。
顺序内聚和过程内聚
顺序内聚:
过程内聚:
启发式准则
改进软件结构和软件规模,提高软件模块间独立性。
用基本数据结构
6.设计单入口,单出口模块
7.模块功能可预测
图形工具
层次图,HIPO图
hyper+I+P+O
结构图
后序遍历结构树,得到最优解
面向数据流的设计方法
默认都是变换流,如果有明显的事务中心,就是事务流。
事务中心:将输入分离成若干个发散的数据流,形成许多活动路径,并根据输入值选择其中一条路径。
事务流:输入到输出有固定的映射规则
数据流图转化为数据流设计
看得出,第四步是最复杂的,也就是流图到软件模块的映射
变换设计
变化中心都是直接下属模块,输入输出是从事务中心的边界向外辐射,从上向下
事务设计