【问题标题】:Reading UML diagrams (POODR)阅读 UML 图 (POODR)
【发布时间】:2017-05-25 20:53:23
【问题描述】:

我正在阅读 POODR 并试图围绕 Sandi 的示例进行思考。

我对尝试了解她的 UML 图的工作原理特别感兴趣。

例如第 75 页的图 4.8:

看着图片,我想到了一些问题:

  1. moe Customer - 这表示 Customer 类的一个实例,可能具有等于 moe 的属性名称,或者它可能是存储在名为 moe 的变量中的实例,无论哪种方式图表看起来这个框代表“一个对象,它是 Customer 类的实例”?

  2. 一个 TripFinder - 这有点令人困惑,因为它似乎也代表“一个作为 TripFinder 类实例的对象”?

  3. Trip 类和 Bicycle 类 - 现在我们看到 class 关键字,Sandi 是不是想说这些框代表“旅行类对象”或“自行车类对象”?两者都是“作为 Class 类的实例的对象”?

  4. 箭头似乎从“消息”的“发送者”指向“接收者”。在转换为“在接收者对象上调用方法”的代码中?箭头来自 moe 的事实意味着在 Customer 类内部的某个地方有一个调用 TripFinder#suitable_trips 实例方法的方法。所以从“发送者”到“接收者”的箭头告诉我们接收者的方法名称(又名方法签名?),而不是发送者的方法名称,对吗?

  5. 响应箭头是什么意思?他们只是返回语句吗?虚线与实线的意义是什么?我知道在某些图表中它们代表依赖关系,但现在它们似乎代表发送消息并获取返回语句。这和依赖一样吗?

  6. 为什么最后一行是实线?这只是一个错字吗?

【问题讨论】:

  • 好吧,顺便说一句,这些图表离完全符合 UML 还差得很远。在生命线中,名称和类应该用冒号分隔,而不是空格(例如moe:Customer)。应该有一个组合片段来表示循环而不是施加约束。箭头末端应该是实心三角形或空心箭头(仅由两条线组成)。这些头既不是实心三角形(那么响应的头会不正确 - 它应该是开放的)也不是开放的头(那么所有消息都是同步的并且不能有响应)。它不支持理解图表

标签: ruby class oop uml


【解决方案1】:

我假设,这是使用绘画工具而不是 UML CASE 工具创建的。

  1. (最多 3 个。)此命名错误。生命线可以仅使用实例name、:classifier 或name:classifier 进行描述。见第570 17.3.4.1 生命线在规范中:

生命线使用一个符号表示,该符号由一个矩形组成,该矩形构成其“头部”,后跟一条垂直线(可能是虚线),代表参与者的生命周期。识别生命线的信息以下列格式显示在矩形内:

<lifelineident> ::= ([<connectable-element-name>[‘[‘ <selector> ‘]’]] [: <connectable-element-type>] [<decomposition>]) | ‘self’`
<selector> ::= <expression>
<decomposition> ::= ‘ref’ <interactionident> [‘strict’]
  1. 正确
  2. 虚线返回消息是可选的。为了清楚起见,您可以放置​​它们或显示特殊的返回值/条件。 UML 中的连接器表示法最令人困惑。在所有(或大多数?)其他图表中,带有空心箭头的虚线表示依赖关系。看。页。 720 条正确使用破折号/箭头的规范(上例中的箭头不正确,因为曲线具有“艺术性”)。
  3. 是的。见 1-3 和上面的注释。

也许,我会把那本书扔进垃圾场……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2011-03-16
    • 2011-10-09
    • 2020-01-18
    • 1970-01-01
    相关资源
    最近更新 更多