Tvorba objektů
Pro tvorbu objektu je nutné vědět, co objekt vlastně je. Je to odkazovaná libovolná datová struktura, která náleží k nějaké třídě a to proto, abychom mohli volat metody objektu. K označení příslušnosti objektu ke třídě slouží vestavěná funkce „bless“. Ta jako první argument přijímá odkaz a tomuto odkazu řekne, že to, na co odkazuje, patří ke třídě, jejíž jméno je zadáno jako druhý argument.
$objekt = {};
$trida = 'Trida';
bless $objekt, $trida;
// obsah navážeme na třídu
// nebo
bless $objekt, 'Trida'
// nebo
bless {}, 'Trida'
Objekty je také možné vytvářet pomocí metod, které se nazývají konstruktory. Objekty jsou pak získány jako návratové hodnoty těchto funkcí. Tyto metody obvykle pracují tak, že alokují nový prostor pro ukládání atributů, označí jeho příslušnost ke třídě a vrátí odkaz na takto alokovaný prostor. Bude-li konstruktor volán jako metoda třídy, pak jeho implementace může vypadat následovně:
sub new {
my $trida = shift;
my $objekt = {};
bless $objekt, $trida;
return $objekt;
}
// jiný způsob
sub new { bless {}, shift }
Pro volání objektu jako metody objektu pak bude zápis vypadat následovně.
sub new {
my $trida = ref shift;
my $objekt = {};
bless $objekt, $trida;
return $objekt;
}
Nastavení atributů
Při tvorbě konstruktoru je možné nastavit počáteční hodnoty atributů. Zatím jsme vždy vytvářeli objekt s prázdným seznamem atributů — vraceli jsme odkaz na prázdný hash. Provedeme-li inicializaci hodnot tohoto hashe, nastavíme tak hodnoty atributů v okamžiku vytvoření objektu.
sub new {
my $objek = shift;
my $trida = ref $objekt | | $objekt;
return bless {atribut => 1), $trida; }
Neznáme-li v okamžiku definice konstruktoru seznam atributů a jejich hodnot, můžeme je přidat jako seznam jeho argumentů.
// seznam atributů a jejich hodnot je v poli @_
sub new {
my $objek = shift;
my $trida = ref $objekt | | $objekt;
return bless {atribut => 1, @_ ), $trida;
}
// použití
A to by bylo pro dnešek všechno. V dalším díle se podíváme na metody. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.
Autor: Robert Habrman