- •5. Углубленный анализ
- •5. 1. Моделирование классов
- •5.1.1.Выявление классов
- •Подход на основе использования именных групп
- •Подход на основе использования общих шаблонов для классов
- •Подход на основе использования прецедентов
- •Подход crc
- •Комплексный подход
- •5.1.2. Некоторые правила выявления классов
- •5.1.3. Спецификация классов
- •5.2. Моделирование отношений между классами
- •5.2.1.Моделирование ассоциаций
- •5.2.2. Моделирование отношений агрегации и композиции
- •5.2.3. Моделирование отношений обобщения
- •5.3. Спецификация поведения
- •5.4. Моделирование открытых интерфейсов
- •5.5. Углубленное моделирование классов
- •5.6. Иерархия классов
- •5.6.1.Пакеты
- •5.6.2. Подход bce
- •5.6.3. Углубленное моделирование обобщения и наследования
- •Наследование интерфейса
- •Наследование реализации
- •5.6.4. Углубленное моделирование агрегации и делегирования
5.2. Моделирование отношений между классами
5.2.1.Моделирование ассоциаций
Ассоциации служат объединению объектов в системе. Они способствуют взаимодействию между объектами.
Нахождение основных ассоциаций осуществляется в процессе выявления классов. При определении классов аналитик принимает решение об атрибутах классов, и некоторые из этих атрибутов являются ассоциациями с другими классами. Атрибуты могут относиться к элементарным типам данных либо могут вводиться в качестве других классов, устанавливая, таким образом, отношения с другими классами. По существу, любой атрибут, относящийся к неэлементарным типам данных, должен моделироваться как ассоциация (или агрегация) по классу, представляющему этот тип данных.
Спецификация ассоциаций подразумевает выполнение следующих действий:
Присваивание имен ассоциациям.
Присваивание имен ассоциативным ролям.
Установление кратности ассоциации
Правила именования ассоциаций должны соответствовать соглашениям по именованию атрибутов - имена ассоциаций состоят из строчных букв, отдельные слова в имени ассоциации разделяются подчеркиванием. Если два класса связаны только одним ассоциативным отношением, задавать имя ассоциации и ассоциативные ролевые имена между этими классами необязательно.
Кратность должна быть задана для обоих концов (ролей) ассоциации. Если вопрос кратности на этом этапе не ясен, нижнюю и верхнюю границы кратности можно опустить.
5.2.2. Моделирование отношений агрегации и композиции
Поиск агрегаций ведется параллельно с поиском ассоциаций. При объяснении отношения агрегации используют фразы “включает” (“has”) и “является частью” (“is part of”). Например, Книга “включает” Главу, Глава “является частью” Книги.
Язык UML обеспечивает только ограниченную поддержку агрегации. Сильная форма агрегации называется в UML композицией. В композиции составной объект может физически содержать компонентные объекты. Компонентный объект может принадлежать только одному составному объекту.
5.2.3. Моделирование отношений обобщения
Общие характеристики (атрибуты и операции) одного или более классов можно погрузить в более общий класс. Это явление известно как обобщение. Отношение обобщения соединяет базовый класс (суперкласс) с более специализированными классами (производными классами). Обобщение делает возможным наследование (многократное использование) характеристик суперкласса производным классом.
Помимо наследования обобщение преследует еще две цели:
Использование подстановки.
Использование полиморфизма.
В соответствии с принципом подстановки объект подкласса может быть присвоен в качестве значения переменной суперкласса. Например, если переменная объявлена с целью хранения объекта Fruit (Фрукт), то объект Apple (Яблоко) является допустимым значением.
В соответствии с принципом полиморфизма одна и та же операция может иметь разные реализации в разных классах. Вызывающий объект может вызвать операцию, не зная и не заботясь о том, какая из реализаций операции выполнится. Вызываемый объект знает, какому классу он принадлежит и выполняет свою собственную реализацию.
Полиморфизм работает лучше в тех ситуациях, когда он используется вместе с наследованием. Зачастую полиморфная операция в суперклассе объявляется, а реализация для нее в этом классе отсутствует (абстрактный класс). Это значит, что операция получила сигнатуру (имя и список формальных аргументов), а реализация должна быть обеспечена в каждом из производных классов.
