-
Notifications
You must be signed in to change notification settings - Fork 6
ООА. Динамическое поведение объектов, понятия состояний, событий, действий состояний, жизненный цикл.
Можно чётко выделить сущности, которые появляются, проходят через отчетливые стадии и прекращают существование. Соответственно, можно представить мир через изменение состояния объектов.
🔶 Многие предметы на протяжение своего существования проходят через отчетливые стадии.
🔶 Порядок перехода из одной стадии в другую (эволюционирование) формирует характерную черту поведения объекта
🔶 Реальный объект находится в единственной стади модели поведния в любой момент времени
🔶 Предметы эволюционируют от одной стадии к другой скачкообразно
🔶 В схеме поведения разрешены не все эволюции между стадиями (самолёт стоящий должен вначале взлететь а потом убрать шасси)
🔶 В реальном мире существуют инцинденты, которые заставляют объекты переходить из одной стадии в другую – эволюционировать
Для описания динамического поведения используется модель состояний Мура. Она состоит из множества состояний, множества событий (инциндентов), правил перехода и из действий состояний. Для правил перехода используется либо ДиаграммаПереходовСостояний, либо ТаблицаПереходовСостояний. В реальном мире, состояния разных сущностей (относящихся к разным классам) скоординированы друг с другом. Изменение одного состояния одного объекта приводит к изменению состояний других объектов. Как правило, мы рассматриваем объекты во взаимосвязи друг с другом.
Cостояние – положение объекта, в котором применяется определенный набор правил, линий поведения, физических законов и т.д..
💠 Можно выделить три вида состояний:
- создание - объект появляется в первый раз (может быть несколько). Возникает событие, но не происходит перехода.
- заключительное – 1) объект переходит через стадии и приходит в состояние, из которого других переходов нет; 2) объект уничтожается при переходе в это состояние (рисуется пунктирной линией).
- текущее
Событие – абстракция инцидента или сигнала в реальном мире, которая сообщает о том, что что-либо переходит в новое состояние.
💠 Выделяют четыре аспекта событий:
- значение – короткая фраза, которая сообщает что происходит с объектом.
- предназначение – модель состояний, которую принимает событие. Приёмник должен быть один.
- уникальная метка – как правило буква (ключевой литерал сущности/МС) и номер. Если событие внешнее, то помечается буквой Е
-
данные события – данные, сопровождающие событие. Каждому состоянию ставится в соответствие действие, которое должно произойти по событию. Событие должно перевести данные для выполнения этого действия.
- идентифицирующие данные
- дополнительные данные
🔶 Существует ряд правил, связывающих события и данные.
- Правило тех же данных – все события, которые вызывают переход в определенное состояние, должны нести одни и те же данные.
- Правило состояний несоздания – если событие переводит объект из состояния в состояние, то оно должно переносить идентификатор объекта.
- Правило состояния создания – событие, переводящее объект в состояние создания, не несёт его идентификатора. Модель скачкообразная. Плавный переход из состояния в состояние можно формализовать несколькими промежуточными состояниями в модели.
Действие – операция, которая должна быть выполнена объектом когда он достигает некоего состояния.
С каждым состоянием связано только одно действие. При формировании ДПС мы стараемся описать действия. Для этого как правило используется псевдокод. Если действие небольшое, то его можно располагать непосредственно под состоянием на диаграмме, если большое – то выносим. Что может выполнять действие: любые вычисления; порождать событие для любого объекта любого класса; порождать событие для чего-либо вне области анализа; выполнять все работы с таймером – создавать\удалять\устанавливать\считывать. Действие может иметь доступ к любым атрибутам любого объекта, как своего так и всех других – читать, записывать.
🔶 Однако на выполнение действия накладываются ограничения:
- действие не должно оставить данные противоречивыми.
- действие не должно оставлять противоречивыми связи (если был удалён объект, то нужно позаботиться и об удалении\изменении объектов с ним связанных).
- только одно действие может выполняться в данный момент для конкретного объекта; но для разных – действия могут выполняться одновременно.
События могут откладываться до тех пор, пока не будет выполнено действие. Каждое событие прекращается, когда оно «перестаёт быть» событием.
К выделению МоделиСостояний мы подходим как к формализации асинхронного взаимодействия – происходит инцидент, в результате него объекты меняют состояния. Смена состояния может происходить не мгновенно, а через какое-то время после.
💠 В каких случаях надо выделять жизненные циклы (совокупности состояний)?
- создание и уничтожение объекта во время выполнения
- миграция между подклассами
- накопление атрибутов. С изменением значения атрибута меняется поведение объекта (человек в зависимости от возраста изменяет поведение)
- операционный цикл оборудования (лифт, станок)
- объект производится поэтапно (сборка машины на конвеере)
- если возникают объекты с жизненным циклом, и мы хотим реализовать асинхронную схему взаимодействия, то задача или запрос – тоже имеют жизненный цикл.
- динамические связи. Формализуется ассоциативным объектом, и для него выделяется свой жизненный цикл. Объект, являющийся таким «результатом» связи, стоит на более высоком уровне, лучше осведомлен о состоянии системы.
- если для какого-то объекта мы выделили цикл, но он имеет безусловную связь с другим объектом (пассивным), то жизненный цикл нужно выделить и для этого пассивного объекта.