我们在设计程序的时候,往往会划分模块,怎样更好的设计模块?模块的设计标准又是什么?
模块的耦合和内聚就是用来描述模块设计的好坏。模块的划分总原则是 高内聚、低耦合。
模块的耦合方式从低到高依次是非直接耦合----数据耦合---标记耦合---控制耦合---外部耦合---公共耦合---内容耦合。模块的独立性和耦合性正好是相反的,模块的独立性越低,耦合性越高。简单地说,软件工程中对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。
非直接耦合:指的是两个模块之间没有直接联系,他们之间的联系完全是通过主模块的控制和调用来实现的。
数据耦合: 如果一个模块访问另一个模块时彼此之间是通过简单数据参数来交换输入、输出信息的,则称这种 耦合为数据耦合。简单数据参数不包括控制参数、公共数据结构、外部变量。
标记耦合: 如果一组模块通过参数表传递记录信息,这就是标记耦合。
控制耦合: 如果一个模块通过传送开关、标志、名字等控制信息,明显的控制选择另一模块的功能,这就是控 制耦合。
外部耦合: 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量 的信息,则称之为外部耦合。
公共耦合: 若一组模块都访问同一个公共数据环境,则他们之间的耦合就称之为公共耦合。
公共耦合又分松散公共耦合和紧密公共耦合。
内容耦合: 是一个强耦合,指的是几个模块共用一段代码或者是两个模块可以互相调用相互的代码,这就叫做 内容耦合。两个模块之间的代码是重迭的。
模块内聚从高到低依次是功能内聚---信息内聚---通信内聚---过程内聚---时间内聚---逻辑内聚---巧合内聚。
功能内聚: 一个模块中各个部分都是完成某一具体功能必不可少的组成部分,是不可分割的。
信息内聚: 这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能都有一个唯一的入口 点。
通信内聚: 如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信 内聚模块。
过程内聚: 使用流程图作为工具设计程序时,把流程图的某一部分划出组成模块,这就得到过程内聚模块。
时间内聚: 时间内聚模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。
逻辑内聚: 指的是把若干个相关的功能组合在一起,就构成了逻辑内聚。
只有清除的了解了模块的耦合和内聚我们才能设计出高内聚和低耦合的程序。以我的理解,我们现在只是知道了设计模块要遵守高内聚、低耦合这个原则,但具体还是不知道这是个什么东西,所以实践出真知,我们以后再做软件的时候要想到这一点,要做到高内聚、低耦合在我心,模块内的联系强、模块间的联系弱。