Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 26
Описание файла
PDF-файл из архива "Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 26 страницы из PDF
Manager входит в систему.Основной поток:1. include (FindEmployeeDetails).2. Система выводит данные служащего.…Главные актеры:ManagerВторостепенные актеры:Нет.Предусловия:1. Manager входит в систему.Основной поток:1. include (FindEmployeeDetails).2. Система выводит данные служащего.3. Manager удаляет данные служащего.…Постусловия:1. Данные служащего удалены.Альтернативные потоки:Нет.Альтернативные потоки:Нет.Постусловия:1. Система вывела на экран данныеслужащего.Альтернативные потоки:Нет.Рис. 5.8. Семантика отношения «include»Отношение «include» имеет простую семантику (рис.
5.8). Базовый прецедент выполняется до момента включения. Затем выполнение переходит во включаемый прецедент. По завершении включаемого прецедента управление вновь возвращается в базовый прецедент.Базовый прецедент является незавершенным без всех его включаемыхпрецедентов. Они – неотъемлемые части базового прецедента. Однаковключаемые прецеденты могут быть как полными, так и неполными.Если включаемый прецедент неполный, он просто содержит часть потока событий, которая имеет смысл только тогда, когда включена в соответствующий базовый прецедент. Обычно такие прецеденты называют фрагментом поведения. В этом случае говорят, что экземпляр включаемого прецедента не может быть создан, т.
е. он не может быть инициирован актерами напрямую. Он может выполняться, только если онвключен в соответствующий базовый прецедент. Однако если включаемый прецедент полный, он ведет себя как обычный прецедент. Его экземпляры могут быть созданы, и он может инициироваться актерами.Включаемый прецедент приведен на рис. 5.9. Он является неполными, следовательно, его экземпляры не могут быть созданы.5.5. Отношение «extend»Отношение «extend» – способ введения нового поведения в существующий прецедент.128Глава 5. Дополнительные аспекты моделирования прецедентовПрецедент: FindEmployeeDetailsID: 4Краткое описание:Manager ищет данные служащего.Главные актеры:ManagerВторостепенные актеры:Нет.Предусловия:1.
Manager входит в систему.Основной поток:1. Manager вводит ID служащего.2. Система ищет данные служащего.Постусловия:1. Система нашла данные служащего.Альтернативные потоки:Нет.Рис. 5.9. Пример неполного включаемого прецедентаОтношение «extend» предоставляет возможность ввести новое поведение в существующий прецедент (рис. 5.10). Базовый прецедент предоставляет набор точек расширения (extension points) – точек входа,в которые может быть добавлено новое поведение.
А расширяющийпрецедент предоставляет ряд сегментов вставки, которые можно ввестив базовый прецедент в места, указанные точками входа. Как вскоре будет показано, отношение «extend» может использоваться для того, чтобыточно указать, какие именно точки расширения базового прецедентаподлежат расширению.В отношении «extend» любопытно то, что базовый прецедент ничего незнает о расширяющих прецедентах, он просто предоставляет для нихточки входа. Базовый прецедент абсолютно полон и без расширений.Это существенно отличает «extend» от отношения «include», где базовыеCистема Libraryбазовый прецедентReturn book«extend»Borrow bookLibrarianFind bookРис.
5.10. Отношение «extend»расширяющий прецедентIssue fineотношениерасширения1295.5. Отношение «extend»Прецедент: ReturnBookID: 9Краткое описание:Librarian возвращает взятую книгу.базовый прецедентГлавные актеры:LibrarianReturnBookextension pointsoverdueBookВторостепенные актеры:Нет.Предусловия:1. Librarian входит в систему.extension point: overdueBook«extend»точкарасширенияимя точкирасширенияIssueFineрасширяющий прецедентОсновной поток:1.
Librarian вводит ID читателя.2. Система выводит данные читателя, включаясписок взятых им книг.3. Librarian находит возвращаемую книгув списке книг.точка расширения: overdueBook4. Librarian возвращает книгу.…Постусловия:1. Книга возвращена.Альтернативные потоки:Нет.Рис. 5.11. Обозначение точек расширенияпрецеденты остаются неполными без включаемых прецедентов. Болеетого, точки расширения на самом деле не вводятся в поток событий базового прецедента; они накладываются поверх потока.Точки расширения обозначаются в потоке событий базового прецедента, как показано на рис.
5.11. Точки расширения также можно показать на диаграмме прецедентов, перечислив их в новой ячейке пиктограммы базового прецедента.Обратите внимание на то, что точки расширения в основном потоке непронумерованы. Они появляются между пронумерованными шагамипотока. UML явно определяет тот факт, что точки расширения фактически существуют в слое поверх основного потока.
Следовательно, онивообще не являются его частью. Этот слой подобен прозрачной пленке,наложенной поверх основного потока, на которую нанесены точки расширения. Основная идея введения этого слоя – сделать поток базовогопрецедента полностью независимым от точек расширения. Иначе говоря, поток базового прецедента не знает (или не интересуется), в каких точках происходит его расширение. Это позволяет использоватьотношение «extend» для создания произвольных или специальных расширений потока базового прецедента.При использовании «extend» базовый прецедент выступает в роли модульного каркаса, к которому можно подключать расширения в предопределенных точках расширения. В примере на рис. 5.11 в базовом130Глава 5.
Дополнительные аспекты моделирования прецедентовпрецеденте ReturnBook точка расширения overdueBook находится междушагами 3 и 4 потока событий.Отношение «extend» предоставляет хороший способ обработки исключительных ситуаций или ситуаций, когда нужен гибкий каркас, поскольку невозможно предсказать (или просто не известны) все возможные расширения.5.5.1. Расширяющий прецедентРасширяющие прецеденты обычно не являются полными прецедентами, поэтому, как правило, их экземпляр не может быть создан.
Обычно они состоят всего из одного или нескольких фрагментов поведения,называемых сегментами вставки. Отношение «extend» определяет точку расширения в базовом прецеденте, в которой будет введен сегментвставки. Здесь действуют следующие правила:• Отношение «extend» должно определять одну или несколько точекрасширения базового прецедента. В противном случае предполагается, что отношение «extend» относится ко всем точкам расширения.• В расширяющем прецеденте должно быть столько же сегментоввставки, сколько точек расширения определено в отношении«extend».• Два расширяющих прецедента могут «расширять» один базовыйпрецедент в одной и той же точке расширения. Но в этом случае порядок выполнения расширений не определен.В примере на рис. 5.12 в расширяющем прецеденте всего один сегментвставки IssueFine (назначить штраф).Расширяющий прецедент может также иметь предусловия и постусловия.
Предусловия должны быть выполнены, в противном случае сегРасширяющий прецедент: IssueFineReturnBookextension pointsoverdueBookID: 10Краткое описание:Сегмент 1: Librarian записывает и распечатывает штраф.Главные актеры:Librarianextension point: overdueBook«extend»Второстепенные актеры:Нет.Сегмент 1 предусловия:1. Возвращенная книга просрочена.единственная вставка расширяющегопрецедента IssueFine вводитсяв точке вставки overdueBookпрецедента ReturnBookПоток сегмента 1:1.
Librarian вводит данные штрафа в систему.2. Система распечатывает штраф.IssueFineСегмент 1 постусловия:1. Штраф записан в системе.2. Система распечатала штраф.Рис. 5.12. Расширяющий прецедент с одним сегментом вставки1315.5. Отношение «extend»мент не выполняется. Постусловия ограничивают состояние системыпосле выполнения сегмента.У самих расширяющих прецедентов могут быть расширяющие иливключаемые прецеденты. Однако лучше избегать такой вложенности,поскольку это сильно усложняет систему.5.5.2.
Несколько сегментов вставкиВ расширяющем прецеденте может быть несколько сегментов вставки. Это полезно в тех случаях, когда не получается полностью реализовать расширение в одном сегменте изза того, что необходимо вернуться и чтото сделать в основном потоке базового прецедента. Обратимся к примеру, изображенному на рис. 5.13. Пусть после записии распечатки штрафа выполнение возвращается в основной поток дляобработки других просроченных книг, после чего в точке расширенияpayFine (выплатить штраф) должнику предлагается заплатить общуюсумму штрафа. Конечно, такая процедура более эффективна, чем взимание платежей по каждому штрафу в отдельности (так произошлобы, если бы эти два сегмента были сведены в один сегмент IssueFine).При создании расширяющих прецедентов с несколькими сегментаминеобходимо четко нумеровать каждый сегмент, как показано нарис.
5.13, поскольку здесь важен порядок сегментов: первый сегментРасширяющий прецедент: IssueFineID: 10Краткое описание:Сегмент 1: Librarian записывает и распечатывает штраф.Сегмент 2: Librarian принимает платеж по штрафу.ReturnBookextension pointsoverdueBookpayFineГлавные актеры:LibrarianВторостепенные актеры:Нет.Сегмент 1 предусловия:1. Возвращенная книга просрочена.Поток сегмента 1:1.