Java 标识类定义的关系
我希望能在确定类定义的关系(实现、泛化/专业化等)方面得到一些帮助。这不是学校布置的作业,而是一道我显然弄错了的试题 我读过关于不同类型的书 我认为从我所读到的内容来看,这可能是一种泛化/专业化关系,但这只是一种猜测,因为我不理解伪代码,所以如果有人能解释“正在发生的事情”(或给出伪代码的“真实”代码示例并加以解释),我将非常感谢 给定类定义的以下伪代码,a与B之间有什么关系?Java 标识类定义的关系,java,software-design,class-diagram,Java,Software Design,Class Diagram,我希望能在确定类定义的关系(实现、泛化/专业化等)方面得到一些帮助。这不是学校布置的作业,而是一道我显然弄错了的试题 我读过关于不同类型的书 我认为从我所读到的内容来看,这可能是一种泛化/专业化关系,但这只是一种猜测,因为我不理解伪代码,所以如果有人能解释“正在发生的事情”(或给出伪代码的“真实”代码示例并加以解释),我将非常感谢 给定类定义的以下伪代码,a与B之间有什么关系? class C { public B Get() { return new 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()
创建了一个B对象。但创建它的不是A,而是C。从封装的角度来看,我们不应该利用C的内部结构。我们应该将我们的知识限制在我们知道的少数事情上,即B对象可以返回,但我们不知道它是新的还是现有的Get()
- 此外,可以声称
使用/创建了由A.DoSomethingElse(B)
返回的B,但函数体中的C.Get()
是实现细节。我们可以很容易地想象有相同的UML图,但是有一个使用不同主体的实现?因此,这是一个不引用这个rsecond依赖关系的原因C.Get()
扩展
这个词,即使我不知道它是哪种关系类型,但我至少可以说它肯定不是泛化/专业化。因此,B
必须以某种方式从A
派生出来。但在这种情况下,任何地方都看不到遗产。我看到的唯一一件事是,当调用DoSomethingElse(B)
时,存在某种排序循环:A
在C
上调用Get()
,C
在B
上调用DoSomething(),B
在A
上调用DoSomething()
<代码>A->C->B->A
如果这是一个测试的逐字记录,他们应该知道不要用大写字母lolB开始一个方法引用A,A引用B以及C,C引用B感谢你的解释,如果没有扩展,就不可能是泛化/专业化,这真的很有帮助。当试图从(伪)代码中找出关系时,有人知道需要寻找的其他提示吗?