- •Часть 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
- •Стереотипы
- •Помеченные значения
- •Ограничения
- •Приложение с. Рациональный Унифицированный Процесс
- •Характеристики процесса
- •Фазы и итерации
- •Итерации
- •Циклы разработки
- •Рабочие процессы
- •Артефакты
- •Другие артефакты
- •Глоссарий
Образцы и архитектура
Занимаясь разработкой архитектуры новой системы или развитием существующей, вы в любом случае никогда не начинаете с нуля (см. главу 2). Напротив, прежний опыт и принятые соглашения наводят вас на мысль применить типичные способы для решения типичных проблем. Например, при построении системы, активно взаимодействующей с пользователем, вы можете прибегнуть к испытанному подходу «модель-вид-контроллер, который позволяет четко отделить объекта (модель) от их представления (вида) и от агентов, обеспечивающих синхронизацию между тем и другим (контроллеров). Аналогично при создании системы для дешифровки доказала свою полезность архитектура на основе «классной доски» (blackboard), хорошо приспособленная для решения сложных задач методом проб и ошибок.
То и другое является примером образцов, или паттернов, - типичных решений для типичных задач в данном контексте. Любая хорошо структурированная систем?
изобилует образцами на разных уровнях абстракции. Образцы проектирования описывают структуру и поведение сообщества классов, архитектурные образцы -структуру и поведение системы в целом.
Образцы входят в UML просто потому, что являются важной составляющей словаря разработчика. Явно выделив образцы в системе, вы сделаете ее более понятной и простой для развития и сопровождения. Например, если вам дадут неизвестный исходный текст и попросят его модифицировать, вы будете долго недоумевать, пытаясь понять, как его части связаны друг с другом. Вместе с тем, если вам дадут тот же текст и скажут, что перечисленные классы взаимодействуют на основе механизма публикации-подписки, вы получите гораздо более ясное предоставление о том, как все работает. Та же идея применима к системе в целом. Одна ^лишь фраза «система организована как набор конвейеров и фильтров» очень много говорит об архитектуре системы, а понять это, просто глядя на код классов, было бы куда сложнее.
Образцы помогают при визуализации, специфицировании, конструировании и документировании артефактов программной системы. Можно заниматься прямым проектированием системы, выбрав подходящий набор образцов и применяя их к абстракциям, специфичным для данной предметной области, - или же обратным проектированием, выявляя содержащиеся в системе образцы (хотя вряд ли этот процесс можно назвать очень продуктивным). Скорее наоборот, при поставке системы разумно было бы описать характерные для нее образцы, чтобы помочь тому, кто в дальнейшем захочет повторно использовать или модифицировать ваш код. На практике интерес представляют два вида образцов: образцы проектирования и каркасы. В UML есть средства для моделирования и тех, и других. При моделировании любого образца вы обнаружите, что он, как правило, оказывается автономным в контексте некоторого большего пакета, если не считать отношений зависимости, связывающих его с остальными частями системы.
Механизмы
Механизм - это просто другое название образца проектирования, когда он применяется к сообществу классов. Например, типичная проблема проектирования, с который сталкивается программист, пишущий на языке Java, - как видоизменить класс, который умеет отвечать на некоторое множество событий, таким образом, чтобы он отвечал на события иного рода, не трогая кода исходного класса. Типичным решением этой проблемы является адаптер (Adaptor pattern) - структурный образец проектирования для преобразования одного интерфейса в другой. Этот образец является настолько общим, что имеет смысл дать ему название, а затем использовать в моделях всякий раз, как возникает аналогичная проблема. При моделировании механизмы проявляют себя двояко. Во-первых, как показано на рис. 28.1, механизм просто именует множество абстракций, которые совместно работают для обеспечения типичного поведения, Представляющего некий интерес. Такие механизмы моделируются как простые Кооперации (см. главу 27), поскольку являются всего лишь именами для сообщества классов. Раскрыв такую кооперацию, можно увидеть ее структурные аспекты (обычно изображаемые в виде диаграмм классов) и поведенческие (обычно изображаемые в виде диаграмм взаимодействия). Кооперации подобного типа захватывают разные абстракции системы; весьма вероятно, что некоторый класс будет членом нескольких коопераций.
Во-вторых, как показано на рис. 28.2, механизм именует шаблон для множества совместно работающих абстракций. Такие механизмы моделируются в виде параметризованных коопераций, которые в UML изображаются аналогично шаблонам классов (см. главу 9). Раскройте такую кооперацию - и вы увидите ее структурные и поведенческие аспекты. Сверните ее, и вы увидите, как образец применяется к вашей системе путем связывания частей кооперации с существующими в системе абстракциями. При моделировании механизма в виде параметризованной кооперации вы описываете те элементы управления и стыковки, с помощью которых можно адаптировать шаблон, меняя его параметры. Подобные кооперации мoгyт появляться в разных частях системы и связываться с различными абстракциями В приведенном примере классы Предмет и Наблюдатель образца связаны с конкретными классами ОчередьЗадач и Ползунок соответственно.
Примечание Решение о том, моделировать ли механизм с помощью простой или параметризованной кооперации, не вызывает затруднений. Если нужно лишь поименовать сообщество совместно работающих классов в системе, применяйте простую кооперацию. Если же нужно абстрагировать существенные структурные и поведенческие аспекты механизма способом, не зависящим от конкретной предметной области, а затем связать их с абстракциями в данном контексте, пользуйтесь параметризованной кооперацией.