Вы уже используете для этого правильный элемент: комбинированный фрагмент с оператором alt.
Однако некоторые вещи неясны: в ваших операндах есть текст (например, одноразовый). Интересно, что это такое? Если это защита, то она должна быть заключена в квадратные скобки. Обычно охранник будет использовать некоторый атрибут типа, представленного линией жизни, с первым сообщением в операнде, в данном случае Ticket
. У него нет такого атрибута, но мы могли бы интерпретировать это как результат какой-то TypeOf()
-функции.
Далее, Ticket
обобщает Single Use Ticket
, поэтому каждый объект типа Single Use Ticket
также является Ticket
. Тогда почему объект Ticket
общается с объектом Single Use Ticket
? Это имело бы смысл только в том случае, если бы Ticket
имело связь с Single Use Ticket
, чего нет. Следовательно, четыре линии жизни Ticket
должны быть только одной, и все getCost
-сообщения будут направлены на одну и ту же линию жизни, которая их отправляет.
Я понимаю, что вы хотите выразить, что реализация getCost
зависит от типа билета. Однако это будет видно только на диаграмме последовательности, когда реализация приводит к отправке разных сообщений. Это не тот случай здесь.
Также странно, что Ticket.buy
ожидает параметр типа Ticket
. Когда вы отправляете buy
-сообщение объекту Ticket
, что оно должно делать с другим объектом Ticket
?
Одна ошибка на диаграмме заключается в том, что ваши ответные сообщения не согласуются с синхронными сообщениями. Ответные сообщения должны возвращаться на линию жизни, отправившую синхронное сообщение, поскольку синхронность означает, что отправитель ожидает ответа.
Вы используете найденные сообщения для сообщений, поступающих от пользователя. Я бы предпочел использовать сообщения из рамки диаграммы, потому что в принципе вы знаете, откуда они берутся, вы просто выбираете не моделировать это.
И последняя рекомендация: линии жизни могут представлять атрибуты или параметры. Поэтому вы должны указать имя параметра или атрибута в заголовке линии жизни, например. cc:Credit card
. Если вы опускаете имя, двоеточие перед типом остается.
person
Axel Scheithauer
schedule
30.04.2021