耦合性和内聚性

模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。  
          耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。  
          无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;  
          内容耦合(低――高);   1无直接耦合;2数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;3标记耦合指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;   4控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。;   5公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。6内容耦合:这是最高程度的耦合,也是最差的耦合。  
          当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。   内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。  
          偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;  
          功能内聚(低――高)1偶然内聚指一个模块内的各处理元素之间没有任何联系。   2逻辑内聚指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。3时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。4通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。5顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。6功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。Top

 
### 耦合性内聚性的类型 #### 内聚性类型 内聚性是对模块内部各组成元素之间相互结合紧密程度的度量指标[^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}") ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值