java - 识别类定义的关系
问题描述
对于确定类定义的关系(实现、泛化/专业化等),我将不胜感激。这不是学校作业,而是我显然做错了的测试题。
我已经阅读了可能的不同类型的关系
我认为这可能是我所读内容的泛化/专业化关系,但这只是一个猜测,因为我只是不理解伪代码,所以如果有人可以解释什么是“正在发生的”(或给出一个“真实的”代码示例的伪代码并解释),我将不胜感激。
给定以下类定义的伪代码,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 在其操作的定义中使用 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依赖关系的原因。
推荐阅读
- javascript - 使用正则表达式从时间戳获取日期
- javascript - 为每个问题获取 pokemon API
- python - 如何配置 pylint 以获得更高的准确性
- python - zlib 压缩输出可以避免使用某些字节值吗?
- java - 如何在android studio中将关闭按钮设置为AlertDialog框
- android - 无法在 macOS Catalina 上设置 Android SDK?
- ios - 从 NotificationContentExtention 关闭 IOS 通知
- excel - 在 Excel 中仅生成周末日
- python - Pytorch 词嵌入导致 nan 值
- javascript - removeClass() 中的转换属性不起作用