Perl, Objektově orientované programování (52.díl)

Napsal O webu (») 8. 9. 2008 v kategorii Programování, přečteno: 1401×
obrazky/logo_perl.jpg

Dědičnost

Jediné, co mohou objekty v Perlu dědit, jsou metody. Je to proto, že atributy objektu jsou tvořeny datovou strukturou, která je pro každý objekt jedinečná, není předem známá a je možné ji libovolně modifikovat. Chceme-li, aby jedna třída zdědila vlastnosti jiné třídy, je nutné zpřístupnit původní balík metod rodičovské třídy. Pokud chceme některému balíku určit, ze kterých tříd je odvozen, nadefinujeme v něm pole @ISA. To obsahuje názvy balíků, které jsou rodičovskými třídami pro aktuální třídu objektů. Při pokusu volat metodu objektu, která není součástí definice třídy, dochází k jejímu hledání v třídě rodičovské.


Vyhledávání metody


Nejprve se Perl snaží volat funkci v balíku, který je stejný jako jméno třídy. V případě, že se tam volaná metoda nenachází, hledá se v balíku, jehož jméno je uvedeno jako první prvek v poli @ISA. Není-li příslušná funkce nalezena ani tam, hledá se v případných dalších balících vyjmenovaných v poli @ ISA tohoto balíku. Postupuje se tak dlouho, až je funkce daného jména nalezena. Jestliže všechny pokusy o vyhledání metody selhaly, pokouší se Perl zavolat metodu hledaného jména z balíku UNIVERSAL.


Třída UNIVERSAL


Třída UNIVERSAL je posledním místem, kde probíhá vyhledávání metod. Poskytuje tři metody, které jsou dostupné ze kterékoliv třídy. Volat tyto funkce může jak objekt, tak třída, a návratovými hodnotami jsou vlastnosti týkající se vyvolavatelů metody.


1. Metoda can.
2. Metoda isa.
3. Metoda VERSION.


Metoda „can“ očekává jako argument jméno metody, zjistí, zda taková metoda může být volána, a případně na tuto funkci vrací odkaz. V opačném případě vrací nedefinovanou hodnotu.


Metoda „isa“ jako argument přebírá jméno třídy a vrací pravdivou hodnotu v případě, že volatel metody je bud' objekt této třídy nebo potomek této třídy.


Metoda VERSION vrací hodnotu proměnné $VERSION z objektové třídy. V případě, že dostane argument, porovná ho navíc s hodnotou této proměnné.



// Metoda isa

if ($objekt->can('metoda')) { $objekt->metoda; }

// Metoda isa

if ($objekt->isa('Trida')) { print 'Objekt je potomkem nebo objektem třídy Trida.'; }

if ($objekt->isa('HASH')) { print 'Objekt má atributy uložené v hashi.'; }

// Metoda VERSION

print 'Verze modulu: ', $objekt->VERSION(1.5);




A to by bylo pro dnešek všechno. V dalším díle se podíváme na práci se soubory. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.


Autor: Robert Habrman
Štítky: Perl
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel deset a pět