Tartalomjegyzék

< Perl

Perl Objektum Orientáltan

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:

Dolgozo.pm
#!/usr/bin/env perl
 
package Dolgozo;
 
sub new {
    my $class = shift;
    my $self = {
        _nev => shift,
        _szuletes => shift,
        _fizets => shift,
    };
    bless $self, $class;
    return $self;
}
 
1;
prog01.pl
#!/usr/bin/env perl
 
use Dolgozo;
 
$janos = new Dolgozo( "Nagy", "János", "1980-01-01", 850000);
 
print $janos->{_nev}." ";
print $janos->{_szuletes}."\n";
print $janos->{_fizetes}."\n";

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;
prog01.pl
#!/usr/bin/perl
 
use Dolgozo;
 
$janos = new Dolgozo( "Nagy János", "1980-01-01", 850000);
 
$janos->beallitNev("Piros Lajos");
print $janos->lekerNev();

Ö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;