Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Vergleich</strong> <strong>von</strong> <strong>Delphi</strong> <strong>und</strong> <strong>Visual</strong> <strong>C++</strong> - Kapitel 2A<br />
Eine Funktion, die in zwei verschiedenen Klassen deklariert ist, kann dank des Polymorphismus unterschiedliche Aktionen ausführen.<br />
So könnte zum Beispiel das Objekt Fahrzeug aus der oben aufgeführten Klassenhierarchie eine Funktion "FAHR_LOS" definieren,<br />
die jedoch nur das Starten des Antriebswerks bewirkt. Die vererbten Klassen überladen "FAHR_LOS" so, daß Klasse Landfahrzeug<br />
die Antriebsenergie an vier Räder überträgt, während dessen Klasse Wasserfahrzeug diese an eine Schiffsschraube weiterleitet.<br />
Allgemeiner ausgedrückt heißt das, daß die endgültige Implementierung polymorpher Funktionen erst in den Unterklassen im Sinne<br />
der Verantwortlichkeiten der Klassen <strong>und</strong> Objekte implementiert werden. Unterschiedliche Objekte können beim Aufruf der gleichen<br />
Methoden oder beim Versenden derselben Nachrichten an sie auf ihre eigene, spezifische Art <strong>und</strong> Weise reagieren.<br />
Diese Flexibilität können Objekte nur deswegen aufweisen, weil sie mehrere dynamische Konzepte kennen <strong>und</strong> anwenden:<br />
● dynamische Typprüfung<br />
● dynamisches Binden (spätes Binden)<br />
● dynamisches Laden<br />
Statische Typprüfungen während des Übersetzens <strong>von</strong> Programmen sind sehr nützliche Eigenschaften <strong>von</strong> Compilern <strong>und</strong> helfen,<br />
Fehler zu vermeiden. Die polymorphen Eigenschaften der objektorientierten Sprachen machen es aber manchmal notwendig, Typen<br />
erst dynamisch zur Laufzeit zu prüfen <strong>und</strong> auszuwerten. Zum Beispiel könnte eine Methode ein Objekt als Parameter mitliefern, ohne<br />
daß beim Übersetzen der genaue Typ dieses Objekts bekannt ist. Der Typ wird erst zur Laufzeit determiniert, ist möglicherweise auch<br />
erst jetzt bekannt.<br />
Dynamisches Binden, manchmal auch spätes Binden genannt, verschiebt beim Übersetzen die exakte Entscheidung, welche Methode<br />
aufzurufen ist. Vielmehr wird dies erst zur Laufzeit des Programms genau entschieden. Die Sprachen <strong>C++</strong> <strong>und</strong> Object Pascal<br />
verlangen stets statische, eindeutige Typangaben im Quelltext (strong compile-time type checking). Objekttypen sind direkt zum Typ<br />
der eigenen Basisklasse oder zu einem beliebigen anderen, vorhergehenden Klassentyp des Vererbungszweiges<br />
zuweisungskompatibel. D.h., spezialisiertere Objekte können immer so benutzt werden, als ob sie weniger spezialisierte Objekte<br />
wären. Durch statische Typkonvertierung oder dynamische Typprüfung mit anschließender Typkonvertierung kann aber auch<br />
umgekehrt ein Objekt einer weniger spezialisierten Klasse in ein Objekt einer höher spezialisierten Klasse umdefiniert werden.<br />
Insbesondere bei dynamischer Typprüfung kann der Compiler nicht wissen, welche Klassenmethoden er aufrufen muß. In <strong>C++</strong> <strong>und</strong><br />
Object Pascal wird die Entscheidung, welche genaue Methode aufzurufen ist, zur Laufzeit getroffen, wenn die Methode mit dem<br />
Schlüsselwort virtual deklariert worden ist. So deklarierte Methoden nennt man virtuelle Methoden. Erst zur Laufzeit des<br />
Programms wird festgelegt, welcher Funktionsrumpf an einen konkreten Funktionsaufruf geb<strong>und</strong>en wird.<br />
Neben dynamischer Typprüfung <strong>und</strong> dem dynamischen Binden unterstützen manche objektorientierte Programmiersprachen<br />
zusätzlich das Konzept des dynamischen Ladens. Programmteile werden dabei erst dann in den Arbeitsspeicher geladen, wenn sie<br />
tatsächlich benötigt werden. <strong>C++</strong> <strong>und</strong> Object Pascal unterstützen dynamisches Laden nur in soweit, wie es durch die Betriebssysteme<br />
mit dem Windows 32 - API ermöglicht wird: nämlich dynamisch ladbare Bibliotheken (DLL's) <strong>und</strong> systemweit einsetzbare Objekte<br />
nach dem OLE2 (Object Linking and Embedding Version 2) Verfahren.<br />
Es ist einleuchtend, daß durch das Ausnutzen der Prinzipien <strong>von</strong> Kapselung, Polymorphie, Überladen <strong>und</strong> dynamischer Eigenschaften<br />
Anwenderprogramme einfacher <strong>und</strong> besser lesbar werden <strong>und</strong> so letztlich auch leichter erweitert werden können. Ein Anwender<br />
kümmert sich nicht darum, wie eine Aufgabe ausgeführt wird, sondern nur darum, welche Aufgaben überhaupt erfüllt werden<br />
können, währenddessen die Objekte "für sich selbst verantwortlich" sind. So können unter anderem auch viel leichter ungültige<br />
Zustände <strong>von</strong> Attributen vermieden werden. Hierarchien bieten die Möglichkeit, ein besseres Verständnis des Anwendungsbereichs<br />
zu erlangen <strong>und</strong> sorgen für eine gewisse Ordnung. Jetzt ist es möglich, lokale Veränderungen in großen Systemen vorzunehmen, ohne<br />
daß globale Modifikationen nötig werden. Besonderes Gewicht erfahren diese Aussagen vor dem Hintergr<strong>und</strong>, daß 80% Zeit der<br />
Softwareentwicklung nicht mit dem Neu-Schreiben, sondern mit Testen, Wartung, Erweiterung <strong>und</strong> Fehlerbereinigung bestehender<br />
Systeme verbracht werden [4].<br />
http://ourworld.compuserve.com/homepages/praxisservice/kapit2a.htm (5 of 24) [19.05.2000 15:30:03]