- •Часть 1. Введение в процесс моделирования 13
- •Глава 1. Зачем мы моделируем 13
- •Глава 2. Введение в язык uml 21
- •Часть 1. Введение в процесс моделирования Глава 1. Зачем мы моделируем
- •Значение моделирования
- •Принципы моделирования
- •Объектное моделирование
- •Глава 2. Введение в язык uml
- •Обзор uml
- •Где используется uml
- •Концептуальная модель uml
- •Строительные блоки uml
- •Правила языка uml
- •Общие механизмы языка uml
- •Архитектура
- •Жизненный цикл разработки по
- •Глава 3. Здравствуй, мир !
- •Ключевые абстракции
- •Механизмы
- •Компоненты
- •Часть II. Основы структурного моделирования Глава 4. Классы
- •Введение
- •Термины и понятия
- •Атрибуты
- •Операции
- •Организация атрибутов и операций
- •Обязанности
- •Другие свойства
- •Типичные приемы моделирования Словарь системы
- •Распределение обязанностей в системе
- •Непрограммные сущности
- •Примитивные типы
- •Глава 5. Отношения
- •Введение
- •Термины и понятия
- •Зависимости
- •Обобщения
- •Ассоциации
- •Другие свойства
- •Типичные приемы моделирования Простые зависимости
- •Одиночное наследование
- •Структурные отношения
- •Глава 6. Общие механизмы
- •Введение
- •Термины и понятия
- •Примечания
- •Другие дополнения
- •Стереотипы
- •Помеченные значения
- •Ограничения
- •Стандартные элементы
- •Типичные приемы моделирования Комментарии
- •Новые строительные блоки
- •Новые свойства
- •Новая семантика
- •Глава 7. Диаграммы
- •Введение
- •Термины и понятия
- •Структурные диаграммы
- •Диаграммы поведения
- •Типичные приемы моделирования
- •Различные уровни абстракции
- •Сложные представления
- •Глава 8. Диаграммы классов
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Типичные примеры применения
- •Типичные приемы моделирования Простые кооперации
- •Логическая схема базы данных
- •Прямое и обратное проектирование
- •Часть III. Изучение структурного моделирования Глава 9. Углубленное изучение классов
- •Введение
- •Термины и понятия
- •Классификаторы
- •Видимость
- •Область действия
- •Абстрактные, корневые, листовые и полиморфные элементы
- •Кратность
- •Атрибуты
- •Операции
- •Шаблоны классов
- •Стандартные элементы
- •Типичные приемы моделирования Семантика класса
- •Глава 10. Углубленное изучение отношений
- •Введение
- •Термины и понятия
- •Зависимости
- •Обобщения
- •Ассоциации
- •Реализация
- •Типичные приемы моделирования Сети отношений
- •Глава 11. Интерфейсы, типы и роли
- •Введение
- •Термины и понятия
- •Операции
- •Отношения
- •Как разобраться в интерфейсе
- •Типы и роли
- •Типичные приемы моделирования Стыковочные узлы системы
- •Статические и динамические типы
- •Глава 12. Пакеты
- •Введение
- •Термины и понятия
- •Элементы, принадлежащие пакету
- •Видимость
- •Импорт и экспорт
- •Обобщения
- •Стандартные элементы
- •Типичные приемы моделирования Группы элементов
- •Архитектурные виды
- •Глава 13. Экземпляры
- •Введение
- •Термины и понятия
- •Абстракции и экземпляры
- •Операции
- •Состояние
- •Другие особенности
- •Стандартные элементы
- •Типичные приемы моделирования Конкретные экземпляры
- •Экземпляры-прототипы
- •Глава 14. Диаграммы объектов
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Типичные примеры применения
- •Типичные приемы моделирования Объектные структуры
- •Прямое и обратное проектирование
- •Часть IV. Основы моделирования поведения Глава 15. Взаимодействия
- •Введение
- •Термины и понятия
- •Контекст
- •Объекты и роли
- •Сообщения
- •Последовательности
- •Представление
- •Типичные приемы моделирования Поток управления
- •Глава 16. Прецеденты
- •Введение
- •Термины и понятия
- •Прецеденты и актеры
- •Прецеденты и поток событий
- •Прецеденты и сценарии
- •Прецеденты и кооперации
- •Организация прецедентов
- •Другие возможности
- •Типичные приемы моделирования Поведение элемента
- •Глава 17. Диаграммы прецедентов
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Типичные примеры применения
- •Типичные приемы моделирования Контекст системы
- •Требования к системе
- •Прямое и обратное проектирование
- •Глава 18. Диаграммы взаимодействий
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Диаграммы последовательностей
- •Диаграммы кооперации
- •Семантическая эквивалентность
- •Типичные примеры применения
- •Типичные приемы моделирования Потоки управления во времени
- •Структура потоков управления
- •Прямое и обратное проектирование
- •Глава 19. Диаграммы деятельности
- •Введение
- •Термины и понятия
- •Общие свойства
- •Наполнение
- •Состояния действия и состояния деятельности
- •Переходы
- •Ветвление
- •Разделение и слияние
- •Дорожки
- •Траектория объекта
- •Типичные примеры применения
- •Типичные приемы моделирования Рабочий процесс
- •Операция
- •Прямое и обратное проектирование
- •Часть V. Более сложные аспекты поведения Глава 20. События и сигналы
- •Введение
- •Термины и понятия
- •Виды событий
- •Сигналы
- •События вызова
- •События времени и изменения
- •Посылка и получение событий
- •Типичные приемы моделирования Семейства сигналов
- •Исключения
- •Глава 21. Автоматы
- •Введение
- •Термины и понятия
- •Контекст
- •Состояния
- •Переходы
- •Более сложные аспекты состояний и переходов
- •Подсостояния
- •Типичные приемы моделирования Жизненный цикл объекта
- •Глава 22. Процессы и нити
- •Введение
- •Термины и понятия
- •Поток управления
- •Классы и события
- •Стандартные элементы
- •Коммуникация
- •Синхронизация
- •Представления с точки зрения процессов
- •Типичные приемы моделирования Несколько потоков управления
- •Межпроцессная коммуникация
- •Глава 23. Время и пространство
- •Введение
- •Термины и понятия
- •Местоположение
- •Типичные приемы моделирования Временные ограничения
- •Распределение объектов
- •Мигрирующие объекты
- •Глава 24. Диаграммы состояний
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Типичные примеры использования
- •Типичные приемы моделирования Реактивные объекты
- •Прямое и обратное проектирование
- •Часть VI. Архитектурное моделирование Глава 25. Компоненты
- •Введение
- •Термины и понятия
- •Компоненты и классы
- •Компоненты и интерфейсы
- •Заменяемость двоичного кода
- •Виды компонентов
- •Организация компонентов
- •Стандартные элементы
- •Типичные приемы моделирования Исполняемые программы и библиотеки
- •Интерфейс прикладного программирования
- •Исходный код
- •Глава 26. Развертывание
- •Введение
- •Термины и понятия
- •Узлы и компоненты
- •Организация узлов
- •Соединения
- •Типичные приемы моделирования Процессоры и устройства
- •Распределение компонентов
- •Глава 27. Кооперации
- •Введение
- •Термины и понятия
- •Структуры
- •Поведение
- •Организация коопераций
- •Типичные приемы моделирования Реализация прецедента
- •Реализация операции
- •Механизм
- •Глава 28. Образцы и каркасы
- •Введение
- •Термины и понятия
- •Образцы и архитектура
- •Механизмы
- •Каркасы
- •Типичные приемы моделирования Образцы проектирования
- •Архитектурные образцы
- •Глава 29. Диаграммы компонентов
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Типичные примеры применения
- •Типичные приемы моделирования Исходный код
- •Исполняемая версия
- •Физическая база данных
- •Адаптивные системы
- •Прямое и обратное проектирование
- •Глава 30. Диаграммы развертывания
- •Введение
- •Термины и понятия
- •Общие свойства
- •Содержание
- •Типичное применение
- •Типичные приемы моделирования Встроенная система
- •Клиент-серверная система
- •Полностью распределенная система
- •Прямое и обратное проектирование
- •Глава 31. Системы и модели
- •Введение
- •Термины и понятия
- •Системы и подсистемы
- •Модели и представления
- •Трассировка
- •Типичные приемы моделирования Архитектура системы
- •Системы систем
- •Часть VII. Подведем итоги Глава 32. Применение uml
- •Переход к uml
- •Рекомендуемая литература
- •Диаграммы
- •Приложение в Стандартные элементы uivil
- •Стереотипы
- •Помеченные значения
- •Ограничения
- •Приложение с. Рациональный Унифицированный Процесс
- •Характеристики процесса
- •Фазы и итерации
- •Итерации
- •Циклы разработки
- •Рабочие процессы
- •Артефакты
- •Другие артефакты
- •Глоссарий
Типичные приемы моделирования Жизненный цикл объекта
Автоматы чаще всего применяются для моделирования жизненного цикла объекта (см. главу 13), особенно если это экземпляр класса (см. главы 4 и 9), прецедент (см. главу 16) или система (см. главу 31) в целом. В то время как взаимодействия (см. главу 15) моделируют поведение сообщества объектов, работающих совместно, автоматы предназначены для моделирования поведения единичного объекта на протяжении времени его жизни. Примерами могут служить интерфейсы, контроллеры и устройства.
При моделировании жизненного цикла объекта особое внимание уделяется специфицированию следующих элементов: событий, на которые объект должен реагировать, реакций на такие события, а также влияния прошлого на поведение в текущий момент. Кроме того, необходимо решить, в каком порядке объект будет осмысленно реагировать на события, начиная с момента его создания и вплоть до уничтожения. Моделирование жизненного цикла объекта осуществляется следующим образом:
1. Выберите контекст для автомата, будь то класс, прецедент или система в целом. При этом:
- если контекстом является класс или прецедент, идентифицируйте соседние классы, включая предков, а также все классы, доступные из данного с помощью зависимостей или ассоциаций (такие соседи - кандидаты на роль целей для действий или на включение в сторожевые условия);
- если контекстом является система в целом, то следует сосредоточиться на какой-либо одной стороне ее поведения (теоретически каждый объект в системе может принимать участие в модели ее жизненного цикла, но за исключением простейших случаев такую полную модель практически невозможно воспринять).
2. Установите для объекта начальное и конечное состояния. Если предполагается его использование в остальной части модели, возможно, стоит сформулировать пред- и постусловия (см. главу 10) для начального и конечного состояний.
3. Решите, на какие события объект может реагировать. Если интерфейсы (см. главу 11) объекта уже специфицированы, то в них и содержится описание таких событий; в противном случае необходимо рассмотреть, какие объекты могут взаимодействовать с объектом в данном контексте и какие события они могут посылать.
4. Изобразите все состояния верхнего уровня, от начального до конечного, в которых может находиться объект. Соедините эти состояния переходами, инициируемыми теми или иными событиями, а затем свяжите с этими переходами действия.
Идентифицируйте все действия при входе и выходе (особенно если обнаружится, что выражаемая с их помощью идиома используется в автомате).
6. Если это необходимо, разверните выявленные к этому моменту состояния, применяя аппарат подсостояний.
7. Убедитесь, что все события, встречающиеся в автомате, соответствуют тем, которые ожидает интерфейс объекта. Следует убедиться также в том, что вес события, ожидаемые интерфейсом объекта, нашли отражение в автомате. Наконец, нужно выявить те места, где имеет смысл игнорировать события
8. Убедитесь, что все действия, упомянутые в автомате, поддержаны отношениями, методами и операциями объемлющего объекта.
9. Следуя переходам автомата вручную или с помощью инструментальных средств, проверьте ожидаемые последовательности событий и реакций на них. Особое внимание нужно обратить на недостижимые состояния и состояния, в которых автомат может «застрять» (то есть тупиковые).
10. Изменив по результатам проверки структуру автомата, снова проверьте его на ожидаемые последовательности событий, чтобы убедиться, что семантика объекта не изменилась.
В качестве примера на рис. 21.8 показан автомат для контроллера в домашней системе безопасности, который следит за различными датчиками, расставленными по периметру дома.
В жизненном цикле такого контроллера есть четыре основных состояния: Инициализация (контроллер входит в рабочий режим), Ожидание (контроллер готов к работе и ожидает тревожных сигналов или команд от пользователя), Команда
(контроллер занят отработкой команды пользователя) и Активен (контроллер обрабатывает сигнал тревоги). Когда объект контроллера создается впервые, он сначала переходит в состояние Инициализация, а затем без каких-либо условий - в состояние Ожидание. Подробно эти два состояния не показаны; изображен лишь переход в себя по событию времени для состояния Ожидание. Такого рода событие времени типично для встроенных систем, в которых часто присутствует таймер, предназначенный для периодического запуска процедуры самодиагностики.
При получении события alarm (тревога), которое имеет параметр s, идентифицирующий сработавший датчик, управление переходит из состояния Ожидание в состояние Активен. При вхождении в состояние Активен выполняется действие при входе setAlarm и управление попадает в состояние Проверка (где проверяется, не ложная ли тревога), затем в состояние Звонок (в компанию, установившую сигнализацию для регистрации тревоги) и, наконец, в состояние Жду. Из состояний Жду и Активен контроллер может выйти только после сброса сигнала тревоги (действие clear) или получения от пользователя события attention, возможно, предшествующего выдаче команды.
Обратите внимание на отсутствие конечного состояния. Это тоже типично для встроенных систем, которые должны работать непрерывно.
Советы
При моделировании автоматов в UML помните, что каждый автомат представляет динамические аспекты поведения отдельного объекта - как правило, экземпляра класса, прецедента или системы в целом. Хорошо структурированный автомат обладает следующими свойствами:
он прост и не содержит избыточных состояний или переходов;
имеет ясный контекст и потому может получить доступ ко всем объектам, видимым из объемлющего объекта (такие соседи должны использоваться только при необходимости обеспечить поведение, специфицированное автоматом);
эффективен и реализует моделируемое поведение с оптимальным балансом времени и ресурсов в соответствии с требованиями, которые накладывают выполняемые им действия;
легок для понимания, в частности потому, что имена всех состояний и переходов взяты из словаря системы (см. главу 4);
его глубина вложенности не слишком велика (ограничивается одним-двумя уровнями для обработки наиболее сложных аспектов поведения);
использует параллельные состояния в умеренном количестве, поскольку активные объекты зачастую подходят лучше.
Изображая автомат в UML, руководствуйтесь следующими принципами:
избегайте пересекающихся переходов;
раскрывайте составные состояния в месте расположения только в том случае, если это делает диаграмму более понятной.