AGB  ·  Datenschutz  ·  Impressum  







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

Kreuzende Beziehung zw. zwei Objekten

Ein Thema von SebE · begonnen am 26. Apr 2009 · letzter Beitrag vom 27. Apr 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#1

Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:15
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
Sebastian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:17
Einfach die Unit von B in den Uses einbinden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:18
Kommt auf die Beziehung an. Eventuell kannst Du Abstrakte Klassen oder Interfaces in eine dritte Unit auslagern...

Edit:
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.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:36
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...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:39
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
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#7

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:43
@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!)???
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:45
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...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#9

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:46
@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)
Sebastian
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#10

Re: Kreuzende Beziehung zw. zwei Objekten

  Alt 26. Apr 2009, 22:49
@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).
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 11:58 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