- •Часть 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
- •Стереотипы
- •Помеченные значения
- •Ограничения
- •Приложение с. Рациональный Унифицированный Процесс
- •Характеристики процесса
- •Фазы и итерации
- •Итерации
- •Циклы разработки
- •Рабочие процессы
- •Артефакты
- •Другие артефакты
- •Глоссарий
Шаблоны классов
Шаблоном называется параметризованный элемент. В таких языках программирования, как C++ или Ada, предусмотрена возможность создавать шаблоны классов, определяющие семейства классов (можно задавать также шаблоны функций, определяющие семейства функций). Параметрами шаблона могут быть классы, объекты или значения. Шаблон нельзя использовать непосредственно; сначала его нужно инстанцировать, то есть конкретизировать. Процесс инстанцирования - это связывание формальных параметров шаблона с фактическими. В результате из шаблона класса получается конкретный класс, с которым можно работать как с любым другим.
Чаще всего шаблоны классов используют при описании контейнеров, чтобы затем инстанцировать их для хранения конкретных элементов, - такой подход делает их безопасными по отношению к типам. Например, в нижеприведенном фрагменте кода на языке C++ объявляется параметризованный класс Map (Карта).
template<class Item, class Value, int Buckets>
class Map {
public:
virtual Boolean bind (const Item&, const Values:);
virtual Boolean isBound (const Item&) const;
};
Затем можно инстанцировать этот шаблон для отображения объектов класса Customer (Клиент) на объекты класса Order (Заказ):
m : Map<Customer, Order, 3>;
Язык UML также позволяет моделировать шаблоны классов (базовые свойства классов обсуждаются в главе 4). Как видно из рис. 9.7, такой класс изображается в точности как обычный, но в верхнем правом углу его пиктограммы находится дополнительная ячейка, нарисованная пунктиром; в ней перечислены параметры
шаблона.
На данном рисунке показано также, что моделировать инстанцирование шаблона класса можно двумя способами. Во-первых - неявно, для чего требуется объявить класс, имя которого обеспечивает связывание. Во-вторых, можно явным
образом определить зависимость (см. главы 5 и 10) со стереотипом bind (см. главу 6), показывающую, что источник инстанцирует целевой шаблон с заданными фактическими параметрами.
Стандартные элементы
Все механизмы расширения UML (см. главу 6) применимы к классам. Чаще всего для расширения свойств класса (например, для специфицирования его версии) используются помеченные значения, а для определения новых видов компонентов (специфичных для данной модели) - стереотипы.
В UML определены четыре стандартных стереотипа, применимые к классам:
metaclass - определяет классификатор, все объекты которого являются классами;
powertype - определяет классификатор, все объекты которого являются потомками данного родителя;
stereotype - определяет, что данный классификатор является стереотипом, который можно применить к другим элементам;
utility - определяет класс, атрибуты и операции которого находятся в области действия всех классов.
Примечание В следующих главах книги рассматривается ряд других стандартных стереотипов, применимых к классам: interface, type, implementationClass (см. главу 11), actor (см. главу 16), exception, signal (см. главу 20), process u thread.
Типичные приемы моделирования Семантика класса
Чаще всего классы используют для моделирования абстракций, извлеченных из решаемой проблемы или технологии, применяемой для ее решения (см. главу 4). Следующим шагом после того, как вы идентифицировали эти абстракции, будет определение их семантики.
Язык UML предоставляет в ваше распоряжение широчайший спектр возможностей моделирования (см. главу 1), начиная от неформальных (обязанности) и заканчивая сугубо формальными (OCL - язык объектных ограничений). Имея такой богатый выбор, вы сами можете решить, какой уровень детализации необходим для выражения модели. Если создаваемая модель предназначена для общения с конечными пользователями или экспертами в предметной области, то лучше сделать ее менее формальной. Когда в вашу задачу входит двусторонняя поддержка проектирования, то есть переход от модели к коду и обратно, стоит прибегнуть к большей формализации. Если же вам требуется приводить математически строгие суждения модели и доказывать ее корректность, формализуйте ее настолько, насколько это возможно.
Примечание Менее формальная модель - не обязательно менее аккуратная. Скорее, это значит, что она менее полна и детализирована. Boобще, целесообразно придерживаться середины между крайней степенью формализма и неформальным подходом. Необходимо включать достаточно деталей, чтобы можно было конструировать исполняемые артефакты, но в то же время скрывать некоторые элементы, чтобы не запутать читателя.
Для моделирования семантики класса можно воспользоваться любыми из перечисленных ниже возможностей (они расположены в порядке возрастания формализации):
1. Определите обязанности класса. Обязанностью называется контракт или обязательство, «подписываемое» типом или классом (см. главу 4). Изображается оно в виде присоединенного к классу примечания (со стереотипом responsibility) или дополнительного раздела в его пиктограмме.
2. Опишите семантику класса в целом с помощью структурированного текста, который изображается в виде примечания (со стереотипом semantics), присоединенного к классу.
3. Определите тело каждого метода (см. главу 3) с помощью структурированного текста или языка программирования и поместите определение в примечание, присоединенное к операции отношением зависимости.
4. Специфицируйте пред- и постусловия каждой операции (см. главу 19), а также инварианты класса в целом с помощью структурированного текста. Эти элементы изображаются в виде примечаний (со стереотипами precondition, postcondition и invariant), присоединенных к операции или классу отношениями зависимости.
5. Определите автомат класса. Автомат - это алгоритм поведения, описывающий последовательность состояний, через которые проходит объект на протяжении своего жизненного цикла, реагируя на различные события, а также сами реакции на эти события (см. главу 21).
6. Специфицируйте представляющие класс кооперации. Кооперацией называется совокупность ролей и других элементов, работающих совместно для обеспечения некоторого кооперативного поведения, более значимого, чем сумма всех его составляющих (см. главу 27). Поскольку у кооперации имеются структурная и динамическая составляющие, вы можете с их помошью специфицировать все аспекты семантики класса.
7. Определите пред- и постусловия каждой операции и инварианты класса в целом с помощью такого формализованного языка, как OCL (язык OCL обсуждается в книге "The Unified Modeling Language Reference Manual").
На практике для моделирования различных абстракций системы используется некоторая комбинация вышеописанных методов. (Для моделирования семантики операций можно применять также диаграммы деятельности, см. главу 19.)
Примечание Описывая семантику класса, помните, что ваша главная цель -определить, что и как делает класс. Семантика того, что делает класс, соответствует его открытому, внешнему представлению, а того, как он это делает, - закрытому, внутреннему. Часто используют комбинацию этих двух видов, акцентируя внимание на внешнем представлении для клиентов класса и на внутреннем - для тех, кто его реализует.
Советы
Моделируя классификаторы в языке UML, помните, что в вашем распоряжении имеется множество строительных блоков - интерфейсы, классы, компоненты и т.д. Из них вы должны выбрать тот, который наилучшим образом соответствует вашей абстракции. Хорошо структурированный классификатор обладает следующими свойствами:
наделен как структурными, так и поведенческими аспектами;
внутренне согласован и слабо связан с другими классификаторами;
раскрывает только те особенности, которые необходимы для использующих класс клиентов, и скрывает остальные;
его семантика и назначение не допускают неоднозначного толкования;
не настолько формализован, чтобы лишить всякой свободы тех, кто будет его реализовывать;
специфицирован в достаточной степени, чтобы исключить неоднозначное
толкование его назначения.
Изображая классификатор в UML, примите во внимание следующие рекомендации
показывайте только те его свойства, которые необходимы для понимания абстракции в контексте класса;
используйте такие стереотипы, которые наилучшим образом отражают назначение классификатора.