Серия "Объектно-ориентированное программирование (ООП): Наследование"

В этой серии, как и было обещано ранее, мы будем освежать концепции ООП в самой простой форме с примерами в PHP, Javascript и Dart.

До сих пор в этой серии мы рассмотрели Классы и объекты, Атрибуты и методы, Конструктор и деструктор и Модификатор доступа.

Модификаторы доступа (спецификаторы) — это ключевые слова или термины, определяющие доступность классов, методов и атрибутов. Модификаторы доступа различаются в зависимости от синтаксиса, используемого языками ООП для повышения безопасности охвата элементов данных и методов.

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

В программировании есть некоторые концепции, применимые к реальным сценариям. Как мы уже говорили ранее, ООП представляет реальные сценарии в объектной форме. Более того, поскольку мы сказали, что класс является родителем объекта (дочерним), это означает, что в дочернем объекте есть некоторые атрибуты и поведение, которые можно проследить до родителя.

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

Без дальнейших повторений взгляните на этот пример: в семье ребенок наследует определенные черты (атрибуты) или поведение (метод) от мамы или папы, например, рост, цвет лица, страсть, ловкость, темперамент и т. д.…

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

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

Глядя на этот подход, наследование может привести к древовидной структуре. Например, отслеживание внука до бабушки и дедушки требует древовидной структуры.

При наследовании новый класс, называемый подклассом, производным или дочерним классом, создается из супер, существующего, родительского или базового класса. В следующей статье мы рассмотрим полиморфизм, поскольку эта концепция больше связана с классами.

Некоторые преимущества наследования атрибутов и методов от суперкласса:

  • подкласс также может иметь определенные атрибуты и методы
  • подкласс может переопределить унаследованные атрибуты и методы
  • оптимизировать работу программистов
  • Эффективно улучшает принцип "Не повторяйся"
  • Если есть необходимость изменить метод, это можно сделать из той точки, где он был создан в классе, и это повлияет на все подклассы, использующие этот метод.

По мере роста наследования оно начинает принимать древовидную структуру. Чем дальше он растет, тем глубже структура дерева. Отсюда необходимость внедрения зависимостей.

Виды наследства:

  • Единичное наследование: это происходит, если дочерний класс наследует только один родительский класс.
  • Множественное наследование: это происходит, когда один дочерний элемент наследуется от нескольких классов.
  • Многоуровневое наследование: это происходит, когда класс наследуется от унаследованного класса.

Например:

Автомобиль является родительским классом

Класс Toyota унаследован от Car

Класс Камри достался в наследство от Тойоты

Например:

Автомобиль является родительским классом

Класс Toyota унаследован от Car

Класс Mercedes унаследован от Car

Класс Peugeot унаследован от Car

ОБРАТИТЕ ВНИМАНИЕ:Приведенные ниже примеры служат только для пояснения наследования. Вы можете просмотреть документацию по языку программирования для получения дополнительной информации. Спасибо!

Простая иллюстрация на Javascript:

Javascript использует цепочку прототипов для наследования. Прототип также может называться копией или образцом. Если свойства и методы отслеживаются или связываются с другим объектом, это называется цепочкой. Новые версии подкласса ECMAScript могут использовать ключевое слово extends для наследования от родительского класса.

// Super || Parent  || Base class
class Car {
  constructor(name) {
    this.name = name;
  }
  info() {
    return 'Car name: ' + this.name;
  }
}
//using extends keyword to inherit the name attribute and info method from class Car.
// Child || sub || derived class 
class Toyota extends Car {
//child class constructor
constructor(name, model) {
//the super keyword is used to reference the parent class
super(name);
    this.carmodel = model;
  }
//child class method accessing the inherited method
  details() {
    return this.info() + ' and model is: ' + this.carmodel;
  }
}
let toyota = new Toyota("Camry", "2021");
console.log(toyota.details());

Вывод

Название автомобиля: Camry и модель: 2021 г.

Внутри расширяет работу с ключевыми словами, используя механику прототипа. Он устанавливает Toyota.prototype.[[Prototype]] в Car.prototype.

Простая иллюстрация в Dart:

// Super || Parent  || Base class
class Car{
// parent method
void info(){
    print("Practicing inheritance in dart! from parent class");
}
}
// Child || sub || derived class 
class Toyota extends Car{
//sub class method
void details (){
print("Practicing inheritance in dart! from child class");
}
}
void main() {
var toyota = new Toyota();
//accesing inherited info method from parent class    
toyota.info();
//accesing details method in child class    
toyota.details();
}

Вывод Практика наследования в дартс! от родительского класса Практика наследования в дартс! из дочернего класса

Простая иллюстрация в PHP:

<?php
class Car{
    public $name;
    public $model;
public function __construct($name, $model) {
        $this -> name = $name;
        $this -> model= $model;
    }
public function info() {
        echo "Car Name: {$this->name} and Model is:  {$this->model}";
    }
}
/* Toyota is inherited from Car and is referred to as child class*/
class Toyota extends Car{
// the __construct() and info() is inherited
//child class method
    public function details() {
        echo " <br> I'm the child of Car class";
    }
}
$toyota= new Toyota('Camry', 2021);
$toyota->info();
$toyota->details();

В PHP 8 приведенное выше может быть записано в этом формате..

<?php
class Car{
    public function __construct(public $name, public $model) {}
public function info() {
        echo "Car Name: {$this->name} and Model is:  {$this->model}";
    }
}
class Toyota extends Car{
    public function details() {
         echo " <br> I'm the child of Car class"; 
    }
}
$toyota = new Toyota('Camry', 2021);
$toyota->info();
$toyota->details();
?>

Вывод

Название автомобиля: Camry и модель: 2021

Я ребенок класса автомобилей

Спасибо, что прочитали эту статью.

Следующая статья из серии ООП: Полиморфизм

Пожалуйста, поделитесь с вашей сетью и не стесняйтесь использовать раздел комментариев для вопросов, ответов и предложений.

Вам нравится эта статья?? пожалуйста, подпишитесь на меня в hashnode или Twitter @alemsbaja, чтобы быть в курсе новых статей об ООП.

Первоначально опубликовано на https://alemsbaja.hashnode.dev.