Autor Zpráva
Monkeys
Profil *
OOP sa mi podarilo celkom slusne pochopit na zaklade studia uz hotovych rieseni a citania clankov ale stale neviem ako v praxi vyuzit abstraktne triedy a interface.
Stale mi neako unika vyznam tychto implementacii a neviem ako ich vyuzit v praxi.

dakujem
M.
juriad
Profil
Jednou možností je neřešit to, až přijde čas a potkáš je, poznáš jejich důvod a sílu.

Obyčejnou dědičnost chápeš?
Vem si třeba XML, tam máš elementy, atributy, text, komentáře a pár dalších; všechno jsou to typy uzlů (Node), ale samotný Node nikdy neexistuje, vždy je to Element, Attribute, Document atd.
Pokud by sis psal vlastní DOM reprezentaci xml, bylo by vhodné začít třídou Node, od ní odvodit Element, Attribute, Document a další. Samotný Node můžeš označit jako abstract, jeho instance nikdy nebude existovat. Klíčové slovo abstract je jen poznámka pro tebe i pro interpreter: instance této třídy nikdy nevznikne.

Interface je dohnání abstrakce až na hranici možností; pokud zůstanu u příkladu xml, tak můžeš vytvořit interface HasChildren, který bude deklarovat metodu getChildren().
Některé typy uzlů budou interface HasChildren implementovat (Element, Document), jiné ne (nejspíš všechny ostatní).
Pro výpis všech komentářů v xml bys pak použíl něco jako:
function printComments($xml) {
  if($xml instanceOf Comment) {
    echo "comment: " . $xml->getValue(); 
  } else if($xml instanceOf HasChildren) {
    $children = $xml->getChildren();
    foreach($children as $child) {
      printComments($child);
    }
  } else {
    # ignore all other nodes
  }
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: