05.11.2013 Aufrufe

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Vergleich</strong> <strong>von</strong> <strong>Delphi</strong> <strong>und</strong> <strong>Visual</strong> <strong>C++</strong> - Kapitel 2C<br />

Den Aufruf einer virtuellen Methode per Methoden-Index kann man sich zur Laufzeit grob so vorstellen:<br />

1. Aktuelles Objekt <strong>und</strong> Klassentyp dieses Objekts ermitteln.<br />

2. VMT-Array für diesen Klassentyp aufsuchen.<br />

3. Element VMT_ARRAY[MethodenIndex] auslesen. Man erhält die Einsprung-Adresse, an der die<br />

Funktion beginnt, die für das aktuelle Objekt aufgerufen werden soll.<br />

4. Zu dieser Adresse springen <strong>und</strong> Abarbeitung beginnen. Als Parameter wird der this- / Self - Parameter<br />

(implizit) an die Methode übergeben.<br />

Der Aufruf virtueller Methoden läuft, trotz des großen Aufwands, recht schnell ab, benötigt aber natürlich minimal mehr Zeit als der<br />

Aufruf statischer Methoden.<br />

Zur Realisierung dynamischer Methoden legt Object Pascal neben der VMT noch eine zweite, dynamische Methodentabelle (DMT) für<br />

jede Klasse an. Auch diese Tabelle stellt ein Array <strong>von</strong> Pointern auf Methoden dar, ist jedoch anders aufgebaut als die VMT. Zu jedem<br />

Pointer (=Value) existiert ein numerischer Schlüssel (=Key). Beim Aufruf einer dynamic- Methode wird nicht einfach ein Index zum<br />

Zugriff verwendet, sondern das Array anhand des Keys (der die Rolle des Indexes übernimmt) durchsucht. Anders als bei den VMTs hat<br />

jede Klasse nur die Methoden-Einträge in der DMT, die mit dynamic neu deklariert bzw. die mit override als polymorphe Nachfahren einer<br />

dynamischen Methode deklariert wurden. Dafür besitzen DMTs einen Zeiger, der auf die DMT der Elternklasse verweist. Wenn die Suche<br />

nach dem Key in der DMT der Klasse erfolglos blieb, werden die DMTs der Elternklasse(n) durchsucht, notfalls bis zurück zur DMT der<br />

Klasse TObject.<br />

Dynamische Methoden bieten nur dann Vorteile, wenn eine Basisklasse sehr viele virtuelle Methoden <strong>und</strong> eine Anwendung zusätzlich sehr<br />

viele Nachkommen-Klassen deklariert, <strong>und</strong> zwar überwiegend ohne override. Der Mechanismus der dynamischen Methoden ist<br />

hauptsächlich für die Implementierung <strong>von</strong> Botschaftsbehandlungsmethoden gedacht. Gegenüber "normalen" virtuellen Methoden ist der<br />

Zugriff langsamer, dafür wird durch eine DMT aber weniger Speicherplatz verbraucht als für eine entsprechende VMT. Eine virtuelle<br />

Methodentabelle für eine bestimmte Klasse ist immer mindestens so groß, wie die VMT der Elternklasse.<br />

Botschaftsbehandlungs-Methoden sind ebenfalls nur in Object Pascal realisiert. Sie dienen dazu, benutzerdefinierte Antworten auf<br />

dynamisch zugeteilte Botschaften zu implementieren. Sie sind intern als dynamische Methoden realisiert.<br />

Windows-Programme werden oft durch einen Strom <strong>von</strong> Ereignissen aktiviert, die durch äußere Einflüsse hervorgerufen wurden.<br />

Anwendungen, die eine Benutzerschnittstelle aufweisen, werden durch ereignis-auslösende Eingabegeräte wie Tastatur <strong>und</strong> Maus bedient.<br />

Jedes Drücken einer Taste, jeder Klick mit der Maus erzeugt Botschaften, die die Anwendung empfängt. Es ist die Aufgabe der<br />

Anwendung, auf diese Botschaften sinnvoll im Sinne der Anwendung zu reagieren. Botschaftsbehandlungs-Methoden eignen sich<br />

hervorragend, um benutzerdefiniert auf Windows-Botschaften reagieren zu können. Folgerichtig setzt <strong>Delphi</strong>s Klassenbibliothek<br />

Botschaftsbehandlungs-Methoden dazu ein, um die Behandlung <strong>von</strong> Windows-Botschaften zu implementieren. Andererseits sind aber die<br />

Botschaftsbehandlungs-Methoden vollkommen unabhängig vom Nachrichtensystem Windows.<br />

Eine Methode wird zu einer botschaftsverarbeitenden Methode, indem an ihre Deklaration das Schlüsselwort "message", gefolgt <strong>von</strong> einer<br />

ganzzahligen, positiven Konstanten angehängt wird. Diese Konstante ist der Botschaftsbezeichner.<br />

type<br />

TMyButton = class(TButton)<br />

procedure WMButton1Down(var Message); message WM_LBUTTONDOWN;<br />

...<br />

end;<br />

Zusätzlich muß die Methode eine Prozedurmethode sein, die über genau einen var-Parameter beliebigen Typs verfügt. Auch ein<br />

untypisierter var-Parameter ist erlaubt, so daß die Übergabe beliebiger Typen möglich wird. Wichtig für das Funktionieren des<br />

Botschaftsmechanismus ist nur, daß die ersten vier Byte des var-Parameters die Nummer der Botschaft enthalten. Die darauf folgenden<br />

Daten können vom Programmierer frei bestimmt werden.<br />

http://ourworld.compuserve.com/homepages/praxisservice/kapit2c.htm (15 of 33) [19.05.2000 15:30:15]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!