系统设计及模块划分依据

时间:2021-07-20 08:05:11

系统就是问题域,系统划分过程就是对问题分解过程。实际设计中经常根据业务分类(目的职责环节职能)的划分模块,比如客户有很多个部门,每个部门用的功能放在一个模块中,这样设计的好处是业务部门容易上手。

模块划分依据:http://www.ibm.com/developerworks/cn/rational/1312_wanggb_arch/

所谓模块独立性即:不同模块相互之间的联系尽可能少,尽可能减少公共的变量和数据结构。每个模块尽可能的在逻辑上独立,功能上完整单一,数据上与其他模块无太多的耦合

模块独立性的度量:高内聚低耦合,数据接口简单,可扩展可维护可复用,结构精简。

模块独立性的度量之一:内聚性
一个模块内部各成分之间相互关联的强度。
设计目标:高内聚(一个模块的所有成分都直接参与 并县城对于完成同一功能来说都是最基本的)
内聚性越高,模块独立性越强,由低向高的内聚方式为:

    巧合内聚
    逻辑内聚
    时间内聚
    过程内聚
    通信内聚
    信息内聚
    功能内聚

(1)巧合内聚
模块内各分部间无联系, 例:
view source
print?
1     MOVE O TO R
2     READ FILE F
3     MOVE S TO T

模块中的三个语句没有任何联系,
缺点:可理解性差, 可修改性差。

(2)逻辑内聚
把几种相关功能(逻辑上相似的功能)组合在一模块内, 每次调用由传给模块的参数确定执行哪种功能。

缺点:增强了耦合程序(控制耦合),不易修改,效率低

(3)时间内聚
模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。如

    初始化系统模块
    系统结束模块
    紧急故障处理模块

(4)过程内聚
模块内各处理成分相关,且必须以特定次序执行


(5)通信内聚
模块内各部分使用相同的输入数据,或产生相同的输出结果


(6)信息内聚

信息内聚指模块写成多个功能,各个功能都在同一数据结构上操作,每个功能有唯一入口。如对同一个数据库的查找-添加-删除-修改模块

(7)功能内聚
模块仅包括为完成某个功能所必须的所有成分(模块所有成分共同完成一个功能,缺一不可)

模块独立性的度量之二
耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据
耦合性越高,模块独立性越弱, 耦合强度依赖的因素:

    一模块对另一模块的引用
    一模块向另一模块传递的数据量
    一模块施加到另一模块的控制数量
    模块间接口的复杂度



(1)非直接耦合
两个模块没有直接关系,模块独立性最强。
(2)数据耦合
一个模块调用另一模块时,被调用模块的输入输出都是简单的数据,性松散耦合

(3)标记耦合
如两个模块通过传递数据结构(不是简单的数据,而是记录,数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记耦合

信息情况是一个数据结构,图中模块都与此数据结构产生依赖关系,它们之间也是标记耦合

(4)控制耦合
一模块通过开关量、标志、名字等控制信息,明显地控制另一模块

控制耦合增加了理解和编程的复杂性,调用模块必须知道被调用模块的内部逻辑,增加了相互依赖

去除模块间控制耦合的方法:
1)将被调用模块内的判定上移到调用模块中进行
2)被调用模块分解成若干单一功能模块。

(5)外部耦合
一组模块均与同一外部环境关联(例如: I/O模块与特定的设备、模式和通信 协议关联),它们之间便存在外部耦合。
外部耦合必不可少,但是这种模块数目应尽量少。

(6)公共耦合
一组模块引用同一个共用数据区(也称全局数据区,公共数据环境)
公共数据区指:

    全局数据结构
    共享通讯区
    内存公共覆盖区等


公共耦合存在的问题:

    软件可理解性降低: 模块间存在错综复杂的联系
    软件可维护性差: 修改变量名或属性困难
    软件可靠性差: 公共数据区及全程变量无保护措施

慎用公共数据区和全程变量

(7)内容耦合
一模块直接访问另一模块的内部信息(程序代码或数据),最不好的内容耦合形式

发生内容耦合的情形:

    一模块直接访问另一模块的内部数据
    一模块不通过正常入口转到另一模块内
    两模块有一部分代码重叠
    一模块有多个入口


如何降低耦合度?
1)如模块必须存在耦合,选择适当的耦合类型
原则:
尽量使用数据耦合
少用控制耦合
限制公共耦合的范围
坚决避免使用内容耦合

2)降低模块间接口的复杂性。

http://m.blog.csdn.net/article/details?id=50121411

http://blog.csdn.net/lyc_daniel/article/details/9212235

http://www.csframework.com/cs-framework-intro.htm

http://www.cnblogs.com/kzloser/archive/2012/07/06/2578960.html