AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ObjectList in ObjectList

Ein Thema von Captnemo · begonnen am 15. Nov 2012 · letzter Beitrag vom 15. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

ObjectList in ObjectList

  Alt 15. Nov 2012, 13:06
Hi,

ich möchte mir eine Klasse basteln, die selbst eine ObjectList beinhalten soll. Bzw. die Object in der der ObjectList sollten ggf. selbst auch eine ObjectListe beinhalten können.
Leider fehlt mir hierbei die Erfahrung mit Klassendesign.

Also so etwas wie:

Delphi-Quellcode:
Type
  TFahrer = class(TObject)
    nachname: string;
    vorname: string;
    alter: integer;
  end;

Type
  TAuto = class(TObject)
    Kennzeichen: string;
    Modell: string;
    Fahrer: TFahrer;
  end;

.
.
.
TMyAuto = class(TObjectList)
  protected
    function getItem(index: Integer): TAuto; virtual;
    procedure setItem(index: Integer; Auto: TAuto); virtual;
  public
    procedure items[index: Integer]: TAuto read getItem write setItem; default;
    .
    .
  end;
Jetzt kann ich mir die ObjectList mit

MyAuto:=TMyAuto.create; erzeugen.

Aber wie erzeuge ich in der Klasse TAuto die ObjectListe für TFahrer so, dass ich z.B. mit
MyAuto[0].Fahrer[1].Nachname zugreifen kann, oder mit MyAuto[0].Fahrer.Add(TestFahrer) Objecte hinzufügen kann?

Kann sein, dass ich mich jetzt hier nicht glücklich ausgedrückt habe, aber ich hoffe es ist deutlich geworden, was ich meine. Oder ist der Ansatz komplett falsch?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 13:21
Das Feld Fahrer muss einfach im Konstruktor von TAuto erzeugt und im Destruktor wieder freigegeben werden.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 13:32
Dabei muss man aber aufpassen, dass die eigene Referenz dann nicht als Element der Liste bzw. "Unterliste" auftaucht, sonst kann das ungeahnte Konsequenzen haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#4

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 13:38
Delphi-Quellcode:
Type
  TFahrer = class(TObject)
    nachname: string;
    vorname: string;
    alter: integer;
  end;

  TFahrerList = (TObjectList)
  protected
    function getItem(index: Integer): TFahrer ; virtual;
    procedure setItem(index: Integer; Auto: TFahrer); virtual;
  public
    procedure items[index: Integer]: TFahrer read getItem write setItem;
  end;

  TAuto = class(TObject)
    Kennzeichen: string;
    Modell: string;
    Fahrer: TFahrerList; // muss natürlich im Create/Destroy berücksichtigt werden
  end;


TAutoList = class(TObjectList)
  protected
    function getItem(index: Integer): TAuto; virtual;
    procedure setItem(index: Integer; Auto: TAuto); virtual;
  public
    procedure items[index: Integer]: TAuto read getItem write setItem; default;
    .
    .
  end;
PS: Virtual? oder doch lieber Override?

Geändert von DanielJ (15. Nov 2012 um 13:46 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 13:41
Tipp: guck dir mal TStrings und TStringList an. Da kannst du dir schon paar Anregungen holen.

Wobei, es gibt ja paar Möglichkeiten:

du erbst deine Klasse aus TObjectList. Selbstzugriff z. B. über Self (edit: ach, das hast du ja bereits)

oder es ist ein Feld, du erstellst es mit Create und arbeitest damit.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 13:44
PS: Virtual? oder doch lieber Override?
Macht ja nur Sinn, wenn Du von dieser Klasse noch ableiten willst. In dem Fall dann virtual in der Basisklasse und override und der abgeleiteten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 13:58
"Fahrer: TFahrerList;"

Auch wenn das grammatikalisch natürlich korrekt ist, würde ich das Feld auch FahrerList (o.ä. wie z.B. "Drivers") nennen, zumal es eine Klasse TFahrer gibt und Missverständnisse damit vorprogrammiert sind.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#8

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 14:42
Ich habe jetzt mal ein wenig rumprobiert. Soweit klappt das ganz gut, aber beim Erzeugen eines Objectes TKunde (analog zu dem oben genannten TAuto) kann ich dem daruterliegenden TFahrzeug (analog zu dem TFahrer) nicht eintragen.

Weil das so blöd zu beschreiben ist, habe ich mal meinen Source beigepackt. Vielleicht mag sich das einer anschauen, ob ich das soweit richtig gemacht habe.
Angehängte Dateien
Dateityp: zip TPlaner5.zip (80,2 KB, 6x aufgerufen)
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 15:09
Delphi-Quellcode:
var
  li: TListitem;
  i: Integer;
begin
  lv_fzg.Clear;
  for I := 0 to Kunden[i].fahrzeuge.Count-1 do
Zitat:
[DCC Warnung] main.pas(249): W1036 Variable 'i' ist möglicherweise nicht initialisiert worden
(Bezogen auf Kunden[i])
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: ObjectList in ObjectList

  Alt 15. Nov 2012, 15:13
Delphi-Quellcode:
procedure TForm1.LeseFahrzeuge(index: Integer);
var
  li: TListitem;
  i: Integer;
begin
  lv_fzg.Clear;
  for I := 0 to Kunden[index].fahrzeuge.Count-1 do //BAUSTELLE index statt i
  begin
    li:=lv_fzg.Items.Add;
    li.Caption:=Kunden[index].fahrzeuge[i].kz;
    li.SubItems.Add(Kunden[index].fahrzeuge[i].modell);
    li.SubItems.Add(GUIDToString(Kunden[index].fahrzeuge[i].guid));
  end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 Uhr.
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