Tartalomjegyzék
Perl Objektum Orientáltan
- Szerző: Sallai András
- Copyright © Sallai András, 2015
- Licenc: GNU Free Documentation License 1.3
- Web: http://szit.hu
Osztály létrehozása
A Perl nyelven az osztálynak csomagok felelnek meg. A csomagok a váltózókat és a hozzátartozó eljárásokat, függvényeket tartalmaznak.
package Dolgozo;
Elkészítjük a konstruktort:
sub new { my $class = shift; my $self = { _nev => shift, _szuletes => shift, _fizetes => shift, }; bless $self, $class; return $self; }
A „new” metódust, osztálymetódusként fogjuk meghívni. Az osztálymetódusok hívásakor mindig automatikusan beillesztésre kerül egy plusz paraméter, ez az osztály típusa. Elsőként ezt tesszük el egy változóba: my $class = shift; Utána jöhetnek a dolgozó adatainak beállításai. Általában a konstruktort hívjuk csak osztálymetódusként.
A Perl nyelvben az konstruktor neve bármi lehet. Lehet Create(), New(), new(), a névre nincs megkötés.
Készítünk egy példányt:
$janos = new Dolgozo( "Nagy", "János", "1980-01-01", 850000);
Ezek után használjuk fel a tartalmát:
print $janos->{_nev}." "; print $janos->{_szuletes}."\n"; print $janos->{_fizetes}."\n";
A teljes lista:
Metódusok használata
Az objektumorientált programozás egyik elve, hogy csak metódusokon keresztül érjük el az osztály tagjait. A keresztnév lekérdezése például:
sub lekerNev { my( $self) = @_; return $self->{_nev}; }
A paraméterlistába itt is automatikusan beszúrásra kerül egy változó, de ez az objektumra mutató hivatkozás lesz, és nem az osztály típusa. A lekerNev() metódus első paraméterként megkapja az objektum mutatóját, ezt vesszük át a „$self” változóban. Így tudunk hivatkozni az objektum _nev tagjára.
Beállítása:
sub beallitNev { my ( $self, $nev ) = @_; $self->{_nev} = $nev if defined($nev); }
A beallitNev() tagfüggvény esetén is elsőként átvesszük az objektum mutatóját a $self változóba, majd jöhet a valódi paraméter a név a $nev változóba.
Teljes lista:
- Dolgozo.pm
#!/usr/bin/env perl package Dolgozo; sub new { my $class = shift; my $self = { _nev => shift, _szuletes => shift, _fizetes => shift, }; bless $self, $class; return $self; } sub lekerNev { my( $self) = @_; return $self->{_nev}; } sub beallitNev { my ( $self, $nev ) = @_; $self->{_nev} = $nev if defined($nev); } 1;
Öröklés
Az öröklés meghatározása:
our @ISA = qw(Dolgozo);
Teljes lista:
- Dolgozo.pm
#!/usr/bin/env perl package Dolgozo; sub new { my $class = shift; my $self = { _nev => shift, _szuletes => shift, _fizetes => shift, }; bless $self, $class; return $self; } sub lekerNev { my( $self) = @_; return $self->{_nev}; } sub beallitNev { my ( $self, $nev ) = @_; $self->{_nev} = $nev if defined($nev); } 1;
- Mernok.pm
#!/usr/bin/env perl package Mernok; use Dolgozo; our @ISA = qw(Dolgozo); sub new { my($class) = @_; my $self = $class->SUPER::new(@_[1], @_[2], @_[3]); $self->{_diploma} = undef; bless $self, $class; return $self; } sub beallitDiploma { my ( $self, $diploma ) = @_; $self->{_diploma} = $diploma if defined($diploma); } sub lekerDiploma { my( $self) = @_; return $self->{_diploma}; } 1;
- prog01.pl
#!/usr/bin/perl use Dolgozo; use Mernok; $janos = new Dolgozo( "Nagy János", "1980-01-01", 850000); $janos->beallitNev("Piros Lajos"); print $janos->lekerNev(); $mari = new Mernok( "Piros Mária", "1985-06-01", 870000); $mari->beallitDiploma("ABE34224"); print $mari->lekerNev()."\n"; print "Diploma száma: ".$mari->lekerDiploma();
Destruktor
A program befejezésével, a Perl automatikusan eltakarítja a memóriából a nem használt objektumokat. Ha valaki mégis extra tevékenységet szeretne a destruktorban, akkor azt a DESTROY nevű speciális metódusban teheti meg.
- Dolgozo.pm
#!/usr/bin/env perl package Dolgozo; sub new { my $class = shift; my $self = { _nev => shift, _szuletes => shift, _fizetes => shift, }; bless $self, $class; return $self; } sub DESTROY { print " Dolgozo::DESTROY meghívása\n"; } sub lekerNev { my( $self) = @_; return $self->{_nev}; } sub beallitNev { my ( $self, $nev ) = @_; $self->{_nev} = $nev if defined($nev); } 1;