PHP-тегі ООП-дегі абстрактты класстар

Сізде User класы бар делік, ал одан Employee және Student кластары мұра етеді.

Бұл ретте сіз Employee және Student кластарының объектілерін жасайсыз деп болжанады, бірақ User класының объектілерін - жаспайсыз, себебі бұл клас тек өз мұрагерлерінің жалпы қасиеттері мен әдістерін топтау үшін қолданылады.

Бұл жағдайда User класының объектілерін жасауды мәжбүрлеп тыйым салуға болады, осылайша сіз немесе басқа бағдарламашы оларды кездейсоқ жасап алмайды.

Бұл үшін абстрактты класстар деп аталатындар бар. Абстрактты класстар олардан мұра ету үшін арналған класстар болып табылады. Бұл ретте мұндай класстардың объектілерін жасауға болмайды.

Класты абстрактты деп жариялау үшін, оны жариялау кезінде abstract кілт сөзін жазу керек:

User.php<?php
  abstract class User
  {
    
  }
?>

Ендеше, User абстрактты класының реализациясын жазайық. Онда name жеке қасиеті болсын, сонымен қатар ол үшін геттерлер мен сеттерлер болсын:

User.php<?php
  abstract class User
  {
    private $name;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function setName($name)
    {
      $this->name = $name;
    }
  }
?>

User класының объектісін жасау әрекеті қате шығарады:

index.php<?php
  $user = new User; // қате шығарады
?>

Ал біздің кластан мұра етуге болады. User абстрактты класымыздан мұра ететін Employee класын жасайық:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
  }
?>

Employee класының объектісін жасайық - бәрі жұмыс істейді:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');  // ата-ана әдісі, яғни User класының
  $employee->setSalary(1000);  // меншікті әдісі, яғни Employee класының
  
  echo $employee->getName();   // 'john' шығарады
  echo $employee->getSalary(); // 1000 шығарады
?>
Задание 1

Геометриялық фигураны білдіретін абстрактты Figure класын жасаңыз. Одан шеңбер, тік төртбұрыш және шаршы үшін кластар мұра етсін.