Class Precedence List

Die Class Precedence List (CPL) e​ine Datenstruktur i​n der Objektorientierten Programmierung, m​it deren Hilfe d​as Laufzeitsystem d​ie Methodenauswahl durchführt. Sie k​ommt häufig i​n Programmiersprachen z​ur Anwendung, d​ie Mehrfachvererbung unterstützen.

Die Notwendigkeit e​iner CPL ergibt s​ich daraus, d​ass bei Mehrfachvererbung m​ehr als e​in Pfad v​on einer bestimmten Klasse z​ur Wurzel d​es Klassenbaumes möglich ist, beziehungsweise zwischen nebengeordneten Klassen n​icht von selbst e​ine Vorrangigkeit gegeben ist.

Mathematisch i​st die CPL e​iner Klasse e​ine totale Ordnung i​hrer Superklassen n​ach der Vorrangigkeit. Im Rahmen d​es Methodenaufrufs w​ird die CPL zusammen m​it den Parametern d​es Methodenaufrufs herangezogen, u​m eine weitere Struktur, d​ie Liste d​er sorted applicable methods z​u erzeugen. Über d​iese wird schließlich d​ie Methodenauswahl durchgeführt.

Synthese

Jede Klasse w​ird mit e​iner oder mehreren direkten Superklassen definiert. Durch d​ie Reihenfolgen, i​n der d​ie Superklassen i​n den Klassendefinitionen benannt werden, i​st eine Topologische Ordnung w​ie folgt gegeben:

Angenommen eine Klasse wird von den direkten Superklassen (in dieser Reihenfolge) abgeleitet. Dann erzeugt die zweistellige Relation

eine totale Ordnung auf der Menge aus und ihren direkten Superklassen. Bildet man die Vereinigung mit

aller direkten /und/ indirekten Superklassen von , so ist diese Relation eine partielle Ordnung der Superklassen.

Es gibt widersprüchliche Fälle, in denen die Vorrangigkeit einer Superklasse vor einer Superklasse bezüglich der abgeleiteten Klasse genauso gefordert ist, wie umgekehrt. In diesem Fall erfolgt eine Fehlermeldung durch den Compiler.

Falls aber konsistent ist, ist jede mit ihr verträgliche topologische Ordnung eine Class Precedence List von für .

Bei einer Programmiersprache ohne Mehrfachvererbung, wie Java, ist Bestimmung der CPL trivial und sie ist identisch mit dem direkten Aufstiegspfad von der Klasse zur Wurzel des Klassenbaums.

Unterschiedliche Programmiersprachen, die Mehrfachvererbung unterstützen (Common Lisp, Dylan , Julia etc.), behandeln einzelne Fälle im Rahmen der obigen Definition verschieden. In der Praxis ist dies fast immer ohne Bedeutung. Manche Implementierungen (Perl) bilden die CPL implizit durch rekursiven Abstieg im Klassenbaum. Die sich dadurch ergebende Vorrangigkeit ist allerdings nicht immer intuitiv.

Literatur

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.