000
02.11.2006, 23:49 Uhr
~Gast
Gast
|
Hi.
Meine Frage ist eher theoretischer Natur und dreht sich darum, wieso der Polymorphismus mittels später Bindung realisiert ist?
Angenommen sei, es gibt eine Base-Class (Shape) und eine Sub-Class (Circle), wobei Circle die Methode Draw() von Shape überschreibt.
In jedem "Stück" Literatur über OOP (C++, Java, etc) heißt es:
"Eine Referenz eines bestimmten Typs / eine Funktion, die einen best. Typ erwartet kann NICHT wissen, ob es sich bei dem referenzierten Objekt um eben diesen bestimmten (erwarteten) Typ oder dessen "Unter-Typen" handelt!"
1) Das ist schon das ganze Problem. Bis auf die verwirrende OO-Terminologie an sich müste man diese o.g. Zitate doch zunächst einmal richtigstellen, denn nicht eine Referenz oder eine Funktion kann "NICHT wissen .... ", sonder der Compiler!
2) Wieso aber soll der Compiler diese Informationen zur Compilier-Zeit nicht wissen? Schließlich stehen diese doch im Source-Code ! Jedesmal, wenn man ein Objekt an eine Referenz zuweist oder an eine Funktion übergibt, dann sieht doch der Compiler (anhand seiner Tabellen und anderen Verwaltungs-Infos etc) von welchem Typ dieses Objekt ist, unabhängig davon, wo diese Übergabe / Zuweisung im Code stattfindet.
Nun existiert in jeder der beiden Klassen-Definitionen die Methode Draw() und der Compiler hat die Infos, welche Methode zu welcher Klasse gehört, kennt noch die Typen der zu übergebenden Objekte und kennt zudem noch die Vererbungs-Beziehungen etc .....
=> also kann man doch erwarten, dass der er anhand dieser Typ-Infos die entsprechende Methode auch STATISCH zur Compile-Zeit dem jeweiligen Objekt zuweisen kann und folglich zur richtigen Methode verzweigt !?!?!?
=> Kann man es nicht so ausdrücken, dass die späte Bindung eine Alternative für die statische Realisierung des polymorphen Verhaltens ist und/oder die bevorzugte Realisierung !?
Bin für eine technische und detailreiche Erklärung dankbar ;-) |