www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Kapitel 15: Objektorientierte Programmierung

Inhalt
Synopsis
# Verwendung von Objekten:
use SomeClass;
$obj = SomeClass->new($additional, @parameters);
$obj->setName($newname);
print $obj->getPhone();

#### Deklaration einer Klasse:
package SomeClass;

# Klassenvariablen und Funktionen
sub ClassFunction1 { ... }
$counter = 0;                    # Globale Variable
my $priv = 12343;                # Von ausserhalb unsichtbar

# Der kanonische Konstruktor
sub new {
    my $classname = shift;
    my $self = {};               # Anonymer Namenshash
    bless($self, $classname);
    $self->_init(@_);            # Initialisierungsroutine
    return $self;
}

sub _init {
    my $self = shift;
    $self->{'NAME'}  = shift;
    $self->{'PHONE'} = shift;
    # usw...
}

# Eine beliebige Methode (Akzessorfunktion):
sub name {
    my $self = shift;
    $self->{'name'} = shift if (@_);
    return $self->{'name'};
}

# Vererbung von Methoden aus Basisklassen mit @ISA
@ISA = qw(Baseclass);
# Vererbung von Datenelementen: Aufruf des Basiskonstruktors
sub new {
    my $classname = shift;
    $self = $classname->SUPER::new->( shift );
    $self->{'onemoreelement'} = shift;
    return $self;      # Nicht nochmal bless() aufrufen!
}

##### Variablenbindung
# Benutzung:
tie %h, 'SomeClass', $additional, @parameters;
$h{$key} = "newvalue";    # Triggert SomeClass::STORE()
print $h{$key};           # Triggert SomeClass::FETCH()
untie %h;

# Implementation von tie()-kompatiblen Klassen
package SomeClass;
use Tie::StdHash;
use vars qw(@ISA);
@ISA = qw(Tie::StdHash);      # Oder eine andere Basisklasse

sub FETCH {
    my $self = shift;
    my $key = shift;
    return uc($self->{$key});    # zum Beispiel
}

sub STORE {
    my ($self, $key, $newvalue) = @_;
    $self->{uc($key)} = $newvalue;    # beispielsweise
}

1;
Beispielprogramme
ABadlyHackedUpClass.pm Datenelemente als Klassenarrays
test-that-bad-class.pl Testet unseren üblen Hack aus
AKludgedClass.pm Objektattribute als Klassenhashes
test-that-kludged-class.pl Testet unsere verbesserte Klasse
ANearlyPerfectClass.pm Objektattribute in anonymen Arrays
test-np-object.pl Testet die fast perfekte Klasse
ClassWithAnonHash.pm Objektattribute in einem anonymen Hash
test-hash-object.pl Testet die perfekte namenshashbasierte Klasse
inheritance.pl Verwendung von @ISA, Vererbung und AUTOLOAD()
inheriting-attributes.pl Vererbung von Datenelementen
class-struct.pl C-Strukturen als Klassen mit Class::Struct
varbind-scalar-greetings.pl Tageszeitabhängiger Gruß mit tie()
TimeGreeting.pm TIESCALAR-Klasse zum zeitabhängigen Gruß
varbind-scalar-greetings2.pl Tageszeitabhängiger Gruß speichert Namen
TimeGreeting2.pm Wie TimeGreeting.pm; speichert Namen
varbind-array-bound.pl Array mit Überprüfung der Arraygrenzen
ArrayBound.pm Überprüft Indexgrenzen zur Laufzeit
fetch-url.pl Besorgt eine URL über das Netz mit Tie::URL
Tie/URL.pm TIEHASH-Klasse zum Holen von URLs
Ergänzungen
Lösungen zu ausgewählten Übungsaufgaben

In Vorbereitung

FAQ

In Vorbereitung

Errata
Errata, 1. Nachdruck

[Prev] [Up] [Next]

[Alte Quelle]


Last modified: $Date: 2006/05/18 12:55:45 $
FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy
FreeBSD Logo