- •Часть 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
 - •Стереотипы
 - •Помеченные значения
 - •Ограничения
 - •Приложение с. Рациональный Унифицированный Процесс
 - •Характеристики процесса
 - •Фазы и итерации
 - •Итерации
 - •Циклы разработки
 - •Рабочие процессы
 - •Артефакты
 - •Другие артефакты
 - •Глоссарий
 
Другие свойства
В процессе разработки абстракций вам чаще всего придется использовать простые зависимости и обобщения, а также ассоциации с именами, кратностями и ролями. В большинстве случаев базовых форм этих трех отношений вам будет вполне достаточно для передачи важнейших черт семантики моделируемых взаимосвязей. Но иногда все же возникает необходимость визуализировать и специфицировать другие особенности, такие как композитное агрегирование, навигация, дискриминанты, классы-ассоциации, а также специальные виды зависимостей и обобщений. Эти и многие другие особенности можно выразить на языке UML, однако предстоит воспользоваться концепциями более высокого уровня сложности (см. главу 10). Зависимости, обобщения и ассоциации являются статическими сущностями, определенными на уровне классов. В UML эти отношения обычно визуализируют в виде диаграмм классов (см. главу 8).
Приступая к моделированию на уровне объектов - особенно при работе с динамическими кооперациями объектов - вы встретите еще два вида отношений:
связи (экземпляры ассоциаций, представляющие соединения между объектами, по которым могут передаваться сообщения, см. главу 15) и переходы (связи между состояниями в автомате, см. главу 21).
Типичные приемы моделирования Простые зависимости
Самым распространенным видом отношения зависимости является соединение между классами, когда один класс использует другой в качестве параметра операции.
Для моделирования такого отношения изобразите зависимость, направленную от класса с операцией к классу, используемому в качестве ее параметра.
Например, на рис. 5.8 показано несколько классов, взятых из системы, управляющей распределением студентов и преподавателей на университетских курсах. Зависимость направлена от класса РасписаниеЗанятий к классу Курс, поскольку последний используется в операциях add и remove класса РасписаниеЗанятий. Если вы приводите полную сигнатуру операции, как на этом рисунке, то зависимости показывать не обязательно, поскольку имя класса уже явно присутствует в сигнатуре. Иногда продемонстрировать зависимость все же имеет смысл, особенно если сигнатуры операций скрыты или в модели показаны другие отношения, в которых участвует используемый класс. На рис. 5.8 представлена еще одна зависимость, не предполагающая участия Классов, а скорее моделирующая обычную для языка C++ идиому. Стрелка, направленная от класса Итератор, свидетельствует о том, что он использует класс
РасписаниеЗанятий, который, однако, об этом ничего не «знает». Зависимость помечена стереотипом friend, который говорит, что она представляет отношение дружественности, как в языке C++. (Другие стереотипы отношений рассматриваются в главе 10.)
Одиночное наследование
Моделируя словарь системы, вам часто придется работать с классами, похожими на другие но структуре и поведению. В принципе их можно моделировать как различные, независимые друг от друга абстракции. Но лучше выделить одинаковые свойства и сформировать на их основе общие классы, которым наследуют специализированные.
Моделирование отношений наследования осуществляется в таком порядке:
1. Найдите атрибуты, операции и обязанности, общие для двух или более классов из данной совокупности.
2. Вынесите эти элементы в некоторый общий класс (если надо, создайте новый, но следите, чтобы уровней не оказалось слишком много).
3. Отметьте в модели, что более специализированные классы наследуют более общим, включив отношение обобщения, направленное от каждого потомка к его родителю.
На рис. 5.9 вы видите несколько классов, взятых из приложения по организации работы трейдеров. Здесь показано отношение обобщения, которое от четырех классов - РасчетныйСчет, Акция, Облигация и Собственность - направлено к более общему классу ЦенныеБумаги. Он является родителем, а остальные -его потомками. Каждый специализированный класс - это частный случай класса ЦенныеБумаги. Обратите внимание, что в классе ЦенныеБумаги есть две операции - presentValue (текущаяСтоимость) и history (история). Это значит, что все его потомки наследуют данные операции, а заодно и все остальные атрибуты и операции родителя, которые могут не изображаться на рисунке.
Имена ЦенныеБумаги и presentValue на рисунке
намеренно выделены курсивом. Дело в
том, что, создавая иерархию подобного
рода, часто приходится сталкиваться с
нелистовыми классами, которые неполны
или для которых не 
может
существовать объектов. Такие классы
называются абстрактными (см. главу
9), и на языке UML их названия
пишутся курсивом, как в приведенном
примере. Данное соглашение применимо
и к операциям (например, presentValue/; оно
означает, что у операции есть сигнатура,
но в других отношениях она неполна и
требует реализации на более низком
уровне абстракции (см. главу 9). В нашем
примере все четыре непосредственных
потомка класса ЦенныеБумаги конкретны
(то есть не абстрактны) и реализуют
операцию presentValue.
Иерархия «обобщение/специализация» не обязательно ограничивается двумя уровнями. Как видно из рисунка, вполне допустимо существование более двух уровней наследования. АкцияСМалымКапиталом и АкцияСБолыпимКапиталом -потомки класса Акция, который, в свою очередь, является потомком класса ЦенныеБумаги. Последний является базовым классом, поскольку не имеет родителей. Классы же АкцияСМалымКапиталом и АкцияСБольшимКапиталом - листовые, поскольку не имеют потомков. Наконец, класс Акция имеет как родителей, так и потомков, а следовательно, не является ни листовым, ни базовым.
Хотя на данном рисунке это не продемонстрировано, можно создавать классы, имеющие более одного родителя, В таком случае речь идет о множественном наследовании, которое означает, что данный класс перенимает атрибуты, операции и ассоциации всех своих родителей (см. главу 10).
Разумеется, в графе наследования не допускаются циклы - класс не может быть собственным родителем.
