Урок 153. Наследование. Введение

  Юрий Ворон  | 

    | 

  Обновлено 19 Июл 2018  | 

 1687

 ǀ   3 

В уроках предыдущей главы мы рассмотрели композицию объектов, когда сложные классы состоят из более простых классов и типов данных. Композиция объектов идеально подходит для создания новых объектов, тип отношения которых – «имеет». Однако композиция объектов является лишь одним из двух основных способов, с помощью которых вы можете создавать сложные классы в C++. Второй способ — наследование, которое моделирует тип отношения «является» между двумя объектами.

В отличие от композиции объектов, которая включает создание новых объектов путем объединения и соединения других объектов, наследование включает в себя создание новых объектов путем непосредственного сохранения свойств и поведения других объектов, а затем их расширения или наоборот, конкретизации. Подобно композиции объектов, наследование происходит повсюду в реальной жизни. Например, при рождении вы унаследовали гены ваших родителей и приобрели определенные физические свойства у обоих из них (предрасположенность к болезням, видам деятельности и т.д.), но затем вы добавили свою личность ко всему приобретенному. Технологические продукты (компьютеры, смартфоны и т.д.) наследуют функционал от своих предшественников, при этому добавляя что-то своё (новое, уникальное), сохраняя при этом обратную совместимость. Например, процессор Intel Pentium унаследовал многие функциональные свойства процессора Intel 486, который в свою очередь унаследовал свой функционал от более ранних процессоров. C++ многое унаследовал от языка C, на котором он основан, а C унаследовал многие свойства от других языков программирования, которые были до него.

Рассмотрим пример с яблоками и бананами. Хотя яблоки и бананы — это разные фрукты, у них обоих есть одно общее свойство – они оба являются фруктами. И поскольку яблоки и бананы — фрукты, то, следуя логике, всё, что верно для фруктов, верно и для яблок с бананами. Например, все фрукты имеют своё название, цвет и размер. Яблоки и бананы также имеют свои названия, цвет и размер. Мы можем сказать, что яблоки и бананы унаследовали (приобрели) все свойства фруктов, потому что они сами являются фруктами. Мы также знаем, что фрукты подвергаются процессу созревания, благодаря которому они становится съедобными. Поскольку яблоки и бананы являются фруктами, то, соответственно, они также подвергаются процессу созревания, в результате чего становятся съедобными.

Если изобразить отношения между яблоками, бананами и фруктами в диаграмме, то это будет выглядеть примерно следующим образом:

Здесь мы видим иерархию.

Иерархии

Иерархия — это диаграмма со связями объектов. Большинство иерархий либо демонстрируют прогрессию с течением времени (386 > 486 > Pentium), либо классифицируют вещи таким образом, чтобы они переходили от общего к конкретному (Фрукты > Яблоко > Макинтош). Еще со школьной биологии царство, тип, класс, порядок, семейство, род и вид являются определением иерархии (движением от общего к конкретному или наоборот).

Вот еще один пример иерархии: квадрат является прямоугольником, который является четырёхугольником, который является фигурой. Правильный треугольник — это треугольник, который также является фигурой. Диаграмма в помощь:



Здесь есть движение от общего к конкретному, причем каждый следующий элемент наследует свойства и поведение элемента над ним (движемся сверху вниз).

Что дальше?

В этой главе мы рассмотрим основы наследования и его реализацию в C++.

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

Также поговорим о ключевых преимуществах наследования и о его недостатках.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (15 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 3

  1. Get:

    только недавно начал, и уже конец. Спасибо админу за труды 😉 И самое главное читать удобно, нет убого интерфейса с кучей теней, как на большинстве аналогичных сайтов. Сам верстал?

    1. Юрий Юрий:

      Ну еще не конец. Еще будет много чего. Да, сам, но еще нужно будет доработать в ближайшем времени 🙂

  2. Shom:

    Интригующая концовка у этой главы : ) С нетерпением жду следующую.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ВОЛШЕБНАЯ ТАБЛЕТКА ПО С++