来自 Class 图的序列图

Sequence Diagram from Class Diagram

我正在做一个 UML 小项目,用户必须通过使用信用卡(he/she 拥有)来买票。 门票有3种:单次使用票、半日票和全日票,都是抽象票class.

的子class

序列图必须表示购买其中一张票的动作,但我正在努力实现它(我在这个项目中使用 STARUML)。

这就是我的实现方式

您已经为此使用了正确的元素:带有 alt-operator 的组合片段。

但是,有些事情不清楚:在您的操作数中有一个文本(例如,“一次性使用”)。我想知道这是什么。如果它是守卫,那么它需要放在方括号中。通常,守卫将使用生命线表示的类型的某些属性和操作数中的第一条消息,在本例中为 Ticket。它没有这样的属性,但我们可以将其解释为某些 TypeOf() 函数的结果。

接下来是,Ticket 泛化了 Single Use Ticket,因此每个 Single Use Ticket 类型的对象也是一个 Ticket。那么,为什么 Ticket 对象与 Single Use Ticket 对象通信?只有当 TicketSingle Use Ticket 有关联时才有意义,但它没有。因此,四个 Ticket 生命线应该只有一个,所有 getCost 消息都将定向到发送它们的同一条生命线。

我明白,你想表达的是,getCost的执行取决于票的类型。但是,当实现导致发送不同的消息时,这只会在序列图中可见。这里不是这种情况。

同样奇怪的是,Ticket.buy 需要一个 Ticket 类型的参数。当您向 Ticket 对象发送 buy 消息时,它应该对另一个 Ticket 对象做什么?

图中的一个错误是,您的回复消息与同步消息不一致。回复消息必须 return 发送同步消息的生命线,因为“​​同步”意味着发件人正在等待回复。

您正在使用找到的消息作为来自用户的消息。我宁愿使用图表框架中的消息,因为原则上你知道它们来自哪里,你只是选择不对其进行建模。

最后一个建议:生命线可以表示属性或参数。因此,您应该在生命线的头部显示参数或属性的名称,例如cc:Credit card。如果您省略名称,类型前面的冒号将保留。