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

  Юрий  | 

    | 

  Обновл. 24 Июн 2019  | 

 4831

 ǀ   3 

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

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

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

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

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

Иерархии

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

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

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

Что дальше?


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

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

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

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

  1. Аватар Get:

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

    1. Юрий Юрий:

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

  2. Аватар Shom:

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

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

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