Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Trick um "überkreuzenden Bezug" von Units zu umgehen ? (https://www.delphipraxis.net/31171-trick-um-ueberkreuzenden-bezug-von-units-zu-umgehen.html)

stoxx 5. Okt 2004 15:33


Trick um "überkreuzenden Bezug" von Units zu umgeh
 
kennt irgendjemand eine clevere Möglichkeit um nicht Haufen Umwege gehen zu müssen ?

Ich habe zwei Objecte in zwei verschiedenen Units.
Und will von jedem Object einen Zeiger auf das andere Object speichern können.

in Unit1:

Code:
TClass1 = class

 p : TClass2;

end;
in Unit2:

Code:
TClass2 = class

 p : TClass1;

end;
dummerweise muss ich nun in Unit2 die Unit1 in den Uses Klauseln einfügen und umgekehrt.
Dummerweise kommt ja nun die Meldung "Überkreuzender Bezug zweier Units"
HAb schon einige ZEit gegrübelt, kann man das irgendwie über eine dritte Unit umgehen ?
Forward Deklarationen ? mir is noch keine Lösung eingefallen ?

will nich immer mit:

Code:
TClass2 = class

 p : TObject;

end;
arbeiten .. ständig die Zeiger beim programmieren zu typisieren macht auch keine Laune !

Dankeschön !

Maa83 5. Okt 2004 16:02

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
es kommt zwar drauf an was du genau machen möchtest. Aber mit einer 3ten Unit würde das schon gehen.

In Unit 1 und Unit2 jeweils ein uses auf Unit3

in Unit 3 ein Uses auf Unit1 und Unit2. Nun in dieser Unit die beiden Variablen deklarieren:

var p1 : TClass1;
var p2 : TClass2;

Nun kannst du in Unit1 das Object p2 verwenden und in Unit2 das Object p1 (erzeugen nicht vergessen :) )

vielleicht hab ich dich auch ganz falsch verstanden...

jfheins 5. Okt 2004 16:07

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Das müsste auch gehen, wenn du z.B. in Unit1 die andere direkt in die Uses einfügst und in Unit2 nach implementation nochmal uses Unit1; schreibst :wink:

Steve 5. Okt 2004 16:10

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
²jfheins: Das wird vermutlich nicht gehen, da die Klassendeklarationen (in denen man den Bezug auf die jeweils andere Unit ja schon benötigt) wohl im Interface-Teil stehen werden..

:arrow: Ohne Globale Variablen *pfui* oder der TObject-Methode, die Du selbst schon angesprochen hast, siehts imho schlecht für Dich aus!

Gruß
Stephan :dance:

Christian Seehase 5. Okt 2004 16:28

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Moin Stoxx,

oder Du musst beide in einer Unit deklarieren.

Delphi-Quellcode:
type
  TClass1 = class;

  TClass2 = class
    F2 : TClass1;
  end;

  TClass1 = class
    F1 : TClass2;
  end;

stoxx 5. Okt 2004 17:05

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Hallo An Alle,

@Maa83 .. da geht natürlich nicht, da man dort ja wieder den überkreuzenden bezug von Unit1/Unit3 und umgekehrt hat.
@jfheins .. ich brauch ja aber die Unit1 schon im interface Teil, das is ja gerade der Witz ;-)
@Christian .. so hab ichs nun auch gemacht. Dennoch kann ich ein Gesamtes Programm nich in einer Unit unterbringen ;-)
is auf Dauer halt sehr sehr schlecht ... aber scheint wohl doch nicht zu gehen.
habe D7 .. Ist das mit Delphi 8 / Delphi9 möglich sowas ?

Alienhere 5. Okt 2004 18:02

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Zitat:

Zitat von Steve
:arrow: Ohne Globale Variablen *pfui* oder der TObject-Methode, die Du selbst schon angesprochen hast, siehts imho schlecht für Dich aus!

Gruß
Stephan :dance:

@steve (und allgemein): Woher kommt eigentlich diese Abneigung gegen globale Variablen?

Weil man den Überblick verlieren könnte, wo sie in welcher Unit geändert werden könnten oder was?

Echt neugierig!

mfg

Steve 6. Okt 2004 08:07

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Nunja, ganz kurz und knapp gesagt: Mangelnde Übersichtlichkeit, mangelnde Kontrolle ( :!: z.B. muss der Programmierer wissen, wann die Variable welche Werte annehmen kann, von wo aus sie geändert werden kann etc.); häufig ist damit eine unnötige Belegung von Speicherplatz verbunden; und vor allem widerspricht das allgemein der Idee des OOP, und innerhalb der OOP wiederum widersprächen (wenn sie denn generell mit oop vereinbar wären :mrgreen: ) globale Variablen dem Geheimnisprinzip... Hinzu können Namenskonflikte kommen

Wie gesagt, Kurzfassung :mrgreen:

Gruß
Stephan :dance:

shmia 6. Okt 2004 08:53

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Zitat:

Zitat von stoxx
Ich habe zwei Objecte in zwei verschiedenen Units.
Und will von jedem Object einen Zeiger auf das andere Object speichern können.

Es kommt drauf an, wie stark die Objekte funktionell gekoppelt sind.
Bei schwacher Kopplung wäre das Observer-Visitor Design Pattern interessant:
http://www.castle-cadenza.demon.co.uk/observe.htm
http://blogs.teamb.com/joannacarter/articles/690.aspx
Oder eher umgekehrt: das Observer Pattern führt zu einer schwachen Kopplung zwischen den Objekten.

Oxmyx 7. Okt 2004 11:10

Re: Trick um "überkreuzenden Bezug" von Units zu u
 
Ist auch mit einem Zeiger lösbar:

Unit1.pas:
Delphi-Quellcode:
interface

uses Unit2;

TClass1 = class
  i: Integer;
  p: TClass2;
end;

Unit2.pas:
Delphi-Quellcode:
interface

TClass2 = class
  p: Pointer;
end;

implementation

uses Unit1;

procedure foo();
begin
  TClass1(p).i := 17;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.
Seite 1 von 3  1 23      

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