/**/

Инкапсуляция

Это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает их от внешнего вмешательства или неправильного использования. Когда методы и данные объединяются таким способом, создается объект. Т.е. переменные состояния объекта скрыты от внешнего мира. Изменение состояния объекта (его переменных) возможно ТОЛЬКО с помощью его собственных методов. Можно сказать, что инкапсуляция подразумевает под собой сокрытие данных, что позволяет эти данные защитить.

Пример: (2)

<?php 
class SomeClass
{
  public    $a = 0; // будет видна везде - в текущем классе, классах-наследниках и за их пределами
  protected $b = 1; // будет видна только в текущем классе и классах-наследниках
  private   $c = 2; // будет видна только в текущем классе 
}
?>

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

Это процесс, посредством которого, один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него.

Пример: (2)

<?php 
// 1 - есть основной класс
class SomeClass
{
  public    $a = 0;
  protected $b = 1;
  private   $c = 2;
  
  function __construct($a, $b, $c)
  {
    $this->a = $a;
    $this->b = $b;
    $this->c = $c;
  }
}

// 2 - создаём к нему класс-наследник
class SomeClass2 extends SomeClass
{
  private $c = 3;
  
  // 2.1 - создаём отдельное свойство, т.к. предыдущее приватное и в наследнике не будет видно
  public $d = 4;
  
  // 2.2 - перегружаем конструктор
  function __construct ($a, $b, $c)
  {
    parent::__construct($a, $b, $c, $d);
    $this->c = $c;
    $this->d = $d;
  }
}
?>

Полиморфизм

Это свойство, которое позволяет одно и тоже имя использовать для решения нескольких технически разных задач. Проще говоря, концепцией полиморфизма является идея “один интерфейс, множество реализаций”. Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.

Пример: (3) вычисляем площади фигур по разному:

<?php
interface Shape {
  public function calcArea();
}
class Circle implements Shape {
  private $radius;
   
  public function __construct($radius)
  {
    $this -> radius = $radius;
  }
  
  // calcArea вычисляет площадь круга
  public function calcArea()
  {
    return $this -> radius * $this -> radius * pi();
  }
}
class Rectangle implements Shape {
  private $width;
  private $height;
   
  public function __construct($width, $height)
  {
    $this -> width = $width;
    $this -> height = $height;
  }
  
  // calcArea вычисляет площадь прямоугольников   
  public function calcArea()
  {
    return $this -> width * $this -> height;
  }
}
$circ = new Circle(3);
$rect = new Rectangle(3,4);

echo $circ->calcArea();
echo $rect->calcArea();
?>

Абстракция

Абстракция — это процесс выделения наиболее важных характеристик объекта и игнорирования более мелких деталей. Это позволяет разработчикам писать более компактный и простой код.

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

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

Пример: (2)

<?php 

// 1 - есть абстрактный класс, с абстрактынми ф-циями
abstract class AbsSomeClass
{
  public $a;
  public $b;
  public $c;

  function __construct($a, $b, $c)
  {
    $this->a = $a;
    $this->b = $b;
    $this->c = $c;
  }

  function SomeFoo1($a)
  {
    $this->a + $a;
  }
  // 2 - объявляем абстрактные методы, которые должны будут быть описаны в классах-наследниках
  abstract function SomeFoo2($b);
  abstract function SomeFoo3($c);
}

// 2 - создаём к нему класс реализующий наш абстрактные класс

class SomeClass extends AbsSomeClass
{
  
  // 3 - созданный класс-наследник SomeClass, реализует все методы описанные в классе AbsSomeClass..
  //.. и также свойства
  // 4 - описываем абстрактные методы родительского класса - AbsSomeClass

  function SomeFoo2($b)
  {
    return $this->b + $b;
  } 
  
  function SomeFoo3($c)
  {
    return $this->c + $c;
  }
}
?>

Источники

  1. Теория: https://habr.com/ru/articles/520472/#30

  2. Код: https://github.com/tony-kopanev/manual_PHP/blob/master/ООП/1_Основы%2C%20ООП.md#inn

  3. Код: “Полиморфизм в ООП на PHP“: https://www.wm-school.ru/php/php_oop_polymorphism.php

Tags

Нет Ответов

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики


Подпишись на новости
👋

Есть вопросы?