Einzelnen Beitrag anzeigen

guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#49

Re: denkfehler; array-> dynarray

  Alt 11. Jan 2009, 09:46
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;
  Mit Zitat antworten Zitat