Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OOP: Unidirektionale Beziehung wie realisieren? (https://www.delphipraxis.net/67688-oop-unidirektionale-beziehung-wie-realisieren.html)

Passi077 18. Apr 2006 17:08


OOP: Unidirektionale Beziehung wie realisieren?
 
Hi,

ich wollte gerade mein Projekt anfangen, da ist mir aufgefallen das ich noch gar nicht weiß wie man unidirektionale Beziehungen zwischen Klassen herstellt.

Also, Beispiel:

Ich habe 3 Klassen: cSteuerung, cSpieler und cSpielfeld.

Geplante Assoziationen: cSteuerung kennt cSpieler, cSpieler kennt cSpielfeld, cSpielfeld kennt cSteuerung.

Bisher sah das dann bei mir so aus:

Delphi-Quellcode:

uses
  uSpieler; // Diese beiden Units enthalten jeweils die Klassen

type
  Steuerung=class

  private
    Spieler: cSpieler;

  public
    constructor create();

end;
Und im Konstruktor wird dann ein Objekt der Klasse cSpieler instanziiert (Spieler:=cSpieler.create). Genau das ist aber jetzt mein Problem, da ja auch andere Klassen die Selbe Klasse und das selbe Objekt von dieser Klasse kennen sollen. Ich kann also nicht in jeder Klasse ein neues Objekt erzeugen..

Deswegen denke ich muss man ähnlich wie bei der bidirektionalen Beziehung vorgehen und dem Konstruktor eine Referenz übergeben..?

Ich hab jetzt schon dies und das durchüberlegt, aber ich komme nicht drauf. Entweder sind noch gar keine Objekte der Klasse erstellt so das ich keine Referenz übergeben kann oder ich lande wieder beim Alten.

Ich hoffe Ihr könnt mir am besten ein kleines Beispiel geben wie oben genannte Assoziationen in Delphi aussehen müssten.

Danke + Grüße
Passi

mkinzler 18. Apr 2006 20:34

Re: OOP: Unidirektionale Beziehung wie realisieren?
 
Zitat:

Geplante Assoziationen: cSteuerung kennt cSpieler, cSpieler kennt cSpielfeld, cSpielfeld kennt cSteuerung.
da kennen nicht besitzen ist würde ich alle Klassen global iniantiieren und in den Objekten nur referenzieren.

SirThornberry 18. Apr 2006 20:43

Re: OOP: Unidirektionale Beziehung wie realisieren?
 
in dem Fall wäre es das beste die Basisklassen innerhalb einer Unit zu haben und dann forwarddeclarationen zu verwenden:
Delphi-Quellcode:
type
  TSpielfeld = class;
  TSpieler  = class;

  TSteuerung = class(TObject)
  public
    constructor Create(ASpieler: TSpieler);
  end;

  TSpieler = class(TObject)
  public
    constructor Create(ASpielfeld: TSpielfeld);
  end;

  TSpielfeld = class(TObject)
  public
    constructor Create(ASteuerung: TSteuerung);
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz