耦合与内聚

模块的定义

  • 模块是一个词汇上邻接的程序语句序列,由边界元素限制范围,有一个聚合标识符

什么是内聚,什么是耦合

  • 内聚:模块内相互作用的程度
  • 耦合:模块间相互作用的程度

内聚

  • 偶然内聚
  • 逻辑内聚
  • 时间内聚
  • 过程内聚
  • 通信内聚
  • 功能内聚
  • 信息内聚

偶然内聚

  • 定义:一个模块执行多个完全不相干的操作
  • 缺点:
    • 可维护性退化
    • 不可重用
  • 解决问题:将该模块划分为不同的模块,每个模块执行一个操作
  • 列子
public interface Example {
    public void write();
    public void eat();
    public void print();
    public void fly();
}

逻辑内聚

  • 定义:当一个模块进行一系列相关的操作,每个操作由调用模块选择时,该模块就具有逻辑内聚
  • 缺点:
    • 接口难以理解(newAction(接口1, 接口2, 接口3, 接口4.........))
    • 多个功能之间可能会相互纠缠,维护起来难度相当大(比如下个例子中,key1 && key2 执行打印功能,在后期维护中要改为 key2 || key5 && key6执行打印。而这个条件又和其他的功能相关联)
    • 难以重用
  • 解决问题:将该模块划分为不同的模块,每个模块执行一个操作
  • 例子
    public void example(boolean key1, boolean key2, boolean key3, ...., boolean keyn){
        if (key1 && key2){
            // 打印
        }else if(key2 || key3 ) {
            // 关机
        }else if(keyn){
            // 暂停
        }
        .... 
    }

时间内聚

  • 定义:当模块内部执行一系列与时间相关的操作时,该模块就具有时间内聚
  • 缺点:
    • 无法重用(一个时间顺序只能在一种场景下使用)
  • 例子
    public void example(){
        turnOn();
        loadFile();
        readFile();
        closeFile();
        turnOff();
    }

过程内聚

  • 定义:当一个模块要执行一系列与产品要遵循的顺序有关的操作时,该模块就有过程内聚
  • 缺点:
    • 模块内部的操作之间关联弱(每个灯亮自己的,即使一个灯不亮了,也不影响其他灯亮)
    • 无法重用(这个顺序只能使用于该产品)
  • 例子
    public void example(){
        // 一个产品,如果出现故障,红绿黄灯依次亮起,
        if(故障了){
            turnOn("红");
            turnOn("绿");
            turnOn("黄");
        }
    }

通信内聚

  • 定义:当模块要执行一系列与产品要遵循的顺序有关的操作时,并且所有操作都是在同一数据上进行,该模块就有通信内聚
  • 缺点:
    • 无法重用
    public void example(){
        Duck duck = new duck();
// 以下的颜色设置必须按照这个顺序进行
        duck.setBodyColor("white");
        duck.setFootColor("yellow");
        duck.setEyeColor("dark");
    }

功能内聚

  • 定义:只执行单一操作或只完成单一目标的模块具有功能内聚
  • 优点:
    • 可重用
    • 维护容易

信息内聚

  • 定义:如果模块进行许多操作,每个都有各自的入口点,每个操作的代码相对独立,而且所有操作都在相同的数据结构上完成,则该模块具有信息内聚
// 每个操作可单独调用,即有各自的入口
// 每个操作相对独立
// 所有的操作都是在同一栈上进行的
public interface Stack {
    public void initialize();

    public void push();

    public void pop();

    public void destroy();
}

内容耦合

  • 定义:一个模块直接操作或读取另一模块内的数据,则它们是内容耦合

公共耦合

  • 定义:两个模块都可以存取同一全局数据

控制耦合

  • 定义:一个模块向另一个模块传递控制要素,则他们是控制耦合

标记耦合

  • 定义:两个模块以数据结构作为传递要素,但数据结构中的成员并未全部使用,则它们是标记耦合

数据耦合

  • 定义:两个模块的所有参数是同类数据项,则他们是数据耦合(即,标记传递的参数全部被使用了)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eva_5433

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值