PHP OOP: Zapouzdření, dědičnost, polymorfismus, abstrakce [4]

PHP OOP: Zapouzdření, dědičnost, polymorfismus, abstrakce [4]

Objektově orientované programování(OOP) stojí na čtyřech základních pilířích a to jsou - zapouzdření, dědičnost, polymorfismus a abstrakce (Abstraction). Nesmíme ale také zapomenout na  kompozici (Composition) a delegování (Delegation).

Zapouzdření

Zapouzdření (Encapsulation) znamená skrytí (izolování) některých atribudů a metod (nastavení že jsou privátní - private), čímž se zamezí jich přímému volání/změnám zvenku (mimo třídu).
Pomocí interface (rozhraní) pak můžeme definovat jen veřejné metody, které se mají skutečně používat při práci s třídou a ostatní metody zůstanou skryty (ty které se používají jen pro vnitřní potřebu třídy).

Dědičnost

Dědičnost (Inheritance) se používá k:

  • rozšiřování existujících tříd pomocí slova extends (nová třída vzniklá na základě staré)
  • vhodné když nová třída má stejné vlastnosti jako již existující třída a zároveň od ní chceme něco navíc
  • sdílení metod či atributů mezi potomkem a předkem je možné pomocí modifikátoru protected
  • pokud chceme upravit konstruktor u potomka a využít i kontstuktor předka, tak použijeme parent::__construct()

Typickým příkladem dědění ve frameworku Nette je použití BasePresenteru od kterého pak dědí všechny ostatní presentery v daném modulu.

Abstrakce

Abstrakce v OOP znamená:

  • zjednodušený pohled na složité věci
  • zahrnutí jen podstatných (obecných) věcí s vynecháním zbytečných detailů
  • pomocí abstrakce je možné využívat kód univerzálněji a tím pádem k více účelům

Polymorfismus

Polymorfismus (Polymorphism) v bodech:

  • umožňuje použít shodnou metodu mezi třídami, ale každá třída může mít různou definici této metody
  • k implementaci polymorfismu mezi třídami můžeme ideálně použít rozhraní (interface) a abstraktní třídy (abstract class)

Příklad polymorfismu na githubu

class Parent1 {
    public function speak()
    {
        echo 'Parent1' . PHP_EOL;
    }
}

class Child1 extends Parent1 {
    public function speak()
    {
        echo 'Child1' . PHP_EOL;
    }
}

class Parent2 {
    public function speak()
    {
        echo 'Parent2' . PHP_EOL;
    }
}


/**
* example 1
*/
(new Parent1())->speak();
(new Child1())->speak();
(new Parent2())->speak();


/**
* example 2
*/
$arr = [];
$arr[] = new Parent1();
$arr[] = new Child1();
$arr[] = new Parent2();

foreach ($arr as $a)
{
    $a->speak();
}
Jak se ti článek líbil?

Komentáře (0)

Přidat komentář