http://qs1969.pair.com?node_id=132425

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