Autor Beitrag
eicky
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 31.10.03 00:14 
Hallo !

Ich möchte eine Klasse entwickeln, die Objekte anderer ebenfalls selbst entwickelter Klassen beinhaltet. Da teilweise ein Zugriff dieser "Unterklassen" untereinander über die Oberklasse benötigt wird, versehe ich die Unterklassen mit einem Parent-Attribut, das vom Typ der Oberklasse ist. Zur Verdeutlichung meines Vorhabens hier eine grobe Skizze:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  TNetworkClass = class;

  TWakeOnLANClass = class
    procedure WakeUpComputer(Computer: String);
    constructor Create(Parent: TNetworkClass);
  private
    Parent: TNetworkClass;
  end;

  TComputerClass = class
    procedure Connect(Computer: String);
    constructor Create(Parent: TNetworkClass);
  private
    Parent: TNetworkClass;
  end;

  TNetworkClass = class
    WakeOnLAN: TWakeOnLANClass;
    ActiveComputer: TComputerClass;
    constructor Create;
  end;


Falls die Prozedur TComputerClass.Connect scheitern sollte, weil ein Computer aus ist, soll sie über die Oberklasse TNetworkClass die Prozedur TWakeOnLANClass.WakeUpComputer aufrufen. In etwa so:

ausblenden Delphi-Quelltext
1:
Parent.WakeOnLAN.WakeUPComputer(Computer);					


Funktioniert alles prima. Das Problem, vor dem ich stehe ist, dass das Projekt massig größer ist, als das oben gezeigte Beispiel. Dementsprechend entsteht viel Code, den ich bei dieser Lösung komplett in eine Unit schreiben muss. Ich habe also vor, die unterschiedlichen Klassen in separaten Units unterzubringen, um die Übersicht zu behalten. Leider muss der Oberklasse die Struktur der Unterklassen, sowie den Unterklassen die Struktur der Oberklasse bekannt sein. Es müssten also die entsprechenden Units im Interface-Teil aufgeführt sein, was zwangsläufig zu einem nicht erlaubten Zirkelbezug führt...

Falls jemand eine Lösung kennt, oder einen Link zu einem Tutorial, das dieses Problem behandelt, parat haben sollte, würde ich mich über eine Antwort freuen.

Danke im Voraus

Eicky ;)
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 31.10.03 10:58 
Hallo,

ich bin sowas immer umgangen und habe die Klassen in eine unit gepackt. mit dem Codeexplorer und der Klassenvervollständigung werden die Projekte nicht unbedingt unübersichtlicher

Als Lösung würde mir einfallen:
ausblenden Delphi-Quelltext
1:
2:
3:
  private
    Parent: TObject;//TNetworkClass;
  end;

die entsprechende Unit, wo TNtetworkclass drin ist, im implemention teil mitaufnehmen.

Zugriif dann:
ausblenden Delphi-Quelltext
1:
    TNetworkClass(Parent).blablabla;					


So umgehst du zumindestens den Zirkelbezug. Was anderes würde mir nicht einfallen.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
eicky Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 31.10.03 13:13 
Hallo Frank !

Das ist eine sehr gute Idee ;)
Ich werd's nachher mal ausprobieren.

Danke :D

Gruss, Eicky