【问题标题】:Is Navigability correctly interpreted in this code? [duplicate]此代码中是否正确解释了可导航性? [复制]
【发布时间】:2023-03-17 07:50:01
【问题描述】:

让我们考虑Book 类和Chapter 类。

Class Book {
   private Chapter chapter;
}

Class Chapter {
}

语句 1:如果 Book 包含 Chapter,这是一个组合,因为销毁 Book 也会销毁 Chapter

声明 2:由于BookChapter 关联并感知到Chapter,它也可以是可导航性

所以,这两个陈述都正确吗,我知道陈述 1 是正确的,但我不确定陈述 2 是否准确。

【问题讨论】:

  • 关系是否是组合的事实与其可导航性之间没有联系,因此查看它们的差异是没有意义的
  • @bruno 但我不明白它们有何不同。
  • 同理,长度和颜色不同无法比较,构图和导航不同,无法比较。无法回答问题Difference between Navigability vs Composition UML class diagram,因为同样,这个问题毫无意义。阅读 Christophe 的回答,了解什么是组合以及什么是可导航性

标签: oop uml composition class-diagram


【解决方案1】:

有构图和构图

同一个术语“组合”用于指代非常不同的事物:

  • object composition,这是一种 OOP 技术,将一个对象由多个其他对象和值组成(组合)。
  • UML composition,这是一种关联,其中一个对象一次最多可以是一个复合对象的一部分,复合对象负责组件的存在和存储。所以它是专有所有权。

顺便说一句,在此答案发布之日,维基百科文章中关于对象组合的 UML 表示法的误导性不完整:它完全忽略了对象组合可以实现简单关联这一点

你的情况是对象组合

在您的示例中,您使用了对象组合,其中包含一个组合 Book 和一个组件对象 Chapter(提示:使其成为一个容器以使您的示例更真实)

不能保证它是 UML 组合:例如,如果此代码将在 Java 中实现,Book book 可以有一个私有 Chapter chapter。但是book 的某些方法,比如getChapter(),可能会将私有chapter 泄露给另一个对象。由于 java 类是引用对象,因此不能保证该章最多存在一个组合中,这是 UML 组合的 UML 要求。此外,在这种情况下,一章可能会在一本书中存在。

建议:除非您确定独占所有权,否则请避免使用 UML 组合。如有疑问,请为简单关联建模。

可导航性

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

在你的情况下:

  • 您可以清楚地从复合book 导航到组件chapter(就像book.chapter 一样简单)。
  • 但是,没有向后导航的证据:因此,当您有特定章节时,不知道它包含在哪本书中,就不可能找到相关的书。

【讨论】:

  • 几个错别字......
  • @qwerty_so true。当我在深夜回答并整天打字时会发生这种情况......
  • 或者当你变老,你的手指在敲击键盘时似乎有了自己的生命;-)
  • @qwerty_so ;-) 事实上,倒置就是这种情况。但是我昂贵的 macbook pro 上的廉价键盘比我快得多。一些常用的键非常不愿意表现良好,那是因为缺失 ;-) 我有时想知道我们是否不能有一个算法来使用这些特性......等等!有:en.m.wikipedia.org/wiki/Keystroke_dynamics
  • 更让我困扰的是,我在打字时不小心碰到了上面的触控板:-/ 嗯...
猜你喜欢
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2014-06-23
相关资源
最近更新 更多