此代码是否正确解释了可导航性?

问题描述

让我们考虑一下Book类和Chapter类。

Class Book {
   private Chapter chapter;
}

Class Chapter {
}

声明1 :如果Book包含Chapter,则这是组成,因为销毁Book也会销毁{{ 1}}

声明2 :由于ChapterBook相关联并知道Chapter,因此它也可以是可导航性

所以,两个语句都是正确的,我知道语句1是正确的,但是我不确定语句2是否正确。

解决方法

有成分和成分

使用相同的“组成”一词来指代非常不同的事物:

  • object composition ,这是一种OOP技术,可以从多个其他对象和值中创建(组成)一个对象。
  • UML composition ,这是一种关联,其中一个对象一次可以成为一个最大复合对象的一部分,并且复合对象负责存在和存储该复合对象。零件。因此,这是专有所有权。

顺便说一句,在回答之时,Wikipedia文章误导了关于对象组合的UML表示法的不完整之处:它完全错过了对象组合可以实现简单关联的观点

您的情况是对象组成

在您的示例中,您使用对象合成,Book和组件对象Chapter(提示:使其成为使您的示例更加逼真的容器)

不能保证它是UML组成:例如,如果此代码将用Java实现,则Book book可以有私有的Chapter chapter。但是book的某些方法,例如getChapter(),可能会将私有chapter泄漏到另一个对象。由于java类是引用对象,因此,不能保证本章最多包含一个组合,这是UML组成的UML要求。而且,在这种情况下,一章可能会影响一本书。

建议:除非您确定专有,否则请避免编写UML。如有疑问,请为简单的关联建模。

可导航性

Navigability与关联类型正交。存在用于组合,聚合和简单关联的可导航性。这意味着您可以轻松地从一个类的实例转移到另一个类的关联实例。

在您的情况下:

  • 您可以清楚地从组合book导航到组件chapter(就像book.chapter一样容易。)
  • 但是,没有任何向后导航的证据:因此,当您拥有特定的章节时,如果不了解其中所包含的书,就不可能找回相关的书。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...