Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kreuzende Beziehung zw. zwei Objekten (https://www.delphipraxis.net/133147-kreuzende-beziehung-zw-zwei-objekten.html)

SebE 26. Apr 2009 21:15


Kreuzende Beziehung zw. zwei Objekten
 
Hallo Delphi-/Pascal-Programmierer.

Ich hab weniger ein Problem, als eine allgemeine Frage.

Wie implementiere ich zwei Objekte, die jeweils eine Beziehung zum Anderen pflegen?

Beispiel:

Delphi-Quellcode:
type
  A = class
  private
    <list of B>

    [...]
    end;

type
  B = class
  private
    myA: A;

    [...]
    end;
A und B sind in unterschiedlichen Modulen (zB: mA, mB).

ist es in irgend einer Weise möglich, dass zu realisieren, oder muss ich beide Definitionen in eine Type-Klausel (also in EIN Modul) beschreiben?

Gegen das "Ein-Modul-Konzept" spricht meine Philosophie, jedes Objekt in seine eigene Unit.
(Type-Casting auf untypisierte Pointer kommt aus stilistischen Gründen nicht in Frage)

Ich sehe selbst leider keine Möglichkeit, aber ich will es nicht unversucht lassen und frage deshalb euch :-)

Ich hoffe, ihr könnt mir Tipps geben

Vielen Dank an euch

mkinzler 26. Apr 2009 21:17

Re: Kreuzende Beziehung zw. zwei Objekten
 
Einfach die Unit von B in den Uses einbinden

mirage228 26. Apr 2009 21:18

Re: Kreuzende Beziehung zw. zwei Objekten
 
Kommt auf die Beziehung an. Eventuell kannst Du Abstrakte Klassen oder Interfaces in eine dritte Unit auslagern...

Edit:
Zitat:

Zitat von mkinzler
Einfach die Unit von B in den Uses einbinden

So wie ich sein Problem verstanden habe, würde so eine zirkuläre Referenz enstehen, was Delphi so nicht erlaubt.

Satty67 26. Apr 2009 21:22

Re: Kreuzende Beziehung zw. zwei Objekten
 
Hatte das gleiche Problem. Wollte es auch in eigenen Units lassen und habe es wie oft im VCL-Quellcode gelöst.

Pointer auf TObject ubergeben und Gültigkeit vorm Cast via Classname abfragen. Das ist kaum besser als untypisierte Pointer, aber ich hab' nach langem suchen auch keinen anderen Weg gefunden.

stoxx 26. Apr 2009 21:36

Re: Kreuzende Beziehung zw. zwei Objekten
 
man hat ja Hoffnung, dass wenn sie jetzt den 64 Bit Compiler eh neu machen müssen, dass dieser Quatsch endlich mal in Delphi behoben wird.

Und alle Meinungen, die man sogar gelegentlich hört, es wäre sogar ein Feature statt ein Failure, (manche behauptetn ja sogar, dass dann was mit dem klassenkonzept nicht stimmen würde) sind auch nur halbherzig. Denn in einer einzigen Unit funktioniert es ja, dass man überkreuzende Bezüge zu Klassen herstellen kann, warum also nicht auch in verschiedenen Units, für mich ist da kein Unterschied.
Es führt dazu, dass man viel zu viel Quelltext in eine einzige Unit stecken muss. Modularisierung wäre schon toll...

stoxx 26. Apr 2009 21:39

Re: Kreuzende Beziehung zw. zwei Objekten
 
ich benutze gelegentlich diese Lösung. So wird zumindest der Quellcode durch die unschönen Casts nicht belastet und bleibt damit befreit von unwichtigen Sachen. Meine Meinung ist, es sollte möglichst nur das in einer Funktion stehen, was wirklich zum funktionieren der Funktion wichtig ist.


http://www.delphipraxis.net/internal...euzender+bezug

SebE 26. Apr 2009 21:43

Re: Kreuzende Beziehung zw. zwei Objekten
 
@mirage228:

Ja, die Idee kam mir auch (ist auch vom Stil her elegant):

Hat man nur noch eine Klasse (und ein Modul) mehr :-(

Danke euch für die schnellen Antworten:

Für die Vollständigkeit:

Delphi-Quellcode:
type
  A1 = class
    [...]
    end;
Delphi-Quellcode:
type
  B = class
    <list of A1>

    [...]
    end;
Delphi-Quellcode:
type
  A2 = class(A1)
    myB: B;

    [...]
    end;


Gibt es in Delphi abstrakte Klassen (wär der Wahnsinn!)???

mirage228 26. Apr 2009 21:45

Re: Kreuzende Beziehung zw. zwei Objekten
 
Zitat:

Zitat von SebE
Gibt es in Delphi abstrakte Klassen (wär der Wahnsinn!)???

Also soweit ich weiß kannst Du nur "normale" Klassen mit abstrakten Methoden machen (ala TStrings), sowas wie "type TKlasse = abstract class" gibt es meines wissens nach (zumindest für Win32) noch nicht...

SebE 26. Apr 2009 21:46

Re: Kreuzende Beziehung zw. zwei Objekten
 
@stoxx:

Dieses "forward"-Deklarieren ist zwar hilfreich, aber entspricht nicht dem Ansatz: Erst Deklarieren, dann nutzen.

Wie erstelle ich abstrakte Klassen (man könnte ja den Constructor virtual abstract definieren -> nicht sehr elegant)

SebE 26. Apr 2009 21:49

Re: Kreuzende Beziehung zw. zwei Objekten
 
@mirage228:
NOCH nicht?
in Pascal gab's die mal, also kann man davon ausgehen, dass es sie auch in Zukunft nicht mehr geben wird (schade eigentlich).


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Seite 1 von 4  1 23     Letzte »    

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