Zitat von
vsilverlord:
Das mit der Collection sieht gut aus.
2 Fragen:
1. Ist die Anzahl der möglichen Viecher höher oder niedriger wie bei dem array, was ist der vorteil zum array [außer dass es eleganter ist und besser aussieht]
2. kann ich auch kollektion einer kollektion bilden? also angenommen, ich möchte alle viecher verändern, aber den Forschritt festhalten, in dem ich alle Versionen des Viechs habe?
Was ist der Vorteil? Naja, zunächst mal ist das eine elegante objektorientiere Programmierung. Die bringt dir natürlich auch den Vorteil, dass du dein Viech nur an einer Stelle (Deklaration von TViech) ändern musst und alle Viecher die Änderung mit machen. Allerdings, das sollte man nicht verschweigen, wird der Speicherbedarf wahrscheinlich etwas höher ausfallen (und noch höher, wenn du noch alle Vichversionen mit führen willst.) als bei einem Array.
Zur zweiten Frage. Das habe ich noch nicht probiert, aber im einfachsten Fall ist es so, dass du einfach im TVich noch eine Collection einbaust. Dabei sieht TViechVersion (TCollectionItem) und TViecherVersion(TCollection) im Prinzip genau so aus, wie TViech und TViecher bisher aussahen. Du kannst da natürlich die Methoden zum Mutieren weglassen, weil du nur Daten darin sichern willst.
Delphi-Quellcode:
type
TViech = class(TCollectionItem)
private
FLaenge: Real;
FHaare: Real;
FVersion: TViecherVersion;
//..weitere Eigenschaften
public
constructor Create(Collection: TCollection); override;
procedure Mutiere;
procedure Assign(Source: TPersistent);
//..weitere Methoden
property Laenge: Real read FLaenge write FLaenge;
property Haare: Real read FHaare write FHaare;
property Version: TViecherVersion read FVersion write FVersion;
//..weitere Eigenschaften
end;
nicht vergessen im Constructor:
FVersion := TViecherVersion.Create(TViechVersion);
und dazu brauchst du dann noch im Destructor:
FVersion.Free;
Die Methode "Mutiere" von TViech könnte dann so aussehen:
Delphi-Quellcode:
procedure TViech.Mutiere;
var tempVersion: TViechVersion;
begin
tempVersion := Version.Add;
tempVersion.Assign(self); //Die aktuelle Version des Viechs zuweisen, bin nicht sicher, ob das so klappt
//Eventuell könnte auch dies funktionieren, dann braucht man keine tempVersion -> probieren!
Version.Add.Assign(self);
//und jetzt wird fröhlich mutiert
Laenge := //irgendwas;
Haare := //irgendwas;
end;