
作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
偶然内聚是内聚度最低的一种类型。模块内的各个元素之间没有任何联系,它们只是偶然地被放在同一个模块中。例如,在一个模块中包含了以下三个语句:
move O to R
read file F
move S to T这三个语句没有任何逻辑上的联系,它们只是被放在同一个模块中,以便于一起编译和执行。
逻辑内聚是指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。例如,在一个模块中包含了以下三个函数:
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;
}这三个函数都实现了基本的算术运算,它们之间有一定的逻辑联系。模块可以通过参数来选择执行哪个函数。
时间内聚是指把需要同时执行的动作组合在一起形成的模块。例如,在一个模块中包含了以下两个函数:
void init() {
// 初始化系统
}
void start() {
// 启动系统
}这两个函数必须同时执行才能完成系统的初始化和启动工作。因此,将它们放在同一个模块中可以提高代码的可读性和可维护性。
过程内聚是指一个模块完成多个任务,这些任务必须按指定的过程执行。例如,在一个模块中包含了以下三个函数:
void open_file(char *filename) {
// 打开文件
}
void read_file(char *buffer, int size) {
// 读取文件
}
void close_file() {
// 关闭文件
}这三个函数实现了打开、读取和关闭文件的操作。它们必须按顺序执行才能完成文件的读写操作。
通信内聚是指模块内的所有处理元素都在同一数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。例如,在一个模块中包含了以下三个函数:
void add_student(Student *student) {
// 添加学生信息
}
void delete_student(int id) {
// 删除学生信息
}
void modify_student(Student *student) {
// 修改学生信息
}这三个函数都操作了同一个数据结构 Student。因此,将它们放在同一个模块中可以提高代码的可读性和可维护性。
顺序内聚是指一个模块中的各个处理元素都密切相关于同一各功能且必须顺序执行,前一个功能元素的输出就是下一个功能的输入。例如,在一个模块中包含了以下三个函数:
void parse_input(char *input) {
// 解析输入
}
void process_input(char *input) {
// 处理输入
}
void generate_output(char *output) {
// 生成输出
}这三个函数实现了输入解析、处理和输出生成的功能。它们必须按顺序执行才能完成整个功能。
功能内聚是内聚度最高的一种类型。指模块内的所有元素共同作用完成一个功能,缺一不可。例如,在一个模块中包含了以下三个函数:
void init_database() {
// 初始化数据库
}
void query_database(char *query) {
// 查询数据库
}
void close_database() {
// 关闭数据库
}这三个函数共同实现了数据库的初始化、查询和关闭功能。它们缺一不可,否则无法完成数据库的操作。
答案解析: