Книга: Rational Rose 2000 и UML Визуальное моделирование
Наследование и агрегация
Наследование и агрегация
Наследование часто используется не по назначению. Существует мнение, что «чем больше я буду его использовать, тем лучше станет мой код». Это заблуждение. В действительности неправильное применение наследования может привести к проблемам. Например, студент может учиться очно или заочно. Создадим суперкласс студент (Student) и два подкласса — студент очного отделения (FulltimeStudent) и студент заочного отделения (ParttimeStudent). Во время работы такой структуры наверняка возникнут определенные проблемы. Что случится, если:
? студент очного отделения решит перейти на заочное? Это значит, что объекту придется сменить класс;
? будет добавлена еще одна размерность (например, студент, получающий стипендию и не получающий стипендию)? Здесь понадобятся новые подклассы для представления информации о стипендии, а также множественное наследование для поддержки всех комбинаций (студент очного отделения, получающий стипендию, студент заочного отделения, получающий стипендию и т. д.).
Наследование должно служить для отделения общности от специфики. Агрегация — для отражения комбинированных отношений. Часто оба типа отношений используются вместе. Класс студент имеет классификацию (агрегацию), которая, в свою очередь, делится на классы студент-очник и студент-заочник (наследование) — см. рис 8.5.
Рис. 8.5. Наследование в сравнении с агрегацией
- 6. Агрегация
- У14.4 Наследование без классов
- Наследование
- Лекция 9. Наследование и замыкание
- Лекция 14. Введение в наследование
- Лекция 15. Множественное наследование
- Дублируемое наследование
- ГЛАВА 11 Наследование
- Единичное наследование (single inheritance)
- Множественное наследование (Multiple inheritance)
- Дублируемое наследование (Repeated inheritance)
- У3.6 Управление конфигурацией и наследование