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

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]

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!