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

  Юрий  | 

  |

  Обновл. 26 Сен 2021  | 

 40814

 ǀ   7 

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

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

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

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

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

Иерархии

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

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

Здесь каждый элемент наследует свойства и поведение элемента над ним.

Что дальше?


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

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

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

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

  1. Я:

    Интересный факт: банан—это ягода.

    Но всё-таки интересно и приятно благодаря таким текстовым курсам просто для себя что-то напомнить или узнать.

    1. Фото аватара Юрий:

      Ух ты, сам не знал (до Вашего комментария), что банан — это ягода))

  2. Алина:

    Здравствуйте!

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

    По-моему, в описанном вами примере как раз движение от конкретного к общему: квадрат — прямоугольник — четырёхугольник. Квадрат — это конкретный прямоугольник с равными сторонами, как и прямоугольник — частный случай четырёхугольника, у которого стороны попарно параллельны и углы равны 90°.

    1. Woland:

      "в описанном вами примере как раз движение от конкретного к общему".
      Однозначно!
      Но видимо так в оригинале в книге написано. Это же всё перевод.
      Да, примеры порою не самые удачные. А перевод хороший.

  3. Get:

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

    1. Фото аватара Юрий:

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

  4. Shom:

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

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

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