Наследство ООП ака «Все дело в семье»


Я хотел бы иметь богатого дядю, но, к сожалению, мы не говорим о таком наследстве.

Однако мы говорим о семье.

В частности, о наследовании говорят в терминах родительских классов и дочерних классов.

Родительские классы

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

Итак, если класс состоит из общих свойств и моделей поведения других объектов (или экземпляров), то чем, по-вашему, должен быть суперкласс?

Именно, он обладает свойствами, общими для других классов!

Когда мы говорим «супер» или «родитель», на самом деле мы говорим «более общий».

Все квадраты — прямоугольники

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

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

Если мы создадим класс для прямоугольников:

class Rectangle
    @sides = 4
    @all_right_angles = true
end
Войти в полноэкранный режим Выйти из полноэкранного режима

и квадратов:

class Square
    @sides = 4
    @all_right_angles = true
    @all_sides_equal = true
end
Войти в полноэкранный режим Выход из полноэкранного режима

мы увидим, что все, что есть в классе прямоугольников, есть и в классе квадратов.

Поскольку суть класса заключается в том, чтобы быть более абстрактным и более общим, более общий класс является «супер» классом. В данном случае прямоугольник является супер- или родительским классом. Класс квадрата будет считаться подклассом или дочерним классом.

Классы-родители и другие отношения

Прямоугольник является родителем квадрата, потому что квадрат обладает всеми свойствами и поведением прямоугольника.

Но разве все прямоугольники не являются параллелограммами? (Если вы забыли геометрию, то ответ — да).

А разве все параллелограммы не являются также четырехугольниками? А разве все четырехугольники не являются также многоугольниками? И разве не все… Вы поняли идею.

Подобно родителям ваших родителей, мы можем назвать эти классы классами бабушек и дедушек. Дальнейшие отношения можно рассматривать как классы-дедушки или классы-предки, но это не очень распространено.

** Квадрат < Прямоугольник < Параллелограмм < Четырехугольник < Многоугольник **.

Существуют также классы-«братья и сестры», которые имеют одного родителя, но в остальном не связаны между собой.

Например, класс ромба будет родным братом класса прямоугольника, потому что они оба являются дочерними классами класса параллелограмма!

Наследование в коде

Теперь, когда мы разобрались в этой концепции, давайте посмотрим, что она означает для нашего кода.

Посмотрите на наши предыдущие классы квадрата и прямоугольника:

class Rectangle
    @sides = 4
    @all_right_angles = true
end

class Square
    @sides = 4
    @all_right_angles = true
    @all_sides_equal = true
end
Вход в полноэкранный режим Выход из полноэкранного режима

Поскольку квадраты обладают всеми свойствами и поведением прямоугольников, мы можем установить наш класс квадратов как дочерний или подкласс прямоугольников. В ruby мы делаем это с помощью ‘<‘ в объявлении класса.

class Rectangle
    @sides = 4
    @all_right_angles = true
end

class Square < Rectangle
    @all_sides_equal = true
end
Вход в полноэкранный режим Выйти из полноэкранного режима

Теперь класс square будет *наследовать* все, что есть в классе rectangle, и нам не придется набирать все это снова!

Оцените статью
devanswers.ru
Добавить комментарий