Einzelnen Beitrag anzeigen

guidok

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

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 15:09
Zitat von Luckie:
Warum machst du aus den Viechern keine Objekte mit Eigenschaften und Methoden? Verwalten würde ich das ganze dann in einer Containerklasse: http://www.michael-puff.de/Artikel/C...rKlassen.shtml
Ich würde da auch objektorientiert arbeiten. Das drängt sich ja geradezu auf.

Delphi-Quellcode:

type
  TViech = class(TCollectionItem)
  private
    FLaenge: Real;
    FHaare: Real;
    //..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;
    //..weitere Eigenschaften
  end;

constructor TViech.Create(Collection: TCollection);
begin
  inherited;
  Laenge := 1; //Startparameter für ein Viech setzen
  Haare := 1;
end;

//Die Methode Assign brauchst du um ein Viech einem anderen Viech zuweisen zu können
procedure TViech.Assign(Source: TPersistent);
begin
  if Source is TViech then begin
    FLaenge := TViech(Source).FLaenge;
    FHaare := TViech(Source).FHaare;
    //...weitere Eigenschaften
  end;
end;
Die ganzen Viecher speicherst du in einer Collection ab.

Delphi-Quellcode:
type
  TViecher = class(TCollection)
  protected
    function GetViech(Index: Integer): TViech;
    procedure SetViech(Index: Integer; Value: TViech);
  public
    function Add: TViech;
    function Insert(Index: Integer) : TViech;
    property Viech[Index: Integer]: TViech read GetViech write SetViech; default;
  end;

function TViecher.GetViech(Index: Integer): TViech;
begin
  Result := TViech(inherited GetItem(Index));
end;

procedure TViecher.SetViech(Index: Integer; Value: TViech);
begin
  inherited SetItem(Index, Value);
end;

function TViecher.Add: TViech;
begin
  Result := TViech(inherited Add);
end;

function TViecher.Insert(Index: Integer): TViech;
begin
  Result := TViech(inherited Insert(Index));
end;
Damit stehen dir alle Wege offen.

Delphi-Quellcode:

//Irgendwo im Hauptprogramm...
var BlaueViecher: TViecher;
    RoteViecher: TViecher;

BlaueViecher := TViecher.Create(TViech); //Hier wird der Collection gesagt, von welchem Typ ihre Items sind!
RoteViecher := TViecher.Create(TViech);

//Neues Viech hinzufügen
BlaueViecher.Add //Fügt ein neues Viech mit den Standardvorgaben an

//Da "Add" eine Funktion ist, geht auch das:

var tempViech: TViech;

tempViech := BlaueViecher.Add; //tempViech verweist jetzt auf das neu angefügte Viech INNERHALB der Collection
tempViech.Mutiere; //und kann damit sofort weiter bearbeitet werden

//Eigenschaft eines Vieches ändern
BlaueViecher.Viech[1].Haare := 2;

//oder einem anderen Viech zuweisen
BlaueViecher.Viech[2].Assign(BlaueViecher.Viech[1]);

//oder mutieren
BlaueViecher.Viech[2].Mutiere;

//Die Anzahl der Viecher feststellen
BlaueViecher.Count;
  Mit Zitat antworten Zitat