Thread Kritik an OOP (48 answers)
Opened by hlubenow at 2017-07-12 03:18

rosti
 2017-07-12 08:14
#186831 #186831
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
Das ist ein ziemlicher Unsinn der da verbreitet wird: Objekte senden Messages an Objekte -- So ein Stuss!

Objekte sind Instanzen von Klassen, nicht nur in Perl!

Und dann schauen wir doch mal in ein gutes Buch, wie z.B. Eric Foster Johnson definiert, was ein Objekt ist:

Quote
Ein Perl-Objekt ist eine Referenz die weiß zu welcher Klasse sie gehört.


In dieser Konsequenz kann ein Objekt gar keine Methoden anderer Klassen aufrufen, jeglicher Datenfluss spielt sich immer nur innerhalb einer Klasse ab! Stets wird dabei die Instanz als erstes Argument übergeben und steht somit grundsätzlich in jeder Methode zur Verfügung. Daraus ergibt sich eben auch, dass Daten nicht nur als Argument und Returnvalue ausgetauscht werden sondern auch im Objekt selbst referenziert sein können.

Wenn ein klassenübergreifender Datenaustausch stattfinden soll gibt es einmal die Möglichkeit der Vererbung: vererbt werden Eigenschaften und Methoden und siehe da, hier können selbstverständlich auch Daten fließen, siehe oben. Perl bietet überdies auch die Möglichkeit der Mehrfachvererbung.

Man sollte jedoch eine Klasse sehr genau kennen, bevor man deren Erbe antritt. Von daher bietet sich als zweite Möglichkeit für einen klassenübergreifenden Datenaustausch die Delegierung an, Beispiel:

Code (perl): (dl )
1
2
3
   my $self = bless {
      CGI => CGI->new,
   }, $class;


Und somit wird die eigene Instanz befähigt, Methoden der anderen Klasse aufzurufen. Das CGI-Objekt und dessen Eigenschaften sowie Referenzen beleiben jedoch strict getrennt von den anderen Eigenschaften der eigenen Klasseninstanz.

Für Delegierung gibt es mherere Begriffe, z.B. Aggregation und Dependency Injection, lass Dich davon nicht verblüffen. Vorzüglich jedoch eignet sich das Verfahren einer Factory dazu, Delegierungen in geregelten Bahnen ablaufen zu lassen derart dass die Übersicht nicht flöten geht. Schlecht hingegen ist es, weil es die Fehlersuche erschwert, Objekte zu übergeben. Über AUTOLOAD übrigens kannst Du sämtliche Methoden einer Factory schön übersichtlich in einem gesonderten Verzeichnis ablegen.

Ansonsten hab ich mir das Video nich weiter angeschaut, es ist schlichtweg Zeitverschwendung.

MfG

View full thread Kritik an OOP