首页 > 解决方案 > 识别类定义的关系

问题描述

对于确定类定义的关系(实现、泛化/专业化等),我将不胜感激。这不是学校作业,而是我显然做错了的测试题。

我已经阅读了可能的不同类型的关系

我认为这可能是我所读内容的泛化/专业化关系,但这只是一个猜测,因为我只是不理解伪代码,所以如果有人可以解释什么是“正在发生的”(或给出一个“真实的”代码示例的伪代码并解释),我将不胜感激。

给定以下类定义的伪代码,A 与 B 有什么关系?

class C {
    public B Get() {
        return new B();
    }
}

class B {
    public void SomeOperation(A object) {
        object.DoSomething();
    }
}

class A {
    private C m_c;

    public void DoSomething() {
        ...
    }

    public void DoSomethingElse(B b) {
        ...
        m_c.Get().SomeOperation(this);
        ...
    }
}

标签: javasoftware-designclass-diagram

解决方案


B 类在其操作定义中使用 A 对象。这意味着 B对 A具有使用依赖性。

同样,A 在其操作的定义中使用 B 对象。这意味着 A 对 B 有使用依赖关系。

使用依赖意味着一个类需要了解另一个类,因为它使用一些对象,例如作为参数或方法的返回。这是一个很轻的关系。

如果我们遵循 的执行路径A.DoSomethingElse(B),我们会注意到这将从 C 调用一个创建 B 的方法。还很容易看到创建关系。但是,有几个原因不对此进行建模:

  • A.DoSomethingElse(B)返回C.Get()。我们知道,查看代码,它Get()创建了一个 B 对象。但是创建它的不是 A,而是 C。鉴于封装,我们不应该利用 C 的内部结构。我们应该将我们的知识限制在我们所知道的少数事情上,即可以返回一个 B 对象但我们不知道是新的还是现有的。
  • 此外,可以声称 A.DoSomethingElse(B)使用/创建了一个 B 返回C.Get(),但C.Get()在函数体中是实现细节。我们可以很容易地想象拥有相同的 UML 图,但实现使用不同的主体?所以这是一个更多不参考这种rsecond依赖关系的原因。

推荐阅读