Klaus Mock: vererbung

Beitrag lesen

Hallo,

Wie ist es denn bei anderen Sprachen implementiert?

Einige verbieten Mehrfachvererbung, und sind somit ganz einfach aus dem Schneider. Andere verbieten konsequent Doppeldeutigkeiten. Andere zwingen dich dazu, falls Doppeltdeutigkeiten auftreten, exakt zu definierieren, von welcher Basisklasse die betreffende Eigenschaft oder Methode benutzt werden soll.

Nun, ich kann dein Argument verstehen; es ist wohl auch etwas von der "Funktionsweise" des Programmes abhängig, was mehr Sinn macht. Nur für mein Projekt hatte ich folgendes:

Klasse Website extends DataNode (speicherung der Daten),
                       Website::Integrity (Datenintegrität wahren)
                       Website::Sync (Synchronisation mit anderem S.)
Eine Andere Klasse, welche vollständig von Website erbt, jedoch auch wieder durch Integrity und Sync erweitert werden

=> @ISA = qw(Website VWebsite::Integrity VWebsite::Sync);

Also, wenn ich jetzt die Methode checkIntegrity von VWebsite starte, wird er mir die entsprechende Integrity-Methode von Website->Website::Integrity aufrufen, was ja _falsch_ ist, da ich nicht die Integrität der Website sondern der virtuellen Website (VWebsite) testen will... Für meine Anwendung ist also das depth-first-Verfahren schlecht...

In diesem konkreten Fall müßte eine andere Reihenfolge das gewünschte Ergebnis bringen.

@ISA = qw(VWebsite::Integrity VWebsite::Sync Website);

Perl bietet Dir aber auch die Möglichkeit, die Methode vollständig (mit Klasse) anzugeben, wodurch Du auch jederzeit genau spezifizieren kannst, welche Methode Du jetzt verwendest:

$self->VWebsite::Integrity::checkIntegrity();

Ich hätte natürlich auch einfach in jedes Modul eine Methode einbauen können, welche den gleichen String zurückgiebt, aber das war mir zuviel arbeit (sind ca. 30 Klassen); da mache ich lieber eine Methode an _einem_ Ort, die vielleicht etwas komplizierter ist...

Alternativ hättest Du aber auch diese Methode in einer eigenen Klasse implementieren können, von der dann alle anderen erben.

Grüße
  Klaus