Einige Programmiersprachen wie C++ und Delphi
unterscheiden zwischen statischen und virtuellen Methoden. Virtuelle
Methoden können überschrieben werden, und sie können abstrakt sein. Diese
Angaben spielen eine Rolle, wenn eine Variable eines bestimmten
Klassentyps eine Instanz einer abgeleiteten Klasse enthält. Sie bestimmen
dann, welche Implementierung beim Aufruf der Methode aktiviert wird. |
Was sind statische Methoden? |
|
Statische Methoden sind der Standard in Delphi-OOP und können besonderes schnell ausgeführt werden, weil sie immer exakt auf dasselbe Codestück zugreifen und dieselbe Operation ausführen. |
Beispiel: TLinie = class Sie können nicht überschrieben werden. Eine statische Methode mit demselben Namen in einer Unterklasse überdeckt (ersetzt) einfach die geerbte. Damit ist auch ihre Schwäche beschrieben. Der Käufer
eines compilierten Listenmoduls, das mit statischen Methoden erstellt
wurde, kann damit immer nur die gleichen Typen bearbeiten und es nicht für
etwas anderes erweitern. Aus diesem Dilemma helfen virtuelle Methoden, bei
denen erst zur Laufzeit entschieden wird, mit welchem Typ sie ablaufen.
Daraus ergibt sich die Möglichkeit, ein compiliertes Bibliotheksmodul auch
nachträglich zu erweitern, ohne dass einem der Quellcode zur Verfügung
steht. |
|
Virtuelle Methoden können im Gegensatz zu statischen Methoden in abgeleiteten Klassen überschrieben werden. Beim Aufrufen einer überschriebenen Methode bestimmt nicht der deklarierte, sondern der aktuelle Typ (also der Typ zur Laufzeit) der im Aufruf verwendeten Klassen- bzw. Objektvariable, welche Implementierung aktiviert wird. |
1. Überschreiben Beim Darstellen von verschiedenen Figuren auf dem Bildschirm ist klar, daß alle die Methode Zeigen haben, aber jede Figur anders gezeichnet wird. Mit Hilfe der Direktive virtual können Methoden als virtuell deklariert werden. TFigur = class TLinie = class (TFigur) Um eine Methode zu überschreiben, braucht sie nur mit der Direktiven override erneut deklariert zu werden. Dabei müssen Reihenfolge und Typ der Parameter sowie der Typ des Rückgabewertes (falls vorhanden) mit der Deklaration in der Oberklasse übereinstimmen.
Wenn man aus einem bestimmten Grund eine virtuelle Methode überdecken will, gibt der Compiler Warnungen aus, die mit Hilfe der Anweisung reintroduce verhindert werden können, wenn sie stören. Ein Beispiel: function IstGleich : boolean; virtual; // in der Oberklasse function IstGleich : boolean; reintroduce; // in der Unterklasse
Unterschied zwischen Überschreiben und Überdecken Wenn in einer Methodendeklaration dieselben Bezeichner- und Parameterangaben wie bei einer geerbten Methode ohne die Anweisung override angegeben werden, wird die geerbte Methode durch die neue Deklaration verdeckt. Beide Methoden sind jedoch in der abgeleiteten Klasse vorhanden, in der die Methode statisch gebunden wird.
3. Überladen Man kann mehrere Routinen mit identischen Namen in demselben Gültigkeitsbereich deklarieren. Dieses Verfahren wird Überladen genannt. Überladene Routinen müssen mit der Direktive overload deklariert werden und unterschiedliche Parameterlisten haben: function Divide(X, Y: Real): Real; overload; function Divide(X, Y: Integer): Integer; overload;
|
Hilfe - welche Methode soll ich nehmen? Statische Methoden:
Virtuelle Methoden:
Man kann aber nichts falsch machen, wenn man wenn alle Methoden virtuell deklariert. |
(Dieser Text ist eng an das Delphi 4 Hilfesystem angelehnt) |
© 05. Oktober 2008 Siegfried Spolwig |
|