Object Oriented Perl
(c) 2001 Juerd <juerd at juerd dit nl>
Dit is niet een vertaling van het document `perltoot'.
INLEIDING
Meer en meer wil men object georienteerd werken. Of het een hype is of
daadwerkelijk handig, laat ik aan jou over. Vaak wordt beweerd dat Perl
geen ondersteuning heeft voor objecten; niets is minder waar. Perl heeft al
sinds versie 5 goede mogelijkheden voor object georienteerd werken. Hoewel
de aanpak iets afwijkt van (of: veel flexibeler is dan) bij andere talen,
kan hetzelfde effect makkelijk of zelfs makkelijker worden bereikt.
WAT IS EEN OBJECT?
Een object is een ding. Dat ding heeft informatie over zichzelf en je kunt
er iets mee doen. Dat wat je er mee doet gaat via een methode. Een object
is vooral handig om een simpele interface te maken naar je code, terwijl
je degene die jouw code gaat gebruiken niet lastig valt met de interne
details. Objecten zorgen er ook voor dat je goed moet nadenken over het
design van je programma. Als je ze goed gebruikt, dan maakt het je
programma's veel overzichtelijker.
JA MAAR WAT IS EEN OBJECT NOU ECHT?
In Perl is een object een blessed reference (gezegende referentie). Dit
houdt in een normale Perl reference, met als verschil dat het weet bij welke
package het hoort.
In Perl zijn methods (methodes) simpele subs die het object als eerste
parameter meekrijgen.
Als je niet weet wat refs zijn, of hoe ze werken, lees dan nu
perlref en/of perlreftut (beide documenten zijn op te vragen met perldoc).
HOE MAAK IK EEN OBJECT?
Allereerst moet je een package hebben. Voordat je object bestaat gebruik je
die als aanspreekpunt.
package Foo;
Binnen je package heb je een subroutine die een blessed ref teruggeeft.
De package wordt gebruikt als object, en in plaats van een object zal $_Z0[
de naam van de package zijn.
sub new {
my $package = shift;
my $object = { }; # Nieuwe lege hash ref
bless $object, $package; # De magie
return $object;
}
Er is niets bijzonders aan de naam `new', het had netzogoed `kauwgom' kunnen
heten, maar het is wel fijn als iedereen `new' gebruikt.
We maken een object als volgt:
my $object = Foo->new;
# of
my $object = new Foo;
`Foo->new' is de normale aanspreekvorm, `new Foo' is een synoniem daarvoor.
Het pijltje zorgt ervoor dat voor de normale parameters de naam van het
package wordt meegegeven (of het object, als het om een object gaat).
In feite wordt hierboven `my $objectje = Foo::new('Foo');' uitgevoerd.
METHODS
Methods zijn subroutines die het object als eerste parameter krijgen. Dat is
ECHT alles.
package Schaap;
sub new {
my $package = shift;
my $obj = { };
bless $obj, $package;
return $obj;
}
sub blaat {
my ($self, $blaat) = @_;
$self->{geblaat}++;
print "Dit schaap blaat nu al voor de $self->{geblaat}e keer.\n";
print "De parameter was: $blaat\n"
}
package main;
my $dolly = new Schaap; # $dolly weet nu dat het bij ...
# ... package Schaap hoort. $dolly->method wordt dus Schaap::m
+ethod
$dolly->blaat('Hoi'); # Schaap::blaat($dolly, 'Hoi')
$dolly->blaat('Hallo'); # Schaap::blaat($dolly, 'Hallo')
blaat $dolly('Ook dit werkt'); # Schaap::blaat($dolly,
# 'Ook dit werkt');
Dat is eigenlijk genoeg om te weten. Je kunt alle data zetten in je
reference (wat ook best een arrayref had kunnen zijn, maar ik vind
hashreferences wel erg fijn voor objecten).
PROPERTIES
Je wilt vast variabelen kunnen manipuleren. $obj->{geblaat} direct
aanspreken wordt gezien als inbreuk op de privacy. Daarom kun je beter
methods ervoor maken. Dat gaat doorgaans als volgt:
sub kleur {
my ($self, $kleur) = @_;
$self->{kleur} = $kleur if defined $kleur;
return $self->{kleur};
}
$obj->kleur("Blauw");
print "De kleur is ", $obj->kleur(), ".\n"; # De kleur is blauw.
En dan wordt er een vriendelijk loket geopend en is de privacy goed
beschermd.
MEER INFORMATIE
Je hebt nu de simpele informatie om met objecten in Perl aan de slag te
gaan. Deze simpele introductie is geen vervanging voor de Engelstalige
tutorial `perltoot', die via perldoc (`perldoc perltoot') te lezen is.
DISCLAIMER
Hoewel ik ervan uitga dat hier geen fouten instaan, is alles op eigen
risico. Veel dingen zijn niet aan bod gekomen, en veel dingen laat ik over
aan je eigen verstand. Lees de echte perldocumentatie voor een compleet
overzicht.
AUTEUR
Juerd, Perlverslaafde.
http://juerd.nl/
http://japh.nl