高内聚,低耦合 作者:马育民 • 2023-03-03 09:50 • 阅读:10079 # 耦合 耦合是 **模块之间** 相互联系的 **紧密程度的度量**。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。 模块之间,相互联系程度越低,则 **耦合越低**,即:**模块的独立性就越好** 耦合方式有7种类型,如图 [](https://www.malaoshi.top/upload/0/0/1GWxz2AXDZm.png) - 无直接耦合。指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此,模块间耦合性最弱,模块独立性最高。 - 数据耦合。指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。 - 标记耦合。指两个模块之间传递的是数据结构。 - 控制耦合。指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。 - 外部耦合。模块间通过软件之外的环境联结(如I/O 将模块耦合到特定的设备、格式、通信协议上)时称为外部耦合。 - 公共耦合。指通过一个公共数据环境相互作用的那些模块间的耦合。 - 内容耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时,这种模块之间的耦合称为内容耦合。 # 内聚 内聚是对一个 **模块内部 各个元素(语句、程序段)之间的联系的紧密程度** 的度量。 一个模块内,各个元素(语句、程序段)之间的 **联系程度越高**,则 **内聚越高**,设计越合理 >一个内聚程度高的模块(在理想情况下)应当只做一件事。 内聚性分为7种类型,如图 [](https://www.malaoshi.top/upload/0/0/1GWxz5eivg2.png) - 偶然内聚(巧合内聚)。指一个模块内的各处理元素之间没有任何联系。 - 逻辑内聚。指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。 - 时间内聚。把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。 - 过程内聚。指一个模块完成多个任务,这些任务必须按指定的过程执行。 - 通信内聚。指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。 - 顺序内聚。指一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。 - 功能内聚。这是最强的内聚,指模块内的所有元素共同作用完成一个功能,缺一不可。 # 高内聚,低耦合 软件设计中,要遵循 `高内聚,低耦合`,模块内部要高度内聚,模块与模块之间要降低耦合度 ### 理解 相当于乐高积木: - 模块内部,联系程度高,即:`高内聚`,模块内部缺一不可,形成一个具体的功能 - 模块与模块之间,联系程度低,即:`低耦合`,一个模块坏了,换一个即可;一个模块的改动,其他模块不需要改动 [](https://www.malaoshi.top/upload/pic/java/QQ20201027112609.png) [](https://www.malaoshi.top/upload/pic/java/QQ20201027113735.png) 组装后,才能实现某个功能,如下图: [](https://www.malaoshi.top/upload/pic/java/QQ20201027113120.png) 原文出处:http://malaoshi.top/show_1IX540UNCNja.html