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 />

Auch in <strong>C++</strong> werden für gewöhnlich Klassenrumpf <strong>und</strong> Methodenimplementierung <strong>von</strong>einander getrennt. Der Klassenrumpf, die<br />

Klassen-Schnittstelle, wird <strong>von</strong> der Klassen-Implementierung entkoppelt. Die Methoden-Deklarationen stellen dann eine Art<br />

Forward-Deklaration dar. Der Klassenrumpf wird in Header-Dateien, die Methodenimplementierung in CPP-Moduldateien definiert.<br />

Entsprechend wird in Object Pascal der Klassenrumpf im Interface-Abschnitt <strong>und</strong> die Methoden-Implementierung im<br />

Implementation-Abschnitt einer Unit eingefügt. Über Include- bzw. Uses-Anweisungen können in anderen Modulen bestehende Klassen in<br />

beiden Sprachen leicht bekannt gemacht werden.<br />

Klassen belegen keinen Speicher, da sie nur eine spezielle Typ-Deklaration darstellen. Eine Speicherbelegung erfolgt erst beim<br />

Instanzieren <strong>von</strong> Klassen. Eine Klasseninstanz heißt Objekt. <strong>C++</strong> gestattet das Anlegen statischer <strong>und</strong> dynamischer Instanzen.<br />

In Object Pascal sind dagegen, genauso wie z.B. in der "Internet-Sprache" Java der Firma Sun Microsystems, ausschließlich dynamische<br />

Objekt-Instanzen zulässig. Der Vorschlag des ANSI-ISO-Komitees für ein Objekt-Modell in Pascal [8, S. 12 / S. 44], genannt<br />

Referenzmodell, wurde fast vollständig in Object Pascal realisiert. Eine Variable vom Typ einer Klasse enthält kein Objekt, sondern einen<br />

Zeiger. Dieser Zeiger kann zur Laufzeit ein Objekt referenzieren oder den Wert nil enthalten um anzudeuten, daß er gerade kein gültiges<br />

Objekt referenziert. Beim Erzeugen eines neuen Objekts wird dem Zeiger die Adresse des Speicherbereiches zugewiesen, der für das<br />

Objekt reserviert wurde. D.h., alle Objekte werden auf dem Heap angelegt <strong>und</strong> belegen immer nur 4 Byte im Stack-Speicher. Der Heap<br />

bezeichnet den Speicher, den eine Anwendung belegt, um z.B. dynamische Variable erstellen zu können.<br />

Felder <strong>und</strong> Methoden dynamisch angelegter Objekte werden normalerweise wie bei gewöhnlichen dynamischen Variablen angesprochen:<br />

Zeiger->Feld in <strong>C++</strong> <strong>und</strong> Zeiger^.Feld in Object Pascal. Da nun aber in Object Pascal sowieso alle Objekte dynamisch angelegt werden<br />

<strong>und</strong> Zeiger darstellen, kann der Compiler beim Zugriff auf die Elemente eines Objekts eine Dereferenzierung automatisch durchführen. Es<br />

ist weder notwendig noch möglich, den Zeiger explizit zu dereferenzieren. Ein Objekt stellt sich trotz dynamischer Allokation wie eine<br />

statische Variable dar. Ein Zugriff erfolgt, ebenso wie in Java, in der Form ObjektZeiger.Feld bzw. ObjektZeiger.Methode. Beim Zugriff<br />

auf das gesamte Objekt wird der Zeiger nicht dereferenziert. Statt dessen wird mit dem Wert des Zeigers, also der Adresse der Instanz<br />

gearbeitet. Das wirkt sich insbesondere bei Zuweisungen aus.<br />

Das Object Pascal Referenzmodell wird aufgr<strong>und</strong> seiner Eigenschaft des "automatischen Dereferenzierens" mitunter "zeigerloses<br />

Konzept" genannt. Zeigerlos deshalb, weil vor dem Programmierer die Tatsache verborgen wird, daß er in Wahrheit ständig mit Zeigern<br />

hantiert. Tatsächlich scheint es für Programmier-Anfänger hilfreich zu sein, zunächst <strong>von</strong> Zeigern <strong>und</strong> der Zeiger-Syntax verschont zu<br />

bleiben. Das Referenz-Modell wird vielfach als leichter verständlich <strong>und</strong> einfacher lehrbar empf<strong>und</strong>en.<br />

Instanzierung, Nutzung <strong>und</strong> Freigabe des Objekts Komplex kann in beiden Sprachen so erfolgen:<br />

V<strong>C++</strong><br />

statisch<br />

Komplex a;<br />

a.Zuweisung(10, 5);<br />

a.Ausgabe();<br />

dynamisch<br />

Komplex* b;<br />

b = new Komplex;<br />

b->Zuweisung(10, 5);<br />

b->Ausgabe();<br />

delete b;<br />

var b: Komplex;<br />

Object Pascal<br />

keine statische Instanzierung möglich<br />

b:= Komplex.Create;<br />

b.Zuweisung(10, 5);<br />

b.Ausgabe;<br />

b.Free;<br />

dynamisch<br />

Statische Objekte werden, wie alle anderen statischen Variablen auch, automatisch freigegeben, sobald ihr Gültigkeitsbereich verlassen<br />

wird.<br />

Beachtet werden muß jedoch, daß dynamisch erzeugte Objekte vom Programmierer selbst wieder freigegeben werden müssen, da sonst mit<br />

der Zeit Speicher-Löcher (=unbenutzter, nicht freigegebener Speicher) entstehen. Eine Einbettung in einem<br />

try/finally-Ressourcenschutzblock des Codes, der auf dynamisch erzeugte Objekte zugreift, ist ratsam, um eine sichere Freigabe des<br />

belegten Speichers zu erwirken.<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!