【问题标题】:Coupling of objects对象的耦合
【发布时间】:2011-04-20 16:31:35
【问题描述】:

假设我分别有 A、B 和 C 类的 doA()、doB() 和 doC() 方法。

除非我错了,否则doA()方法应该属于A类。它必须从A类执行。如果为A负责的doA()方法存在于B类中。那么A类是耦合的到 B 的服务。这也代表了低内聚和高耦合

我的推理正确吗?

【问题讨论】:

  • 告诉我们更多; doA() 相对于 A 类实际上做了什么?它是创建一个 A 还是使用一个 A 或更新一个 A 还是什么?
  • A 级是信息专家。它是一个 Board 对象。 doA() 表示 getSquare() 方法。 B 类代表 Square 对象。

标签: design-patterns coupling cohesion


【解决方案1】:

如果一个类的所有方法都对其所有成员变量进行操作,则该类具有最大内聚度

public class MyClass
{
    private int value1;
    private int value2;
    private int value3;

    public int Method1()
    {
        return value1 + value2;
    }

    public int Method2()
    {
        return value1 - value2;
    }

    // doesn't belong on this class
    public int Method3()
    {
        return value3 * 2;
    }
}

耦合有两种形式:

  1. 一个类在内部使用另一个类。这是耦合,但还可以,因为它是组合优于继承的示例

例子:

public class MyClass
{
    public void Method1()
    {
        var c = new MyOtherClass();
        c.DoSomething();
    }
}
  1. 更糟糕的耦合看起来像这样,通常被称为Law of Demeter 违规。

例子:

public class MyClass
{
    public void Method1()
    {
        var c = new MyOtherClass();
        var size = c.Members.Size;
        ...
    }
}

在这种情况下,MyClass 不仅与MyOtherClass 耦合,而且与MyOtherClass结构 耦合,这就是您遇到麻烦并且您的代码变得僵硬和脆弱的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2012-05-14
    • 2012-09-02
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多