Polymorphie, aus dem Griechischen für Vielgestaltigkeit.
Allgemeines |
ObjektOrientierteProgrammierung meint damit, daß verschiedene Objekte mit demselben Interface sich unterschiedlich verhalten können, wenn sie verschiedenen Klassen angehören.
Beispiel |
Standardbeispiel: Sei Shape eine Basisklasse (oder ein Interface) und habe die Methode draw. Wenn Circle und Rectangle beide von Shape abgeleitet sind, müssen sie sinnvollerweise die draw-Methode von Shape überschreiben (oder implementieren). Eine Clientklasse kann nun auf dem Interface Shape operieren, und auf jedem Shape-Objekt draw aufrufen - der Polymorphiemechanismus bewirkt nun, dass immer die Methode des eigentlichen Objekts aufgerufen wird.
Statische Polymorphie |
Wird die Polymorphie beim Kompilieren aufgelöst, so spricht man von statischer Polymorphie. Ein Beispiel dafür sind die Templates der SpracheCpp: Implementiert der angegebene Typ nicht alle benötigten Interfaces, so läßt sich das Template nicht instantiieren; die Kompilierung schlägt fehl. Sind alle Vorbedingungen erfüllt, so können jedoch zum Beispiel noch Inlinemethoden vom Kompiler expandiert werden bitte!.
Dynamische Polymorphie |
Wird die Polymorphie jedoch erst zur Runtime aufgelöst, so nennt man das dynamische Polymorphie oder LateBinding?. In der SpracheCpp wird dynamische Polymorphie mit virtuelle Funktionen implementiert. Ruft man eine VirtuelleFunktion? auf, wird über eine versteckte Tabelle der tatsächliche Typ der Instanz ermittelt und die entsprechende Funktion aufgerufen. Daher können virtuelle Funktionsaufrufe im Allgemeinen nicht ge-inlined werden. Auf der anderen Seite kann über die späte Bindung jedoch das dynamische Nachladen von Code oder RPC-Mechanismen transparent realisiert werden, da erst bei Funktionsaufruf der tatsächliche Maschinencode benötigt wird.
Anderes |
Da der Begriff nicht wirklich starr definiert ist, gibt es auch untergeordnete Bedeutungen, wie die Fähigkeit eines Objektes mehrere Typen zu haben. Diese werden aber nur sehr selten in der Praxis eingesetzt.
Siehe auch: TypSicherheit, AgileTypDeklarationen
DeleteMe?: Nachstehend noch Frage/Antwort von GregorRayman und IljaPreuß, die obigen Aufsatz ausgelöst hat, kann entsorgt werden, wenn Gregor die Antwort gesehen hat. -- 2003-01-29