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ář