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.
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.package Foo;
Er is niets bijzonders aan de naam `new', het had netzogoed `kauwgom' kunnen heten, maar het is wel fijn als iedereen `new' gebruikt.sub new { my $package = shift; my $object = { }; # Nieuwe lege hash ref bless $object, $package; # De magie return $object; }
We maken een object als volgt:
`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.my $object = Foo->new; # of my $object = new Foo;
METHODS
Methods zijn subroutines die het object als eerste parameter krijgen. Dat is
ECHT alles.
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).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');
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:
En dan wordt er een vriendelijk loket geopend en is de privacy goed beschermd.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.
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