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();
}

 

Komentáře

Vaše reakce na PHP OOP: Zapouzdření, dědičnost, polymorfismus, abstrakce [4]

Související obsah

serial-php-oop

php

programovani

vyvoj

php-oop

Reference

Podívejte se na naše reference

Prohlédnout

Aplikace

Podívejte se na naše aplikace

Prohlédnout

Co umíme?

Podívejte se co umíme

Prohlédnout

Co umíme?

Vytváříme sofistikované aplikace pro náročné

Od webových aplikací přes android až po převodové můstky či složité informační systémy.

Podívejte se k nám

Máte ještě čas? Podívejte se na další rubriky

Tento web používá soubory cookie. Dalším procházením tohoto webu vyjadřujete souhlas s jejich používáním.. Více informací zde.