Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse oder Record auf sich selbst? (https://www.delphipraxis.net/130971-klasse-oder-record-auf-sich-selbst.html)

hronny 16. Mär 2009 23:07


Klasse oder Record auf sich selbst?
 
Was ich möchte steht bestimmt schon irgendwo im Forum nur finde ich es nicht. Vielleicht habe ich auch nur einen Denkfehler. Ich möchte ein Record (oder Klasse egal) erzeugen, die wiederum sich als Eigenschaft hat. Ich dachte damit kann ich so eine Art Hierarchie erzeugen, so ähnlich wie es bei XML ist.
Delphi-Quellcode:
  TGroups = class(TObject)
    id: Integer;
    name: String;
    main: Integer;
    fgroup_sorted: Boolean;
    SubGroups: Array of TGroups;
  end;
Oder macht man das ganz anders?

sx2008 16. Mär 2009 23:15

Re: Klasse oder Record auf sich selbst?
 
Zitat:

Zitat von hronny
Ich dachte damit kann ich so eine Art Hierarchie erzeugen...

Du kannst dir das Leben einfach machen und von TComponent ableiten (TGroups = class(TComponent)).
TComponent hat die Properties Components[] und ComponentCount.
Damit kann jedes TComponent-Objekt beliebig viele Unterkomponenten enhalten.

omata 16. Mär 2009 23:25

Re: Klasse oder Record auf sich selbst?
 
Das ist soweit ok, allerdings würde ich mindestens noch einen Destruktor spendieren, der die enthaltenen Objekte freigibt. Und ich würde die Eigenschaften besser schützen, das ist ja gerade der Vorteil einer Klasse gegenüber einem Record.

Reinhard Kern 17. Mär 2009 02:36

Re: Klasse oder Record auf sich selbst?
 
Zitat:

Zitat von hronny
.. Ich möchte ein Record (oder Klasse egal) erzeugen, die wiederum sich als Eigenschaft hat.

Hallo,

kein Problem mit einer Klasse, und gut geeignet für Baumstrukturen. Beispiel:

Delphi-Quellcode:
type

  TCPAObject = class;

  TCPARootObject = class;

  TCPADataObject = class
    ObjCode : TCPACodeStr;
    Root : TCPARootObject;
    Parent : TCPADataObject;
    Next : TCPADataObject;
    KeyWord : TCPAKeyWordStr;
    Depth : integer;
 {$IFDEF DebugWindow} SeqNumber : integer; {$ENDIF}
    constructor create (pRoot : TCPARootObject; pParent : TCPAObject);
    procedure GetNextObject (var CO : TCPADataObject);
    end;

  TCPAObject = class (TCPADataObject)
    SubKeyWord : TCPAKeyWordStr;
    ItemNumber,StringNumber : integer;
    ActDetail : TCPADataObject;
    function NextChar : Char;
    procedure UnGetChar;
    ....
Hier wird nur das Root-Objekt erzeugt und eine XML-artig strukturierte (Text)Datei übergeben, dann erzeugen sich die Objekte selbst (abhängig von ObjCode) bis die Datei abgearbeitet ist.

Gruss Reinhard

hronny 17. Mär 2009 20:14

Re: Klasse oder Record auf sich selbst?
 
Danke, das sind ja eine Menge Antworten in der kurzen Zeit :thumb: . Jetzt muss ich mal hier durchspielen, was am besten ist.

mr_emre_d 17. Mär 2009 22:12

Re: Klasse oder Record auf sich selbst?
 
Ich glaube das was du suchst sind Listen:

Delphi-Quellcode:
PMeineListe = ^TMeineListe;
TMeineListe = record
  Wert1: String;
  Wert2: Integer;
  Selbst: PMeineListe;
end;

quendolineDD 17. Mär 2009 22:16

Re: Klasse oder Record auf sich selbst?
 
Aber ein Zeiger in der Instanz selber auf die eigene Instanz ist doch total sinnlos. Er wird eher Hier im Forum suchenverkettete Listen meinen.

Cyf 17. Mär 2009 22:17

Re: Klasse oder Record auf sich selbst?
 
Vielleicht liegt das jetzt an meinen Geschmack und die OOP-Fetischisten werden mich jetzt steinigen :wink: , aber ist zur Verwaltung von Bäumen nicht eine Klasse, die einen Zeiger auf den Root kapselt und als Aufbau des Baums Records die aufeinander Zeiger enthalten sinnvoller? Bei der Benutzung von außen (außerhalb dieser Klasse) hat man dann trotzdem nur mit einem schönen Interface der Klasse zu kämpfen, während sie innen organisiert sein kann, wie sie will, und innen erspart man sich den nicht unbeträchlichen Overhead, für jedes Element ein Objekt zu erzeugen.

mr_emre_d 17. Mär 2009 22:18

Re: Klasse oder Record auf sich selbst?
 
Lol .. wer sagt dann das die Instanz auf sich "selbst" zeigt ?! Damit meinte ich nur, dass es vom selben Typ ist! Du könntest genauso Next, Previous hinschreiben .. das ist nukke.

MfG

quendolineDD 17. Mär 2009 22:23

Re: Klasse oder Record auf sich selbst?
 
@Cyf:
Das würde aber nicht dem Ansatz von OOP entsprechen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Seite 1 von 2  1 2      

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