Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Старое ПППП / Лабораторная работа №1. UML / Лабораторная работа №1. UML.docx
Скачиваний:
199
Добавлен:
17.04.2018
Размер:
678.96 Кб
Скачать

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

Создадим в этом же проекте (модуле) файл диаграммы последовательностей.

Имя диаграммы: LibrarySequenceDiagram. Так как это диаграмма последовательности, то с помощью её мы сможем показать, какова же последовательность действий в проектируемой системе. Иначе говоря, что же будет делать система при наступлении той или иной ситуации?

Разработаем две диаграммы последовательности: одну для сценария нахождения чего-либо в библиотеке по его имени (name), вторую для сценария удаления чего-либо из библиотеки по идентификатору (ID).

Полную информацию о спецификации PlantUML для диаграмм последовательностей можно посмотреть в файле PlantUML_Language_Reference_Guideили по адресуhttp://plantuml.sourceforge.net/sequence.html.

Сценарий нахождения чего-либо в библиотеке по имени

Сначала необходимо определить объекты, которые посылают друг другу сообщение (иначе говоря, вызывают или каким-либо образом используют друг друга). Когда в классе Library вызывается функция findEntityByName(), то эта функция будет брать список всех сущностей LibraryEntityList, хранящихся в библиотеке, и выполнять в нем поиск. Почему этот список сущностей не был указан в атрибутах в диаграмме классов? Потому что этот список там представлен в виде двусторонней ассоциации. Поэтому имя этого списка будет в диаграмме последовательности, но не будет в диаграмме классов.

Функция findEntityByName() будет вызываться классом-клиентом библиотеки LibraryClient, которого также не было на диаграмме классов. Таким образом, можно написать следующий код, отображающийся в UML.

@startuml

LibraryClient -> Library : findEntityByName(name : String)

Library -> LibraryEntityList : getEntity

LibraryEntityList -> Library: anEntity

@enduml

В диаграмме происходит следующее: LibraryClient вызывает у Library метод findEntityByName, Library запрашивает у списка LibraryEntityList одну сущность, и эта сущность передается библиотеке.

Так как при поиске необходимого элемента в библиотеке происходит перебор всех элементов, то в диаграмме необходимо отобразить, что этот процесс происходит в цикле. Также нужно указать, что каждый раз после возврата элемента из списка происходит проверка на соответствие поисковой строке.

@startuml

LibraryClient -> Library : findEntityByName(name : String)

loop all entities in list

Library -> LibraryEntityList : getEntity

LibraryEntityList -> Library : anEntity

alt anEntity.name == name

Library -> LibraryClient : anEntity

end

end

@enduml

Однако по такой диаграмме последовательности становится понятно, что в LibraryClient будут “возвращаться” много элементов библиотеки, если они будут подходить под поисковый запрос. Значит, необходимо возвращать результаты запроса не отдельными элементами (классу-клиенту обрабатывать большое количество результатов неудобно), а отдельным классом ResultEntityList. Значит, каждый раз, когда полученный из списка anEntity будет удовлетворять запросу, он будет отправляться в ResultEntityList, а по завершении цикла, список результатов ResultEntityList будет возвращен клиенту LibraryClient.

@startuml

LibraryClient -> Library : findEntityByName(name : String)

loop all entities in list

Library -> LibraryEntityList : getEntity

LibraryEntityList -> Library : anEntity

alt anEntity.name == name

Library -> ResultEntityList : anEntity

end

end

ResultEntityList -> LibraryClient : resultList

@enduml