next up previous index
Következő: 9.1.1.17.3 Metódus Fel: 9.1.1.17 OOP Előző: 9.1.1.17.1 Objektum   Index

9.1.1.17.2 Osztály

Az osztály egy package. Nincs semmi különös jelölés arra, hogy ez egy osztály, sőt még az inicializáló eljárást sem kell new-nak hívni.

Egy osztályban csak a metódusok öröklésére van támogatás az @ISA tömbbön keresztül. Ez egy modul neveket tartalmazó tömb. Ha egy metódust nem található meg az aktuális package-ban, akkor az ebben a tömbben felsorolt modulok lesznek bejárva a hiányzó alprogramért. Ez egy mélységi keresés lesz. Ha itt sem talál semmit, és van egy AUTOLOAD nevű függvény, akkor megpróbálja ezzel előszedetni a hiányzó eljárást. Ha ez a lehetőség sem járt sikerrel, akkor egy UNIVERSAL-nak nevezett modulban fog keresgélni a rendszer.

Az @ISA tömb szépsége az, hogy menet közben is lehet módosítani, azaz menet közben megváltoztathatjuk egy osztály leszármazási fáját! Nyilvánvalóan az adattagok öröklésére is szükség van egy objektum-orientált nyelvben, ez a Perlben az @ISA tömb segítségével megvalósítható.

package A;
sub new {
my $type = shift;
my $self = {};
$self->{'a'} = 42;
bless $self, $type;
}
package B;
@ISA = qw( A );		# A a B ősosztálya
sub new {
my $type = shift;
my $self = A->new;
$self->{'b'} = 11;
bless $self, $type;
}
package main;
$c = B->new;
print ,,a = '', $c->{'a'}, ,,\n'';
print ,,b = '', $c->{'b'}, ,,\n'';




1999-09-17