OOP2. Dynamische Objekte

In einem Spiel steht i.a. nicht fest, welche Steine zu welchem Zeitpunkt aktiv werden. Oft weiß man auch nicht, welche Steine überhaupt auf dem Spielfeld erscheint und wenn, wie lange sie im Spiel verbleiben. Ähnliches gilt auch für Datenbanken, bei denen ständig neue Datensätze erzeugt und alte gelöscht werden. Das statische Konzept, alle möglichen Instanzen einer Objektklasse bereits während der Entwicklungszeit (d.h. vor dem Kompilieren) anzulegen, ist zu unflexibel.

In vielen Fällen ist es besser, Instanzen einer Klasse während der Laufzeit dynamisch anzulegen und wieder zu entfernen. Diese dynamischen Instanzen werden im sog. Heap verwaltet. die Organisation des Heaps kann man getrost PASCAL überlassen, d.h. man muss sich nicht darum kümmern, wo und wie der Heap-Speicher vergeben wird. 

Bei der Erzeugung einer neuen Instanz einer Objektklasse werden Zeiger angelegt, die auf Daten, Eigenschaften und Methoden der Klasse weisen. Um zusätzliche Aufgaben beim Erzeugen (z.B. initialisieren mit best. Werten) erfüllen zu können, enthält jede Objektklasse die Methode constructor create, der man beim Initialisieren der Objekt-Instanz entsprechende Startwerte übergeben kann: PKW1 := TPKW.Create(4,6,90), wobei die Parameter z.B. die Anzahl der Räder, die Anzahl der Personen und die Motorstärke in kW bedeuten könnte (falls so vereinbart)

In der Urklasse aller Objekte -TObject - ist eine Methode destroy implementiert, die beim Löschen einer Instanz eines Objektes die Reorganisation des Heaps  bewirkt. In der Programmumgebung sind mit dem Entfernen einer Instanz eines Objekt oft noch verschiedene 'Aufräumarbeiten' verbunden, die man in einer Methode destructor implementieren kann. Im Beispiel unserer kleinen Fahrzeug-Datenbank wäre das z.B. das entfernen des betreffenden Datensatzes aus einer Liste sowie die Aktualisierung der Bildschirmanzeige. Der folgende Code zeigt eine mögliche Arbeitsweise eines constructors bzw. eines destructors

Aufgaben

1. Das Beispielprogramm (fahrzeuge2.pas) enthält Beispiele, wie man neue Instanzen der Klasse TFahrrad dynamisch erzeugt und löscht. Erweitere das Programm so, dass man das gleiche auch für Instanzen von TPKW und TLKW tun kann

2. Erweitere die destructoren so, dass der Datensatz in der Liste und im Anzeigefenster gelöscht wird.

3. Suche aus der Delphi-Hilfe Methoden, die den Zustand des Heap anzeigen. Erweitere das Programm so, dass die jeweilige Größe des heap angezeigt wird, wenn Objekte erzeugt bzw. gelöscht werden.

4. Versuche die Datensätze (auch verschiedener Objekte) auf der Festplatte zu speichern .

Zurück zu Delphi

© Dietrich Praclik