作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
一、AI 讲解
1. 偶然内聚(Coincidental Cohesion)
偶然内聚是内聚度最低的一种类型。模块内的各个元素之间没有任何联系,它们只是偶然地被放在同一个模块中。例如,在一个模块中包含了以下三个语句:
代码语言:javascript复制move O to R
read file F
move S to T
这三个语句没有任何逻辑上的联系,它们只是被放在同一个模块中,以便于一起编译和执行。
2. 逻辑内聚(Logical Cohesion)
逻辑内聚是指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。例如,在一个模块中包含了以下三个函数:
代码语言:javascript复制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)
时间内聚是指把需要同时执行的动作组合在一起形成的模块。例如,在一个模块中包含了以下两个函数:
代码语言:javascript复制void init() {
// 初始化系统
}
void start() {
// 启动系统
}
这两个函数必须同时执行才能完成系统的初始化和启动工作。因此,将它们放在同一个模块中可以提高代码的可读性和可维护性。
4. 过程内聚(Procedural Cohesion)
过程内聚是指一个模块完成多个任务,这些任务必须按指定的过程执行。例如,在一个模块中包含了以下三个函数:
代码语言:javascript复制void open_file(char *filename) {
// 打开文件
}
void read_file(char *buffer, int size) {
// 读取文件
}
void close_file() {
// 关闭文件
}
这三个函数实现了打开、读取和关闭文件的操作。它们必须按顺序执行才能完成文件的读写操作。
5. 通信内聚(Communicational Cohesion)
通信内聚是指模块内的所有处理元素都在同一数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。例如,在一个模块中包含了以下三个函数:
代码语言:javascript复制void add_student(Student *student) {
// 添加学生信息
}
void delete_student(int id) {
// 删除学生信息
}
void modify_student(Student *student) {
// 修改学生信息
}
这三个函数都操作了同一个数据结构 Student
。因此,将它们放在同一个模块中可以提高代码的可读性和可维护性。
6. 顺序内聚(Sequential Cohesion)
顺序内聚是指一个模块中的各个处理元素都密切相关于同一各功能且必须顺序执行,前一个功能元素的输出就是下一个功能的输入。例如,在一个模块中包含了以下三个函数:
代码语言:javascript复制void parse_input(char *input) {
// 解析输入
}
void process_input(char *input) {
// 处理输入
}
void generate_output(char *output) {
// 生成输出
}
这三个函数实现了输入解析、处理和输出生成的功能。它们必须按顺序执行才能完成整个功能。
7. 功能内聚(Functional Cohesion)
功能内聚是内聚度最高的一种类型。指模块内的所有元素共同作用完成一个功能,缺一不可。例如,在一个模块中包含了以下三个函数:
代码语言:javascript复制void init_database() {
// 初始化数据库
}
void query_database(char *query) {
// 查询数据库
}
void close_database() {
// 关闭数据库
}
这三个函数共同实现了数据库的初始化、查询和关闭功能。它们缺一不可,否则无法完成数据库的操作。
二、AI 出题
- 下列哪种内聚类型表示模块中的操作必须按照特定顺序执行? A. 逻辑内聚 B. 时间内聚 C. 过程内聚 D. 通信内聚
- 功能内聚指的是什么? A. 模块内的操作可以独立执行 B. 模块内的所有元素共同完成一个单一的任务 C. 模块包含了逻辑上相似的操作 D. 模块的操作处理同一数据
- 偶然内聚的模块中的元素之间的关系是怎样的? A. 严格按顺序执行的 B. 逻辑上相似的 C. 没有任何明显的关系 D. 基于时间执行的
- 通信内聚是指模块中的操作怎样组织? A. 按照执行时间组织 B. 操作同一份数据或资源 C. 基于操作的逻辑相似性 D. 完全是偶然组织的
- 顺序内聚与过程内聚有什么不同? A. 顺序内聚强调操作的逻辑相似性 B. 过程内聚的操作之间没有顺序关系 C. 顺序内聚的输出作为另一操作的输入 D. 过程内聚涉及到数据处理的多个步骤
- 时间内聚通常在什么情况下出现? A. 当模块执行与时间无关的任务时 B. 当模块的操作在程序的同一生命周期阶段执行 C. 当模块包含不相关的操作时 D. 当模块的所有操作都完成一个单一任务时
答案解析:
- C. 过程内聚
- B. 模块内的所有元素共同完成一个单一的任务
- C. 没有任何明显的关系
- B. 操作同一份数据或资源
- C. 顺序内聚的输出作为另一操作的输入
- B. 当模块的操作在程序的同一生命周期阶段执行