Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
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]