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

renee
 2017-07-13 13:58
#186853 #186853
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
2017-07-12T06:14:10 rosti
In dieser Konsequenz kann ein Objekt gar keine Methoden anderer Klassen aufrufen,
Es geht alles ;-)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use v5.10;

package A {
    sub new { return bless {}, shift; }
    sub test { say __PACKAGE__ }
}

package B {
    sub new { return bless {}, shift; }
    sub test { say __PACKAGE__ }
}

my $a = A->new;
$a->B::test();
$a->test;


Da ruft das Objekt $a die Methode test der Klasse B auf.

2017-07-12T06:14:10 rosti
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.


Mit Mehrfachvererbung kann man sich einige Probleme einhandeln wenn man nicht aufpasst. Mit CPAN:Moose gibt es so was Schönes wie Rollen... Damit kann man Methoden in mehreren Klassen zur Verfügung stellen ohne dass man gleich mit Vererbung zu kämpfen hat.

2017-07-12T06:14:10 rosti
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.
Vorsicht vor zirkulären Referenzen!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread Kritik an OOP