来自 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
对象通信?只有当 Ticket
与 Single Use Ticket
有关联时才有意义,但它没有。因此,四个 Ticket
生命线应该只有一个,所有 getCost
消息都将定向到发送它们的同一条生命线。
我明白,你想表达的是,getCost
的执行取决于票的类型。但是,当实现导致发送不同的消息时,这只会在序列图中可见。这里不是这种情况。
同样奇怪的是,Ticket.buy
需要一个 Ticket
类型的参数。当您向 Ticket
对象发送 buy
消息时,它应该对另一个 Ticket
对象做什么?
图中的一个错误是,您的回复消息与同步消息不一致。回复消息必须 return 发送同步消息的生命线,因为“同步”意味着发件人正在等待回复。
您正在使用找到的消息作为来自用户的消息。我宁愿使用图表框架中的消息,因为原则上你知道它们来自哪里,你只是选择不对其进行建模。
最后一个建议:生命线可以表示属性或参数。因此,您应该在生命线的头部显示参数或属性的名称,例如cc:Credit card
。如果您省略名称,类型前面的冒号将保留。
我正在做一个 UML 小项目,用户必须通过使用信用卡(he/she 拥有)来买票。 门票有3种:单次使用票、半日票和全日票,都是抽象票class.
的子class序列图必须表示购买其中一张票的动作,但我正在努力实现它(我在这个项目中使用 STARUML)。
这就是我的实现方式
您已经为此使用了正确的元素:带有 alt-operator 的组合片段。
但是,有些事情不清楚:在您的操作数中有一个文本(例如,“一次性使用”)。我想知道这是什么。如果它是守卫,那么它需要放在方括号中。通常,守卫将使用生命线表示的类型的某些属性和操作数中的第一条消息,在本例中为 Ticket
。它没有这样的属性,但我们可以将其解释为某些 TypeOf()
函数的结果。
接下来是,Ticket
泛化了 Single Use Ticket
,因此每个 Single Use Ticket
类型的对象也是一个 Ticket
。那么,为什么 Ticket
对象与 Single Use Ticket
对象通信?只有当 Ticket
与 Single Use Ticket
有关联时才有意义,但它没有。因此,四个 Ticket
生命线应该只有一个,所有 getCost
消息都将定向到发送它们的同一条生命线。
我明白,你想表达的是,getCost
的执行取决于票的类型。但是,当实现导致发送不同的消息时,这只会在序列图中可见。这里不是这种情况。
同样奇怪的是,Ticket.buy
需要一个 Ticket
类型的参数。当您向 Ticket
对象发送 buy
消息时,它应该对另一个 Ticket
对象做什么?
图中的一个错误是,您的回复消息与同步消息不一致。回复消息必须 return 发送同步消息的生命线,因为“同步”意味着发件人正在等待回复。
您正在使用找到的消息作为来自用户的消息。我宁愿使用图表框架中的消息,因为原则上你知道它们来自哪里,你只是选择不对其进行建模。
最后一个建议:生命线可以表示属性或参数。因此,您应该在生命线的头部显示参数或属性的名称,例如cc:Credit card
。如果您省略名称,类型前面的冒号将保留。