Class Precedence List
Die Class Precedence List (CPL) ist eine Datenstruktur in der Objektorientierten Programmierung, mit deren Hilfe das Laufzeitsystem die Methodenauswahl durchfü…
Die Class Precedence List (CPL) ist eine Datenstruktur in der Objektorientierten Programmierung, mit deren Hilfe das Laufzeitsystem die Methodenauswahl durchführt. Sie kommt häufig in Programmiersprachen zur Anwendung, die Mehrfachvererbung unterstützen.
Die Notwendigkeit einer CPL ergibt sich daraus, dass bei Mehrfachvererbung mehr als ein Pfad von einer bestimmten Klasse zur Wurzel des Klassenbaumes möglich ist, beziehungsweise zwischen nebengeordneten Klassen nicht von selbst eine Vorrangigkeit gegeben ist.
Mathematisch ist die CPL einer Klasse eine totale Ordnung ihrer Superklassen nach der Vorrangigkeit. Im Rahmen des Methodenaufrufs wird die CPL zusammen mit den Parametern des Methodenaufrufs herangezogen, um eine weitere Struktur, die Liste der sorted applicable methods zu erzeugen. Über diese wird schließlich die Methodenauswahl durchgeführt.
Synthese
Jede Klasse wird mit einer oder mehreren direkten Superklassen definiert. Durch die Reihenfolgen, in der die Superklassen in den Klassendefinitionen benannt werden, ist eine Topologische Ordnung wie 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
- Common Lisp Standard – ANSI INCITS 226-1994 (R2004) ( vom 1. Januar 2014 im Internet Archive)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.