1.什么是模块
模块化的概念是,指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程。
模块化用来分割,组织和打包软件。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
模块具有以下几种基本属性:接口、功能、逻辑、状态,功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。
在系统的结构中,模块是可组合、分解和更换的单元。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。它可以通过在不同组件设定不同的功能,把一个问题分解成多个小的独立、互相作用的组件,来处理复杂、大型的软件。
2.模块化的好处
从生产角度来看,模块化是一种生产方式,这种生产方式体现了两个特点:
(1)生产效率高:
灵活架构,焦点分离,多人协作互不干扰;方便模块间组合、分解。
(2)维护成本低:
可分单元测试;方便单个模块功能调试、升级。
现在已经清楚了现实生活中的模块化,其实在程序中也有很多模块化的例子,例如程序中的常见日期模块(Date)、数学计算模块(Math)、日志模块、登录认证模块、报表展示模块等,所有模块组成一个程序软件系统。同样,当某个模块出现问题时,只需要修改当前模块,而不影响其他模块的代码。
从程序开发角度来看,模块化是一种开发模式,也有两个特点:
(1)开发效率高:方便代码重用,对于别人开发好的模块功能可以直接拿过来使用,不需要重复开发类似的功能。
(2)维护成本低:软件开发周期中,由于需求经常发生变化,最长的阶段并不是开发阶段,而是维护阶段,使用模块化开发的方式更容易维护。
3.模块独立的定性标准
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。
耦合
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。
当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。耦合的强弱取决于模块间接间的复杂性、引用模块的位置和数据的传送方式等。设计时应尽量使模块间的耦合度(Coupling degree)小,模块间的耦合度直接影响系统的可理解性、可测试性、可靠性和可维护性。
耦合也可分为七级,从低至高为:
非直接耦合(Nondirect coupling):两模块间彼此无任何交互
数据耦合(Data coupling):两模块间彼此无任何交互
标记耦合(Stamp coupling):模块间传送的参数包含着复合数据结构
控制耦合(Control coupling):传递的参数中含有控制信息
外部耦合(External coupling):若干模块与同一个外部环境关联
公共耦合(Common coupling):模块间存在着全局变量、公共数据区或可共享的文件等
内容耦合(Content coupling):模块间存在着一个模块直接转入另一模块的内部或一个模块直接使用另一模块的数据或控制信息
应该采取的原则是:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。耦合度应越低越好。
内聚
内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚按强度从低到高有以下几种类型:
偶然内聚:一个模块的各成分之间毫无关系
逻辑内聚:几个逻辑上相关的功能被放在同一模块中
时间内聚:一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起
过程内聚:模块完成多个需要按一定的步骤一次完成的功能
通信内聚(信息内聚):一个模块的所有成分都操作同一数据集或生成同一数据集
顺序内聚:一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入
功能内聚:模块的所有成分对于完成单一的功能都是必须的
偶然内聚和逻辑内聚的模块联系松散,后面几种内聚相差不多,功能内聚是一个功能、独立性强、内部结构紧密,是最理想的内聚。
4.信息隐蔽和局部化
信息隐蔽:一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。这一原理的目的,是为了提高模块的独立性。
局部化:是把一些关系密切的软件元素物理的放得彼此靠近。局部化有助于实现信息隐藏。