Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 56
Текст из файла (страница 56)
Выявление классов с разными состояниями Изучите список классов предметной области, характеризующихся четко определенным жизненным циклом. Ищите классы, которые развиваются или имеют циклическое поведение. Идентифицируйте значимые состояния в жизненном цикле каждого из объектов. Например, научная статья для некоторого журнала последовательно переходит нз состояния Написание в состояние Рецвнзирование, а затем либо в состояние Принята или Отвергнута. Состояния статьи могут сменяться циклично, например если рецензенты потребуют внесения изменений или дополнений, но основная последовательность состояний может быть охарактеризована как развитие. В качестве примера циклического поведения можно привести самолет, который обычно проходит состояния Обслуживание, Загрузка, Полет 12.3.
Модель состояний предметной области 243 и Разгрузка. Некоторые состояния могут присутствовать не в каждом цикле; могут существовать состояния и вне цикла, но основная последовательность в данном случае явно имеет циклический характер. Бывают классы и с хаотичным жизненным циклом, но большинство классов могут быть отнесены либо к развивающимся, либо к циклическим. Пример с банкоматом. Ассоипг (Счет) — это важное понятие из области бизнеса.
Поведение банкомата зависит от состояния счета. Жизненный цикл счета— смесь последовательного и циклического поведения. Другие классы предметной области банкомата не имеют значимых моделей состояния предметной области. 12.3.2. Выделение состояний Перечислите состояния для каждого из классов. Охарактеризуйте объекты каждого класса: укажите значения атрибутов, которые может иметь объект, ассоциации, в которых он может участвовать, значения кратности узлов этих ассоциаций, определите атрибуты и ассоциации, которые имеют смысл только в определенных состояниях. Дайте каждому состоянию осмысленное название. Название не должно описывать, каким образом состояние было получено, оно должно обозна- чати само состояние.
Не тратьте время на мелкие различия между состояниями, особенно количественные (такие как «маленький», «средний», «большой»). Состояния должны выделяться на основании качественных отличий поведения, атрибутов или ассоциаций. Не обязательно определять все состояния до перехода к выделению событий. Рассмотрев события и переходы между состояниями, вы сможете найти недостающие состояния. Пример с банкоматом. Класс Ассоипг (Счет) может находиться в состояниях !«оппа! (нормальное — обычный режим доступа), С(охи (закрытый — клиент закрыл свой счет, но он еще не был исключен из записей банка), Ооеп(гагеп (с превышенным кредитным лимитом — клиент превысил кредитный лимит по своему счету) и 5пзрелг(ег! (приостановлен — доступ к счету был заблокирован по каким- либо причинам).
12.3.3. Выделение событий Получив предварительный список состояний, займитесь поиском событий, которые вызывают переходы между этими состояниями. Подумайте о внешних воздействиях, которые вызывают изменения состояний. Во многих ситуациях событие можно рассматривать как завершение текущей деятельности. Например, если статья находится в состоянии Рецелзироваяие, переход из этого состояния осуществляется по завершении деятельности рецензента. Решение может быть положительным (переход в состояние Принята) или отрицательным (переход в состояние Отвергнута).
Завершение деятельности может вызывать альтернативные переходы, которые могут добавляться в процессе совершенствования модели. Например, статья может перейти в состояние Принята с облзатеньяьами изменениями. 244 Глава 12 ° Анализ предметной области Другие события можно обнаружить, поразмыслив о том, каким образом объект может попасть в определенное состояние. Например, если вы снимаете трубку телефона, он переходит в состояние Набор номера. На многих аппаратах имеются специальные кнопки, нажатие которых вызывает специальные функции.
Если вы нажмете кнопку повтор, телефон наберет последний номер и перейдет в состояние Вьиов. Нажатие кнопки программирование приведет к переходу в состояние Программирование. Внутри состояния могут происходить и события, не вызываюшие переходов. Для модели состояний предметной области важны только те события, которые вызывают переходы. Информацию, содержашуюся в событии, следует представлять в форме списка его параметров. Пример с банкоматом. Перечислим важнейшие события в нашей модели: с1озе ассомпг (закрытие счета), маг)мЬам ехсезз1илй (превышение кредитного лимита), тереагег1 тсопесг Р1Х (повторный неправильный ввод Р1Х-кода), яиресгег(~тамг( (возможная подделка) и аг(ттмггаг1ое асйол (административные действия). 12.3.4.
Построение диаграмм состояний Распределите события по состояниям, к которым они относятся. Добавьте переходы, показываюшие изменения состояний, вызванные осушествлением события в то время, когда объект находится в определенном состоянии. Если событие завершает состояние, из этого состояния обычно бывает только один переход в другое состояние. Если событие инициирует целевое состояние, вы должны рассмотреть, в каких состояниях это событие может происходить, и добавить на диаграмму переходы из этих состояний в целевое состояние. Если событие имеет разное действие на разные состояния, добавьте переходы для каждого из этих состояний.
После указания переходов проанализируйте смысл событий, не вызываюших переходы. Игнорируется ли событие? Тогда все в порядке. Не обозначает ли оно ошибку? Тогда добавьте переход в состояние обработки ошибки. Может быть, вы просто забыли учесть влияние этого состояния? Добавьте на диаграмму новый переход. Иногда вы будете даже обнаруживать новые события.
Обычно деятельность не слишком важна для построения диаграммы состояний классов предметной области. Если же объекты классов выполняют деятельность при переходах, добавьте эту деятельность на диаграмму. Пример с банкоматом. На рис. 12.14 показана модель состояний предметной области для класса Ассоилг (Счет). 12.3.5. Проверка диаграмм состояния Проверьте каждую модель состояний. Все ли состояния достижимы? Особенное внимание нужно уделить маршрутам по диаграмме. Если она описывает класс с развивающимся поведением, есть ли на диаграмме маршрут, соединяюший начальное состояние с конечным? Присутствуют ли на ней ожидаемые отклонения от основной последовательности? Если диаграмма описывает класс с циклическим поведением, есть ли на ней основная петля цикла? Есть ли тупиковые состояния, завершающие цикл? 12.5. Итерационный анализ 245 Рис. 12.14.
Модель состояний предметной области Ищите недостающие маршруты на основании своих знаний о предметной области. Иногда отсутствие маршрутов указывает на отсутствие нужных состояний. Готовая модель состояний должна точно описывать жизненный цикл класса. Пример с банкоматом. Наша модель состояний для класса Ассоилг (Счет) выглядит чрезмерно упрощенной, но нас она вполне удовлетворяет. Для построения более совершенной модели потребовались бы значительные познания в банковском деле. 12.4.
Модель взаимодействия и редметной области Модель взаимодействия редко бывает актуальна при анализе предметной области. При анализе требуется сосредоточиться на ключевых понятиях и глубоких структурных взаимоотношениях, а не на том, какими они кажутся пользователю. Однако модель взаимодействия является важным аспектом модели приложения, поэтому в следующей главе мы обязательно расскажем о ней. 12.5. Итерационный анализ Большинство аналитических моделей не могут быть разработаны за один проход. Описание задачи часто содержит внутренние циклы, да и вообще большинство приложений не приемлет линейного подхода, потому что отдельные части задачи взаимодействуют между собой.
Чтобы понять задачу целиком, вам придется проводить анализ методом итераций: сначала подготовить первое приближение к модели, а затем осуществлять итерации с углублением понимания. Между анализом и проектированием нет четкой границы, поэтому не следует увлекаться излишним уточнением аналитической модели. Проверьте конечную аналитическую модель вместе с заказчиком и экспертами в предметной области. 246 Глава 12 ° Анализ предметной области 12.5.1.
Уточнение аналитической модели Аналитическая модель в целом может быть несогласованной. Отдельные ее составляющие могут быть плохо сбалансированы. Отредактируйте эти составляющие таким образом, чтобы модель стала более ясной и цельной. Постарайтесь уточнить формулировку классов, чтобы увеличить объем совместного использования и улучшить структуру модели. Добавьте детали, которые были пропущены при первом проходе. Некоторые конструкции покажутся вам неуклюжими и неуместными. Внимательно изучите их; возможно, вы ошиблись в понимании понятий. Иногда по мере углубления понимания возникает необходимость значительного реструктурирования модели.
Это проще выполнить на этапе анализа, чем на более поздних этапах, поэтому не избегайте внесения изменений только потому, что у вас уже есть готовая модель. Если множество конструкций кажутся похожими, но не вполне подходят друг к другу, это может означать, что вы пропустили более общее понятие. Ищите обобщения, основанные на неправильно выбранных аспектах (и исправляйте их). Достаточно часто затруднения вызывают физические объекты, обладающие двумя логически различными значениями.
Каждый аспект физического объекта должен быть представлен в модели отдельным объектом. Указанием на подобную проблему является то, что класс плохо встраивается в иерархическую структуру и имеет несколько наборов несвязанных атрибутов, ассоциаций и операций. Ищите исключительные ситуации, частные случаи и отсутствие ожидаемой симметрии. Все это указывает на возможные проблемы.