hotti: Frameworks..

Beitrag lesen

hi,

Meiner Auffassung nach sind das ganz normale Methodenaufrufe, die du da beschreibst. Auch wenn es Methoden von anderen Objekten sind, zu denen du eine Referenz hast, wird das noch keine Delegation. Die fängt für mich erst da an, wo bei C# das Schlüsselwort delegate ins Spiel kommt.

Gelegentlich wird die Delegation als Entwurfsmuster bezeichnet und ein Solches ist unabhängig von der Programmiersprache. PHP und Perl kennen kein Schlüsselwort 'delegate', das Delegieren von Methoden ist jedoch sowohl in PHP als auch in Perl möglich und oftmals gegenüber einer Vererbung die zweckmäßigere Lösung wenn es darum geht, Beziehungen zwischen Klassen herzustellen.

Zweckmäßigkeit:
-Vererbung macht Sinn, wenn alle Methoden der Basisklasse in der Subklasse gebraucht werden.
-Delegation macht Sinn, wenn nur eine überschaubare Anzahl an Methoden einer fremden Klasse in der eigenen Klasse gebraucht werden.

Praktisches Beispiel:

  
package Manager; # meine Basisklasse  
require CGI;  
  
# Konstruktor, meine Instanz bekommt als Attribut  
# eine Instanz der Klasse CGI  
sub new{  
  my $class = shift;  
  return eval{  
   bless{  
     CGI => new CGI,  
     # weitere eigene Attribute  
   };  
  };  
}  
  
# die Methode CGI::param wird delegiert  
# in package Manager  
sub param{  
  my $self = shift;  
  return $self->{CGI}->param(@_);  
}  
  
# damit kann die Instanz der Klasse Manager die param()-Methode  
# wie gewohnt aufrufen  
# diese Delegation funktioniert in PHP genauso  

Hotti