Thread Perl OO und Vererbung (10 answers)
Opened by mark05 at 2020-03-27 11:06

haj
 2020-03-30 14:35
#191670 #191670
User since
2015-01-07
558 Artikel
BenutzerIn

user image
2020-03-30T07:27:16 mark05
in meinen beispiel geht es um die methode "out" die vpm package zum
program vererbt wird , um sie dann ohne new verwenden zu können.

Du exportierst das Unterprogramm out. Dadurch kannst Du in deinem Programm out($text) schreiben - und musst es nicht mit OOTest::Out::out($text) aufrufen. Das hat mit Objektorientierung nichts zu tun, eher im Gegenteil: OO-Methoden zu exportieren ist sinnlos.

2020-03-30T07:27:16 mark05
jedoch möchte ich ein atribut "debug" setzen können so das sich das verhalten von out ändert.

man kann das natürlich via aufruf machen z.b. out ('mein text',debug ).

würde das gerne aber bei start einmalig setzen um nicht permanent
das beachtet zu müssen wenn ich out verwende .

Dein Unterprogramm out hängt fest verdrahtet an dem Objekt $o, dass Du in Deinem Paket OOTest::Out definiert hast. Auf dieses Objekt hast Du von außen keinen Zugriff, deshalb kannst Du auch keine OO-Methoden drauf anwenden. Als Abhilfe könntest Du $o als Singleton-Objekt zugreifbar machen und eine Zugriffsfunktion für das Attribut schreiben:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
package OOTest::Out;
# ... wie bisher

sub instance { $o }

sub set_debug {
    my $self = shift;
    my ($debug) = @_;
    $self->{ debug } = $debug;
}


Und im Hauptprogramm:
Code (perl): (dl )
1
2
3
my $oo = OOTest::Out->instance;
$oo->set_debug(1);
out('Hurra!');

Das ist dann zwar beinahe objektorientiert, aber keine Vererbung.

2020-03-30T07:27:16 mark05
das die basic OO möglichkeiten von perl eher rustikal sind , finde
ich spannnend , und herausfordernd , gute lösungen in diesem rahmen
zu finden.

Das ist schon ok, aber dann solltest Du Dich in jedem Fall mit den Grundlagen von OO beschäftigen. Wenn's mit Bezug zu Perl sein soll: Perldoc:perlootut und Perldoc:perlobj hatte ich ja schon mal empfohlen, auf https://learn.perl.org/books/ gibt's einige Buchtipps dazu.

2020-03-30T07:27:16 mark05
und vererben bzieht sich auf die funktion des Exporter eine Methode zu vererben (inherit).

Dieser Verwendung der Begriffe wird sich kaum jemand anschließen. Vererbung mit Perl geschieht beispielsweise mit CPAN:parent. Der CPAN:Exporter exportiert Namen aus der Symboltabelle und hat mit Objektorientierung nichts am Hut.

View full thread Perl OO und Vererbung