Используйте наследование правильно
Льготное наследование
Льготное наследование является схемой, в которой родитель представляет коллекцию полезных компонентов, предназначенных для использования его потомками.
Определение: Льготное наследование Льготное наследование применяется, если A существует единственно в целях обеспечения множества логически связанных компонентов, дающих преимущества его потомкам, таким как B. Двумя общими вариантами являются: |
Примером льготного наследования может служить класс EXCEPTIONS, класс, предоставляющий множество утилит, обеспечивающих доступ к механизму обработки исключений.
Иногда, как в примерах, которые появятся чуть позже, при льготном наследовании используется только один вариант - константы или абстрактная машина, но в других случаях, как для класса EXCEPTIONS, родительский класс предоставляет как константы (такие как коды исключений Incorrect_inspect_value ), так и подпрограммы (такие как trigger для возбуждения исключения разработчика). Так как при нашем обсуждении категории наследования рассматриваются как непересекающиеся, то льготное наследование с двумя пересекающимися вариантами рассматривается как одна категория.
При наследовании констант как A, так и B являются эффективными. При наследовании абстрактной машины ситуация более гибкая, но B должно быть, по меньшей мере, столь же эффективно как и A.
В деталях льготное наследование еще будет обсуждаться в данной лекции.
Использование наследования с отложенными и эффективными классами
В следующей таблице обобщены правила, определяющие для каждой категории, должны ли родитель и его потомок быть эффективными или отложенными классами. "Вариация" покрывает случаи вариации типа и функциональной вариации. Элементы, помеченные символом *, появляются более чем в одном входе.
Потомок | Родитель | |
---|---|---|
Отложенный | Эффективный | |
Отложенный |
Константы* Ограничение* Структура* Тип* Потеря эффективизации* Вариация* Вид |
Расширение* Потеря эффективизации* |
Эффективный |
Константы* Конкретизация Структура* Тип* |
Константы* Расширение* Реализация Ограничение* Вариация* |