Windows编程开发中的内聚性、内聚类型、耦合性和耦合类型

文章介绍了软件设计的两大基本原则——信息隐蔽性和模块独立性,重点讨论了内聚性的7种类型(从偶然内聚到功能内聚)和耦合性的7种类型(从非直接耦合到内容耦合),并提供了便于记忆的口诀。作者是拥有25年IT经验的高级工程师,分享了其在不同技术时代的经历。

 我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows编辑开发中的内聚性、内聚类型、耦合性和耦合类型。

软件设计的基本原则是信息隐蔽性与模块独立性。

模块设计目标是高内聚,低耦合。

然后记住下面这张神图,一张图可抵千言万语。

一、内聚。

内聚是一个模块内部各个元素彼此结合的紧密程度的度量。一个模块内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其他模块之间的耦合性就会降低,而模块独立性就越强。

内聚性按强度从低到高有7种类型如下。

偶然内聚(最弱)

又称巧合内聚,模块的各成分之间毫无关系

逻辑内聚

逻辑上相关的功能被放在同一模块中。如一个模块读取各种不同类型外设的输入

时间内聚

模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起

过程内聚

模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行

通信内聚

模块的所有元素都操作同一个数据集或生成同一个数据集

顺序内聚

模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入

功能内聚(最强)

模块的所有成分对于完成单一的功能都是必需的,则称为功能内聚

内聚性参考记忆口诀为:“偶逻时过通顺功”。

也可以记作:然巡候,沿路走去打了拳法,拳法打后通顺了我气,真是好夫啊。

怎么样,用这个方法好记吧,哈哈。

二、耦合

耦合是各模块间结合紧密度的一种度量。

耦合性由低到高有7种类型如下。

非直接耦合(最低)

模块之间没有直接关系,模块之间的联系完全通过主模块的控制和调用来实现

数据耦合

模块访问,通过简单数据参数来交换输入、输出信息

标记耦合

一个数据结构的一部分借助于模块接口被传递

控制耦合

一个模块通过传送开关、标识、名字等控制信息明显地控制选择另一个模块的功能

外部耦合

一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息

公共耦合

多个模块访问同一个全局数据区

内容耦合(最高)

如果发生下列情形,两个模块间就发生了内容耦合:(1)一个模块直接访问另一个模块的内部数据。(2)一个模块不通过正常入口转到另一模块内部。(3)两个模块有一部分程序代码重叠(只可能出现在汇编语言中)。(4)一个模块有多个入口

耦合性参考记忆口诀为:“非数标控外公内”。

也可以记作:如果要用准来制对的和对部工作流程,那一定是很严格的了。

怎么样,用这个方法好记吧,哈哈。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

### 耦合性内聚性类型 #### 内聚性类型 内聚性是对模块内部各组成元素之间相互结合紧密程度的度量指标[^1]。根据内聚性的紧密程度,可以将其分为以下几种类型: 1. **功能内聚(Functional Cohesion)** 当一个模块内的所有处理元素完成一个且仅完成一个功能时,称为功能内聚。这是最高程度的内聚,表示模块的功能明确、单一[^2]。 2. **顺序内聚(Sequential Cohesion)** 如果一个模块内的处理元素与同一个功能密切相关,并且这些处理元素必须按顺序执行,则称为顺序内聚[^2]。 3. **通信内聚(Communicational Cohesion)** 当一个模块中的所有处理元素都使用相同的输入数据或产生相同的输出数据时,称为通信内聚[^2]。 4. **过程内聚(Procedural Cohesion)** 如果一个模块内的处理元素相关,并且必须以特定的次序执行,则称为过程内聚。它与顺序内聚的区别在于:顺序内聚关注的是数据流,而过程内聚关注的是控制流。 5. **时间内聚(Temporal Cohesion)** 如果一个模块包含的任务需要在同一段时间内执行,则称为时间内聚。这种内聚也被称为瞬时内聚[^2]。 6. **逻辑内聚(Logical Cohesion)** 如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。这类内聚通常表示模块中包含多个相关的功能[^2]。 7. **偶然内聚(Coincidental Cohesion)** 如果一个模块由完成若干毫无关系的功能处理元素偶然组合在一起,则称为偶然内聚。这是最低程度的内聚。 #### 耦合性类型 耦合性描述了模块之间的依赖程度。以下是常见的耦合性类型: 1. **内容耦合(Content Coupling)** 当一个模块直接访问另一个模块的内部数据或逻辑时,称为内容耦合。这是最严重的耦合形式[^3]。 2. **共用耦合(Common Coupling)** 当多个模块共享全局变量时,称为共用耦合。这种耦合会增加模块间的依赖性[^3]。 3. **控制耦合(Control Coupling)** 当一个模块向另一个模块传递控制标记(如标志位),使得后者的行为取决于前者时,称为控制耦合[^3]。 4. **标记耦合(Stamp Coupling)** 当一个模块将另一个模块作为参数传递时,称为标记耦合。这种耦合可能导致模块间较强的依赖关系。 5. **数据耦合(Data Coupling)** 当两个模块之间通过参数传递数据来进行通信时,称为数据耦合。这是最低程度的耦合,因为模块之间只需要共享数据值,而不依赖于数据的具体实现[^5]。 6. **例程调用耦合(Routine Call Coupling)** 当一个模块调用另一个模块的操作时,称为例程调用耦合。这是常见的耦合形式之一[^3]。 7. **类型使用耦合(Type Usage Coupling)** 当一个模块使用另一个模块定义的数据类型时,称为类型使用耦合[^3]。 8. **包含或导入耦合(Include/Import Coupling)** 当一个模块引入或包含另一个模块的包或内容时,称为包含或导入耦合。 9. **外部耦合(External Coupling)** 当一个模块与外部基础设施(如数据库)进行通信协作时,称为外部耦合[^3]。 ### 示例代码 以下是一个简单的代码示例,展示不同类型耦合性: ```python # 数据耦合示例 def calculate_area(radius): return 3.14 * radius * radius radius = 5 area = calculate_area(radius) print(f"Area: {area}") ``` ```python # 控制耦合示例 def process_data(flag, data): if flag == "sort": return sorted(data) elif flag == "reverse": return data[::-1] data = [3, 1, 4, 1, 5] result = process_data("sort", data) print(f"Processed Data: {result}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值