Диаграмма последовательности из диаграммы классов

Я делаю небольшой проект UML, в котором пользователь должен купить билет с помощью кредитной карты (которой он владеет). Существует 3 типа билетов: одноразовый билет, билет на полдня и билет на целый день, каждый из которых является подклассом абстрактного класса Ticket.

Диаграмма последовательности должна представлять действие по покупке одного из таких билетов, однако я изо всех сил пытаюсь это реализовать (я использую STARUML для этого проекта).

введите здесь описание изображения

Вот как бы я это реализовал введите здесь описание изображения


person loma    schedule 29.04.2021    source источник
comment
Ну, это может быть что угодно. Кто знает, как это должно работать без спецификации? Пожалуйста, укажите конкретно, где вы боретесь.   -  person qwerty_so    schedule 30.04.2021


Ответы (1)


Вы уже используете для этого правильный элемент: комбинированный фрагмент с оператором 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