Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

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


In reply to (lang: nl) Objecten voor beginners by Juerd

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2024-03-28 08:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found