Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eindeutige ID für Erben eines Objekts ? (https://www.delphipraxis.net/66958-eindeutige-id-fuer-erben-eines-objekts.html)

raven_22 7. Apr 2006 05:15


Eindeutige ID für Erben eines Objekts ?
 
Hoffentlich bin ich hier in der richtigen Kategorie. :gruebel:
Wenn nicht dann bitte versieben.

Ich erzeuge ein Objekt mit der ID 0
Nun möchte ich andere Objekte von diesem Mutterobjekt ableiten.
Wie schaffe ich es dass sich die ID bei jeder Ableitung um eins erhöht ?


Delphi-Quellcode:
type

   tMyObject = object  // mein Objekt
        Name : string;
          ID : integer;  // ID = 0
end;

LG Marko

SirThornberry 7. Apr 2006 05:38

Re: Eindeutige ID für Erben eines Objekts ?
 
meinst du ableiten im richtigen Sinne mit Vererbung? Wenn dem so ist würde ich im Initialization-Abschnitt eine Art RegisterMethode des "Mutter"-Objectes aufrufen welche die ID um 1 erhöht und dann zurück gibt.

Wozu brauchst du das ganze? Vielleicht gibt es ja eine bessere Möglichkeit das Ziel zu erreichen ohne die ID erhöhen zu müssen.

raven_22 7. Apr 2006 06:15

Re: Eindeutige ID für Erben eines Objekts ?
 
Ja ableiten im Sinne von vererben. :sharkylinchen:
Wenn du es genau wissen willst, ich will eine Ameisenkolonie simulieren.
Um die einzelnen Objekte (Armeisen) identifizieren zu können will ich ihnen eine ID verpassen.
Es gibt also ein Grundobjekt mit der ID 0
Jedes Objekt was ich davon abeilte soll eine eigene eindeutige ID haben.
Dann gibt’s noch verschiedene Unterklassen, Königin, Arbeiter, Soldaten…

LG Marko

dataspider 7. Apr 2006 06:37

Re: Eindeutige ID für Erben eines Objekts ?
 
Hi,

ich würde es z.B. so machen:

Delphi-Quellcode:
interface

type
  TMyObject = class(TObject)
  private
    FID: Integer;
    FName: string;
  public
    constructor Create(const AName: string);
    property ID: Integer read FID write FID;
    property Name: string read FName write FName;
  end;

implementation

Var
  // Variable für ID
  AIndex: Integer = 0;

constructor TMyObject.Create(const AName: string);
begin
  inherited Create;
  FName := AName;
  FID  := AIndex;
  Inc(AIndex);
end;
Test:
Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
Var
  Ameise : TMyObject;
begin
  Ameise := TMyObject.Create('Gustav');
  ShowMessage(Format('Ameise %s Index %d', [Ameise.Name, Ameise.id]));
  Ameise := TMyObject.Create('Anton');
  ShowMessage(Format('Ameise %s Index %d', [Ameise.Name, Ameise.id]));
end;
Cu, Frank

DP-Maintenance 7. Apr 2006 06:50

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
\\"Hoffentlich bin ich hier in der richtigen Kategorie.\\" Leider nicht. In dieser Sparte sollen Vorschläge für die CodeLibrary und keine Fragen gepostet werden ;-)

Jens Schumann 7. Apr 2006 07:12

Re: Eindeutige ID für Erben eines Objekts ?
 
Hallo,
ich bin mich sicher das die Ameisen der Ameisenkolonie nicht standalone erzeugt werden.
Ich denke, dass die Ameisenkolonie die Collection für die einzelen Ameisen ist.
Im einfachsten Fall wäre die Ameisenkolonie ein TList-Nachfahre. Die function Add
liefert als Ergebnis die Anzahl der Elemente. Das wäre der dann ein prima Index
für die Ameisenobjekte. Dann könnte man sich auch globale Variablen sparen.

marabu 7. Apr 2006 07:13

Re: Eindeutige ID für Erben eines Objekts ?
 
Guten Morgen, Marko.

Wenn die Objekte keine Individue sind, dann kannst du auch einfach den Objektzeiger als Identifikation benutzen. Der einzige mir gerade einfallende Grund für eine selbstverwaltete Objekt-ID in einer Simulation ist die Identifikation eines Individuums - wenn du z.B. zu einem bestimmten Zeitpunkt wissen willst, wie es Ameise 42 geht. Das ist aber eher ungewöhnlich.

Grüße vom marabu

raven_22 7. Apr 2006 09:00

Re: Eindeutige ID für Erben eines Objekts ?
 
Wow die Vorschläge sind schon mal ganz gut, ist schon was brauchbares dabei.
Die Objekte sollen ganz Individuell sein und sich mehr oder weniger intelligent verhalten.
Und da jede Ameise sich sozusagen selber steuert, will ich wissen wer gerade was macht und so weiter.
Die Armeisen sollen ja auch Informationen miteinander austauchen, beispielsweiße zur Wegfindung.
Die Frage ist nur wie viele von diesen autonomen Objekten ich gleichzeitig laufen lassen kann ohne den Rechner zu sehr zu belasten.

Der Code von dataspider ist schon fast so wie ich’s wollte, hab ihn nur etwas abwandeln müssen.
Ich wollte nämlich kein TObject sondern nur ein Object, ohne das ganze Zeug was schon da ist.

Also erstmal Danke an euch alle, ich werd mal sehen wie weit ich komme.

LG Marko


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz