Ich habe mir hier eine Implementierung für
prototypenbasierte Objekte gebaut.
Damit ist es möglich, Daten-Objekte z.B. so zusammenzubauen:
Delphi-Quellcode:
var
haus, tuer, FensterBase, Fenster1, Fenster2 : OleVariant;
begin
haus := CreateOleObject('PropertyStoreLib.PropertyStore');
haus.Values['Baujahr'] := 1978;
haus.Values['Preis'] := 145000.0;
haus.Values['Architekt'] := 'Anton Nullblick';
tuer := CreateOleObject('PropertyStoreLib.PropertyStore');
tuer.Values['Type'] := 'Door';
tuer.Values['Preis'] := 870.0;
tuer.Values['Hersteller'] := 'Kalmann GmbH';
FensterBase := CreateOleObject('PropertyStoreLib.PropertyStore');
FensterBase.Values['Type'] := 'Window';
FensterBase.Values['Hersteller'] := 'unbekannt';
FensterBase.Values['Preis'] := 0;
Fenster1 := FensterBase.Clone; // FensterBase wird zum Prototyp für Fenster1
Fenster1.Values['Preis'] := 350.0;
Fenster1.Values['Breite'] := 1.60;
Fenster1.Values['Hoehe'] := 1.10;
Fenster2 := FensterBase.Clone;
Fenster2.Values['Preis'] := 460.0;
Fenster2.Values['Breite'] := 2.25;
Fenster2.Values['Hoehe'] := 1.10;
Fenster2.Parent.Values['Hersteller'] := 'Braas';
haus.Values[1] := tuer; // tuer wird zum Unterobjekt vom haus
haus.Values[2] := Fenster1;
haus.Values[3] := Fenster2;
Wer sich mit prototypenbasierten Programmiersprachen wie JavaScript, Self oder IO auskennt,
kann mir vielleicht Hinweise geben, was man noch beachten muss.
Da man ja ganz beliebig Objekt in Objekt verpacken kann, darf ein Kind-Objekt sein Vater-Objekt enthalten was dann aber zu dem Problem führt, dass der Speicher wegen zirkularen Referenzen nicht mehr freigegeben wird.
Ideen, Anmerkungen?