软考高级:内聚的分类(偶然内聚、逻辑内聚等)概念和例题

2024-03-06 09:28

本文主要是介绍软考高级:内聚的分类(偶然内聚、逻辑内聚等)概念和例题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。

热门文章推荐

  • (1)《为什么很多人工作 3 年 却只有 1 年经验?》
  • (2)《一文掌握大模型提示词技巧:从战略到战术巧》
  • (3)《AI 时代,程序员的出路在何方?》
  • (4)《如何写出高质量的文章:从战略到战术》
  • (5)《我的技术学习方法论》
  • (6)《我的性能方法论》
  • (7)《AI 时代的学习方式: 和文档对话》

一、AI 讲解

1. 偶然内聚(Coincidental Cohesion)

偶然内聚是内聚度最低的一种类型。模块内的各个元素之间没有任何联系,它们只是偶然地被放在同一个模块中。例如,在一个模块中包含了以下三个语句:

move O to R
read file F
move S to T

这三个语句没有任何逻辑上的联系,它们只是被放在同一个模块中,以便于一起编译和执行。

2. 逻辑内聚(Logical Cohesion)

逻辑内聚是指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。例如,在一个模块中包含了以下三个函数:

void add(int a, int b) {return a + b;
}void subtract(int a, int b) {return a - b;
}void multiply(int a, int b) {return a * b;
}

这三个函数都实现了基本的算术运算,它们之间有一定的逻辑联系。模块可以通过参数来选择执行哪个函数。

3. 时间内聚(Temporal Cohesion)

时间内聚是指把需要同时执行的动作组合在一起形成的模块。例如,在一个模块中包含了以下两个函数:

void init() {// 初始化系统
}void start() {// 启动系统
}

这两个函数必须同时执行才能完成系统的初始化和启动工作。因此,将它们放在同一个模块中可以提高代码的可读性和可维护性。

4. 过程内聚(Procedural Cohesion)

过程内聚是指一个模块完成多个任务,这些任务必须按指定的过程执行。例如,在一个模块中包含了以下三个函数:

void open_file(char *filename) {// 打开文件
}void read_file(char *buffer, int size) {// 读取文件
}void close_file() {// 关闭文件
}

这三个函数实现了打开、读取和关闭文件的操作。它们必须按顺序执行才能完成文件的读写操作。

5. 通信内聚(Communicational Cohesion)

通信内聚是指模块内的所有处理元素都在同一数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。例如,在一个模块中包含了以下三个函数:

void add_student(Student *student) {// 添加学生信息
}void delete_student(int id) {// 删除学生信息
}void modify_student(Student *student) {// 修改学生信息
}

这三个函数都操作了同一个数据结构 Student。因此,将它们放在同一个模块中可以提高代码的可读性和可维护性。

6. 顺序内聚(Sequential Cohesion)

顺序内聚是指一个模块中的各个处理元素都密切相关于同一各功能且必须顺序执行,前一个功能元素的输出就是下一个功能的输入。例如,在一个模块中包含了以下三个函数:

void parse_input(char *input) {// 解析输入
}void process_input(char *input) {// 处理输入
}void generate_output(char *output) {// 生成输出
}

这三个函数实现了输入解析、处理和输出生成的功能。它们必须按顺序执行才能完成整个功能。

7. 功能内聚(Functional Cohesion)

功能内聚是内聚度最高的一种类型。指模块内的所有元素共同作用完成一个功能,缺一不可。例如,在一个模块中包含了以下三个函数:

void init_database() {// 初始化数据库
}void query_database(char *query) {// 查询数据库
}void close_database() {// 关闭数据库
}

这三个函数共同实现了数据库的初始化、查询和关闭功能。它们缺一不可,否则无法完成数据库的操作。

二、AI 出题

  1. 下列哪种内聚类型表示模块中的操作必须按照特定顺序执行?
    A. 逻辑内聚
    B. 时间内聚
    C. 过程内聚
    D. 通信内聚

  2. 功能内聚指的是什么?
    A. 模块内的操作可以独立执行
    B. 模块内的所有元素共同完成一个单一的任务
    C. 模块包含了逻辑上相似的操作
    D. 模块的操作处理同一数据

  3. 偶然内聚的模块中的元素之间的关系是怎样的?
    A. 严格按顺序执行的
    B. 逻辑上相似的
    C. 没有任何明显的关系
    D. 基于时间执行的

  4. 通信内聚是指模块中的操作怎样组织?
    A. 按照执行时间组织
    B. 操作同一份数据或资源
    C. 基于操作的逻辑相似性
    D. 完全是偶然组织的

  5. 顺序内聚与过程内聚有什么不同?
    A. 顺序内聚强调操作的逻辑相似性
    B. 过程内聚的操作之间没有顺序关系
    C. 顺序内聚的输出作为另一操作的输入
    D. 过程内聚涉及到数据处理的多个步骤

  6. 时间内聚通常在什么情况下出现?
    A. 当模块执行与时间无关的任务时
    B. 当模块的操作在程序的同一生命周期阶段执行
    C. 当模块包含不相关的操作时
    D. 当模块的所有操作都完成一个单一任务时

答案解析:

  1. C. 过程内聚
  2. B. 模块内的所有元素共同完成一个单一的任务
  3. C. 没有任何明显的关系
  4. B. 操作同一份数据或资源
  5. C. 顺序内聚的输出作为另一操作的输入
  6. B. 当模块的操作在程序的同一生命周期阶段执行

这篇关于软考高级:内聚的分类(偶然内聚、逻辑内聚等)概念和例题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779580

相关文章

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署