AGB  ·  Datenschutz  ·  Impressum  







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

Klassendeklaration: Beidseitige Referenz

Ein Thema von TheMiller · begonnen am 2. Jan 2010 · letzter Beitrag vom 2. Jan 2010
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Klassendeklaration: Beidseitige Referenz

  Alt 2. Jan 2010, 15:32
Hallo,

bin ja noch rel. neu bei der OOP. Nun stehe ich vor einem kleinen Problem.

Ich habe festgestellt, dass sich Klassen durch eine spezielle Hierarchie kennen. Soll heißen, dass erst TKlasse1 oben definiert sein muss, bevor ich diese unten in TKlasse2 nutzen kann.

Was ist jetzt aber, wenn ich zwei Klassen habe, die sich gegenseitig brauchen und das eine vom anderen vererbt wird. Hier mal ein Beispiel

Delphi-Quellcode:
TKlasse1 = class(TDatabase)
private
  FdbID: Integer;
  FKlassen2Objekte: TObjectList;
  procedure setdbID(Value: Integer);
public
  {* Overrides *}
  constructor Create; override;
  destructor Destroy; override;

  {* Properties *}
  property AddKlassen2Objekt: TKlasse2 write ... //<-- Hier kennt KLasse1 die Klasse2 nicht
end;

TKlasse2 = class(TKlasse1)
private
  FdbID: Integer;
public
  {* Overrides *}
  //constructor Create; override;
  //destructor Destroy; override;

  {* Properties *}
  ...
end;
Also, hier wird Klasse2 von Klasse1 abgeleitet und Klasse1 hat zur Verwaltung mehrerer KLasse2-Objekten eine ObjectList, die nur Klasse2-Objekte annehmen soll. Sieht ganz nach einem Design-Fehler aus, oder?

Vielen Dank im Voraus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#2

Re: Klassendeklaration: Beidseitige Referenz

  Alt 2. Jan 2010, 15:36
die Lösung nennt sich Forward-Deklaration
Delphi-Quellcode:
TKlasse2 = class; // sagt, daß später einen Klasse TKlasse2 deklariert wird

TKlasse1 = class(TDatabase)
private
  FdbID: Integer;
  FKlassen2Objekte: TObjectList;
  procedure setdbID(Value: Integer);
public
  {* Overrides *}
  constructor Create; override;
  destructor Destroy; override;

  {* Properties *}
  property AddKlassen2Objekt: TKlasse2 write ... //<-- Hier kennt KLasse1 die Klasse2 nicht
end;

TKlasse2 = class(TKlasse1)
private
...

es muß aber alles innerhalb eines gemeinsamen TYPE-Blocks stehen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Klassendeklaration: Beidseitige Referenz

  Alt 2. Jan 2010, 15:41
Genau auf dieses Problem stoße ich im Moment andauernd, da ich am liebsten für jede Klasse eine neue Datei verwenden will. So ist es imho wesentlich übersichtlicher. Durch die oben genannte Lösung -- eine andere kenne ich bisher nicht -- geht das allerdings nicht und ich muss immer wieder auf eine einzige Datei zurückgreifen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#4

Re: Klassendeklaration: Beidseitige Referenz

  Alt 2. Jan 2010, 15:50
erste Unit:
Delphi-Quellcode:
TBasisKlasse2 = class;

TKlasse1 = class(TDatabase)
private
  FdbID: Integer;
  FKlassen2Objekte: TObjectList;
  procedure setdbID(Value: Integer);
public
  {* Overrides *}
  constructor Create; override;
  destructor Destroy; override;

  {* Properties *}
  property AddKlassen2Objekt: TBasisKlasse2 write ...
end;

TBasisKlasse2 = class(TKlasse1);
zweite Unit:
Delphi-Quellcode:
uses ErsteUnit;

TKlasse2 = class(TBasisKlasse2)
private
  FdbID: Integer;
public
  {* Overrides *}
  //constructor Create; override;
  //destructor Destroy; override;

  {* Properties *}
  ...
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Klassendeklaration: Beidseitige Referenz

  Alt 2. Jan 2010, 16:49
Vielen Dank für den Tipp. Ist das schlechter Programmierstil?

Und wann verwendet man eigentlich verschiedene Type-Blöcke? Alle Klassen stehen bei mir in einem Type-Block.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Klassendeklaration: Beidseitige Referenz

  Alt 2. Jan 2010, 17:41
Zitat von DJ-SPM:
Vielen Dank für den Tipp. Ist das schlechter Programmierstil?

Und wann verwendet man eigentlich verschiedene Type-Blöcke? Alle Klassen stehen bei mir in einem Type-Block.
Ich denke nicht dass es schlechter Stil ist. Manchmal ist es einfach nötig. Ich selbst benutze nur einen type-Block pro Datei. Ist aber letztendlich Geschmackssache denk ich.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:32 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