4.C# 高内聚低耦合
高内聚低耦合是判断软件设计好坏的标准。
内聚
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内部的功能联系。
内聚性:
称块内联系,指模块的功能强度的度量,系一个模块内部各个元素彼此间结合的紧密程度的度量。
若一个模块内各个元素联系的越紧密,它的内聚性就越高。
高内聚:
指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一职责原则。
内聚分类:↓
①偶然内聚
一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起。这种模块也称为巧合内聚,内聚程度最低。
②逻辑内聚
把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能 。
③时间内聚
把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
④过程内聚
简单的说就是如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。
⑤通信内聚
即指模块内各个组成部分都使用相同的数据据结构或产生相同的数据结构。有时称之为信息内聚。
⑥顺序内聚
一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前一个处理元素的输出时后一个处理元素的输入。
⑦功能内聚
即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。
最强的内聚。
内聚总结:
在模块划分时,要遵循“一个模块,一个功能”的原则,尽可能使模块达到功能内聚。
耦合
耦合是软件结构中各个模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
耦合性:
称块间联系,指软件系统结构中各个模块间相互联系机密程度的一种度量。
模块间的联系越紧密耦合度就越高,模块的独立性也就越差。
模块间耦合度的高低取决于模块间接口的复杂性、调用的方式、传递的信息。
低耦合:
简单理解,一个完整的系统,模块与模块之间,尽可能的使其独立存在。
让每一个模块尽可能独立完成某个特定的子功能。
模块之间的接口应该尽量少而简单。
耦合分类:↑
①内容耦合
一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。
②公共耦合
一组模块都访问同一个全局数据结构,则称之为公共耦合。
③外部耦合
一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。
④控制耦合
模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能。
⑤标记耦合
调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。
⑥数据耦合
调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。
⑦非直接耦合
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。
耦合总结,模块间不可避免会出现耦合,但应该遵循:
①尽量使用数据耦合;
②减少控制耦合;
③慎用或有控制的使用公共耦合,并限制公共耦合的范围;
④尽量避免内容耦合。