内聚性分类

  1. 功能内聚

    最强的内聚性,一个子程序只完成一项操作,例如sin() min(),前提是子程序所执行的操作与其名字相符,如果它还做了其他的事情,就不够内聚,并且其名字也是有问题的。

  2. 顺序内聚 

    某个程序里顺序执行一系列操作,后一个操作必须在前一个操作完成后才能正确执行,例如:

    操作1:根据ID取名称,判断名称是否正确。

    操作2:将名字转成小写。

    void print_name(id)

    {

    const char* name = get_name(id);

    if (name == NULL){

    //

    }

    tolower(name);

    }

  3. 通信内聚

    某个程序内的不同操作共用了相同的数据,例如:

    更新某个数据时,先查找是否存在,然后再执行插入操作,两个操作都用到相同的参数:

    void update_id(int id)

    {

    bool is_exist = find(id);

    if (is_exist){

    //

    }

    insert(id);

    }

  4. 临时内聚

    某个程序含有一些需要的执行的时候才放到一起的操作。例如初始化函数:

    startup()

    {

    以下操作之间没有联系,但是程序启动时需要都执行:

    init_id_list();//使用子程序完成操作,而不是将繁琐的初始化代码写在这里

    inti_error_list();

    ...

    }

  5. 过程内聚

    指一个子程序中的操作按特定的顺序进行,这些操作原本并不需要关联到一起,只是因为人为的赋予特定的顺序。
  6. 逻辑内聚

    指若干操作被放到同一个程序中,通过传入的控制标识选择执行其中的一项操作。这是不良的内聚。例如下面的读取函数:

    read_data(int type)

    {

    switch(type){

    case 1:{

    // 一堆读取操作

    }

    break;

    case 2:{

    // 一堆读取操作

    }

    break;

    ...

    default:

    break;

    }

    }

    但是如果程序只是由一堆if或case和调用其他子程序的语句组成,这种逻辑内聚也是很好的。例如:事件处理器。

  7. 巧合内聚

    指程序中各个操作之间没有任何联系。这种就是混乱的内聚性。
时间: 2024-10-05 10:53:17

内聚性分类的相关文章

模块独立性之高内聚

模块独立性由两个定性标准度量 模块自身的内聚,也称为块内联系或模块强度. 模块之间的耦合,也成为块间联系. 模块独立性愈高,则块内联系越强,块间联系越弱,即高内聚,低耦合. 内聚性分类 内聚性是从功能的角度对模块内部聚合能力的度量. 高内聚是模块独立性追求的目标. 内聚性分类(以计算员工年龄,退休时间举例) 1.功能性内聚:模块各个成分结合在一起,完成一个特定的功能.功能性模块具有内聚性强.与其他模块联系少的特点. 举例:  一个模块根据员工出生日期计算员工年龄,另一个模块根据员工出生日期计算退

模块独立性准则

模块独立性由两个定性标准度量 模块自身的内聚 模块之间的耦合 内聚性分类: 偶然性内聚(最不好的一种内聚):模块内的各个任务在功能上没有实质性联系,纯属“偶然”因素组合了块内各个互不相关的任务. 一个处理正方形的模块有两个功能:计算面积,画出这个正方形. 改进:分成两个模块,计算面积和画出正方形 逻辑性内聚:模块通常由若干个逻辑功能相似的任务组成,通过模块外引入的一个开关量选择其一执行.这种内聚增大了模块间的耦合. 一个模块负责打印季度开支报告.月份开支报告和日开支报告,具体打印哪一个报告由传入

数据库介绍与分类

目录 数据库介绍与分类... 1 1.1 数据库介绍... 2 1.1.1什么是数据库... 2 1.2数据库的种类... 2 1.2.1关系型数据库介绍... 2 1.2.2非关系型数据库介绍... 3 1.3 常用关系型数据库产品介绍... 4 1.3.1 Oracle数据库... 4 1.3.2 MySQL数据库... 5 1.3.3 MariaDB数据库... 5 1.3.4 SqlServer数据库... 6 1.3.5 Access数据库... 6 1.3.6 其他不常用数据库...

PHP_递归实现无限级分类

<?php /** * 递归方法实现无限级别分类 * @param array $list 要生成树形列表的数组[该数组中必须要有主键id 和 父级pid] * @param int $pid=0 父级id * @param int $level=0 缩进次数[用于指定分类名称要缩进的数量] */ function getTree($list,$pid=0,$level=0 ) { // static 表示声明一个静态变量, 静态变量在函数中会一直保存它的值 static $tree = arr

使用多级分组报表展现分类数据

当你走进便利店,你会发现所有的商品都是按类排放的,分类排放可以帮助您快速找到同类商品,也可以快速发现你想要的商品. 当去饭店吃饭的时候,菜单上的菜也是按类别排列的,比如凉菜,热菜,汤类,主食等.点菜时你会直接翻到你想要的那一类菜单,点菜. -- 通过上面场景,大家就理解分组呈现数据的好处了,分组可以帮助快速定位,方便数据查找,汇总,分析数据趋势等.有时候分析某一单一的商品并无价值,所以采用分组是最常见也是最简单的数据分析手段. 分组报表则是在报表中使用分组功能,是工作中最常用的报表类型,分组功能

2.1 二分分类

本周学习神经网络编程的基础知识 构建神经网络,有些技巧是非常重要 神经网络的计算过程中,通常有一个正向的过程(正向传播步骤),接着会有一个反向步骤(反向传播步骤), 为什么神经网络的计算可以分为前向传播和反向传播两个分开的过程?本周课程通过使用logistic回归来阐述,以便于能够更好的理解, logistic回归是一个用于二分分类的算法 比如有一个二分分类问题的例子, 假如有一张图像作为输入是这样的,你想输出识别此图的标签,如果是猫,输出1,如果不是,则输出0 使用y来表示输出的结果标签, 来

栅格重分类和条件函数均可以实现对流量统计数据进行定义划分

ArcGIS水分分析工具的流向分析是基于D8单流向算法,如果分析使用的DEM存在凹陷点,就会产生汇,导致径流断流从而影响了分析结果.在前面章节<ArcGIS水文分析实战教程(2)ArcGIS水文分析工具的基本原理>中又介绍过D8算法,而<ArcGIS水文分析实战教程(4)地形预处理>章节中笔者也较少过如何创建无凹陷点得DEM数据,在使用流向分析工具之前可以先行阅读. 首先流向分析要使用填洼过的数据,确保DEM数据没有凹陷点.如果数据准备妥当,直接使用水文分析工具箱中的[流向]工具进

JS学习笔记(一): 使用原生JS 实现导航栏下多级分类弹出效果

在给静态页面静添加交互效果时遇到的问题 : 鼠标划入二级菜单时 一级菜单样 ":hover" 式无法保持 情景如下: 解决思路: 利用二级菜单的onmouseover/out事件 重新构建一级菜单 ".hover" 样式类 代码如下: CSS部分: 在原来的目标:hover样式中 增加 .hover状态 li.app_jd a:hover,li.app_jd a.hover{ background-position: -126px -397px; } li.serv

前端学习 -- Css -- 字体分类

在网页中将字体分成5大类: serif(衬线字体) sans-serif(非衬线字体) monospace (等宽字体) cursive (草书字体) fantasy (虚幻字体) 可以将字体设置为这些大的分类,当设置为大的分类以后,浏览器会自动选择指定的字体并应用样式. 一般会将字体的大分类,指定为font-family中的最后一个字体. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&