Java 标识类定义的关系

Java 标识类定义的关系,java,software-design,class-diagram,Java,Software Design,Class Diagram,我希望能在确定类定义的关系(实现、泛化/专业化等)方面得到一些帮助。这不是学校布置的作业,而是一道我显然弄错了的试题 我读过关于不同类型的书 我认为从我所读到的内容来看,这可能是一种泛化/专业化关系,但这只是一种猜测,因为我不理解伪代码,所以如果有人能解释“正在发生的事情”(或给出伪代码的“真实”代码示例并加以解释),我将非常感谢 给定类定义的以下伪代码,a与B之间有什么关系? class C { public B Get() { return new B();

我希望能在确定类定义的关系(实现、泛化/专业化等)方面得到一些帮助。这不是学校布置的作业,而是一道我显然弄错了的试题

我读过关于不同类型的书

我认为从我所读到的内容来看,这可能是一种泛化/专业化关系,但这只是一种猜测,因为我不理解伪代码,所以如果有人能解释“正在发生的事情”(或给出伪代码的“真实”代码示例并加以解释),我将非常感谢

给定类定义的以下伪代码,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);
        ...
    }
}

类B在其操作部分的定义中使用A对象。这意味着B有a到a

同样,A在定义其操作时使用B项目。这意味着A对B具有使用依赖性

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

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

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

这里没有通用化/专业化。你可以看到,由于类定义中没有
扩展
这个词,即使我不知道它是哪种关系类型,但我至少可以说它肯定不是泛化/专业化。因此,
B
必须以某种方式从
A
派生出来。但在这种情况下,任何地方都看不到遗产。我看到的唯一一件事是,当调用
DoSomethingElse(B)
时,存在某种排序循环:
A
C
上调用
Get()
C
B
上调用
DoSomething(),
B
A
上调用
DoSomething()
<代码>A->C->B->A
如果这是一个测试的逐字记录,他们应该知道不要用大写字母lolB开始一个方法引用A,A引用B以及C,C引用B感谢你的解释,如果没有扩展,就不可能是泛化/专业化,这真的很有帮助。当试图从(伪)代码中找出关系时,有人知道需要寻找的其他提示吗?