顾名思义,指模块内部的聚集,具体指模块内部组成成分的相关联程度。
内聚程度越高,软件各模块和成分越容易理解。例如家里的衣服放衣柜、蔬菜水果放冰箱、书籍放书架,摆放有序就很容易知道物品放在哪里。例如与行政相关的事情设立行政部门、与财务相关的设立财务部门,事情安排有序就很容易知道找谁处理事情,有利于加快人员之间的协调合作。
内聚性质表
内聚 | 成分输出相关 | 成分处理相关 | 成分顺序相关 | 成分特征相关 |
---|---|---|---|---|
偶然内聚 | - | 否 | 否 | 否 |
逻辑内聚 | - | - | - | 是 |
时间内聚 | - | - | - | 是 |
过程内聚 | - | - | 是 | 是 |
信息内聚 | - | 是 | - | 是 |
顺序内聚 | - | 是 | 是 | 是 |
功能内聚 | 是 | 是 | 是 | 是 |
“-”表示是或否。
成分输出相关,指各成分处理的结果输出与模块目标结果输出的相关性。例如某模块根据打卡数据计算员工的工资数据,在计算过程中需要对员工的打卡数据计算成日考勤数据并保存在日考勤的数据表中,再根据日考勤数据计算成月考勤数据保存在月考勤数据中,再根据月考勤数据计算出工资结果,这个模块的各成分结果有日考勤数据结果、月考勤数据结果、工资数据结果,与模块的目标结果只有工资数据结果相关,其它数据结果与模块目标相关性不大。如果中间中间成分处理的数据结果是一个临时表只是为了当前模块使用,那中间成分的输出数据结果忽略不参与模块输出的相关比较。
成分处理相关,指各成分的处理结果会影响其它成分的处理结果。
成分顺序相关,指各成分的处理顺序或代码顺序是否有一定的规则,不能随意更改位置。
成分特征相关,指各成分是否有一种或多种相似的特征,例如信息内聚的成分都处理同一个信息相关,时间内聚的成分都需要在某一时间执行的相似特征等。
偶然内聚
如果一个模块的各成分之间毫无关系,则称为偶然内聚。模块完成一组任务,这些任务之间的关系松散,实际上没有什么联系。
例子一:
有一个工厂(模块)加工生产衣服,又加工生产矿泉水,这个工厂(模块)加工生产的两件事没有任何关联,即为偶然内聚。
例子二:
var getMyName = function(){
var result = 1 + 2; //计算1+2
console.log("hello"); //打印say hello
}
这个方法需要获取我的名字,但方法里面做了两件事情,与方法的需要没有关联,它们之间也没有关联,与方法主题不符,即为偶然内聚。
例子三:
var theApple = {
sex:"boy",
font: