<<
>>

Природа наследования

Представим себе класс ВладелецКнижногоМагазина. Мы вправе ожидать от объектов этого класса вполне определенного поведения не потому, что он владелец именно книжного магазина, а потому, что он владелец магазина.
Например, он попросит вас оплатить заказ, а затем даст вам квитанцию. Эти действия не являются уникальными для владельца книжного магазина; они общие для владельцев обувных, продуктовых, галантерейных, винных и других магазинов. Следовательно, мы как бы связали определенное поведение с общей категорией «владельцы магазинов» ВладелецМагазина, и поскольку владельцы книжных магазинов являются частным случаем категории ВладелецМагазина, поведение для данного подкласса определяется автоматически.

В языках программирования наследование означает, что поведение и элементы данных, связанные с производным классом, всегда являются расширением характеристик, связанных с родительскими классами. Подкласс имеет все характеристики родительского класса и, кроме того, дополнительные характеристики.

С другой стороны, поскольку производный класс считается более специализированной (или ограниченной) формой родительского класса, он также, в определенном смысле, будет сужением родительского класса. Это диалектическое противоречие между наследованием как расширением и наследованием как сужением является источником большой силы, присущей данному отношению, и в то же время вызывает некоторую путаницу.

Природа наследования

451

Наследование всегда транзитивно, следовательно, класс может наследовать черты суперклассов, отстоящих от него на несколько уровней. Например, если Сеттер — это подкласс класса ОхотничьиСобаки, считающегося подклассом класса Собаки, а собаки являются подклассом класса Млекопитающие, то класс Сеттер наследует характеристики и охотничьих собак, и собак вообще, и всех млекопитающих Млекопитающие.

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------------------------------

Отношение R называется транзитивным, если для любых a, Ь, c из aRb и bRc следует aRc.

Усложняющим моментом в механизме наследования является то обстоятельство, что подклассы могут переопределять поведение, унаследованное от родительского класса. Например, класс Сеттер переопределяет операцию отображатьВнешний- Вид( ), унаследованную от класса млекопитающих, поскольку внешний облик сеттеров очень специфичен. В данном разделе мы коротко затронем лишь некоторые аспекты переопределения.

Существует эмпирическое правило для проверки того, связаны ли два понятия отношением наследования. Оно называется проверкой «is-a» («является»). Тест «является» говорит, что если понятие A должно быть связано наследованием с понятием B, попробуйте произнести «А является В» (по-английски: «A(n) A isa(n) B»). Если ваш слух эта фраза не коробит, тогда наследование, скорее всего, уместно в данной ситуации. К примеру, вполне разумны следующие высказывания:

? Птица является Животным (A Bird is an Animal).

? Кот является Млекопитающим (A Cat is a Mammal).

? Яблочный Пирог является Пирогом (An Apple Pie is a Pie).

? Текстовое Окно является Окном (A Text Window is a Window).

? Шар является Графическим Объектом (A Ball is a Graphical Object).

? Целый Массив является Массивом (An Integer Array is an Array).

С другой стороны, следующие высказывания по той или иной причине кажутся странными и наследование, наверное, здесь не применимо:

? Птица является Млекопитающим.

? Яблочный Пирог является Яблоком.

? Двигатель является Автомобилем.

? Текстовое Окно является Кнопкой.

? Целый Массив является Целой Величиной.

Конечно, бывают ситуации, когда наследование применимо, даже если тест «является» не пройден. Тем не менее в большинстве случаев он считается хорошим индикатором целесообразности наследования.

Главными причинами применения наследования полагают:

? Наследование как средство повторного использования программного кода. Поскольку класс-потомок может наследовать поведение класса-родителя, исчезает

452 Глава 16. Объектно-ориентированное и аспектно-ориентированное программирование

необходимость заново писать программный код для потомка. Это позволяет существенно сократить количество кода, требуемое для разработки новой идеи.

? Наследование как средство повторного использования идеи (концепции, понятия). Это происходит, когда класс-потомок переопределяет поведение, доставшееся ему от родителя. Хотя код реализации у потомка отличается от родительского, но идея какого-то метода у них общая. Следовательно, опять экономятся усилия, необходимые для новой разработки.

<< | >>

Еще по теме Природа наследования:

  1. § 40 Наследование в боковой линии. – В каких случаях женщина пользуется правом представления. – Наследование в родовом имении сообразно происхождению имения. – Наследование в благоприобретенном имении. – Предпочтение полнородных неполнородным (ст. 1133–1140).
  2. § 43 Особые порядки наследства. – Наследование и раздел у крестьян по обычаю. – Закон наследования в прибалтийских губерниях.
  3. § 38 Когда открывается наследство по русскому закону. – Ограничения наследственного права. – Имущество, составляющее предмет наследования. – Отношение наследования по закону к завещанию. – Кто может быть наследником?
  4. § 35 Поводы к открытию наследства. – Имущества, составляющие наследство. – Способные, неспособные и недостойные к наследованию. – Призвание к наследованию и приобретение наследства. – Договоры о наследстве и предварительный отказ от наследства. – Прямой и непрямой наследник. – Праздное и выморочное наследство.
  5. § 32 Общие понятия о наследстве и о наследственном преемстве. – Отношение завещания к законному наследованию. – Римское господство завещательного начала и отрицание его в германском праве. – Историческое развитие наследственного порядка в римском праве. – Допущение к наследованию кровных родственников.
  6. § 41 Наследование родителей. – Наследование супругов. – Выдел указной части. – Особливые преимущества вдового супруга при выделе. – Выдел из имения свекра и тестя. – Свойство права на иск о выделе и переход сего права к наследникам. – Отличия в Черниговской и Полтавской губерниях. – Особливые постановления по разным ведомствам (ст. 1141–1147).
  7. § 34 Смешанные системы в новейших законодательствах. – Происходящее от различия сих систем различие в порядке раздела и в допущении права представления. – Ограничение наследственного права пределами родства. – Ограничение женщин. – Разделение наследства между родами. – Возвращение подаренного родителями. – Наследование супругов и незаконных детей и родителей. – Закон наследования в Англии.
  8. Виды наследования.
  9. § 37 Исторический очерк русского наследственного права. – Первые начала наследования по договорам с греками, по Русской Правде и судебникам. – Влияние родового начала и политической борьбы с боярством на постановления о наследстве. – Отличия в наследовании между поместьями и вотчинами. – Образование вдовьей и дочерней части. – Право женщин-родственниц при мужчинах. – Недоумения о праве представления. – Соединение поместий с вотчинами и указ о единонаследии. – Отмена его. – Причины затруднений и
  10. II. НАСЛЕДОВАНИЕ
  11. Глава 13 НАСЛЕДОВАНИЕ
  12. § 2. НАСЛЕДОВАНИЕ ПО ЗАКОНУ
  13. § 3. НАСЛЕДОВАНИЕ ПО ЗАВЕЩАНИЮ
  14. § 2. Наследование по завещанию
  15. 3. Основания наследования
  16. Статья 1223. Право на наследование
  17. Понятие наследования.
  18. Статья 1258. Очередность наследования по закону
  19. § 1. Понятие и основания наследования
  20. Глава 26. Наследование по завещанию