Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klassenbeziehung herstellen? (https://www.delphipraxis.net/139300-klassenbeziehung-herstellen.html)

0xDEAD 26. Aug 2009 13:01


Klassenbeziehung herstellen?
 
Hi,

ich steh grad auf dem Schlauch und weiß nicht wieso?

Wenn ich eine Beziehung zw. zwei Klassen brauche. Kann ich das dann wie folgt machen?

Delphi-Quellcode:

  TKlasseA = class(TObject)

  TKlasseB = class(TObject)


procedure Test;
begin
  InstanzA := TKlasseA.Create;
  InstanzB := TKlasseB.Create;
  InstanzA.EineBeziehung := InstanzB;
end;

Ist das jetzt Blödsinn oder steh ich nur auf dem Schlauch?
Oder gibt es was besseres?

:wiejetzt:

lowF 26. Aug 2009 13:23

Re: Klassenbeziehung herstellen?
 
Was du da jetzt gemacht hast, ist afaik eine Objektbeziehung, also eine Beziehung zwischen eines Objektes der Klasse A und eines der Klasse B.

Eine Klassenbeziehung sollte zwischen Klassen herrschen, z.B. so:

Delphi-Quellcode:
 KlasseA = class(TObject);
 KlasseB = class(KlasseA);
mfg
lowF

0xDEAD 26. Aug 2009 13:31

Re: Klassenbeziehung herstellen?
 
Zitat:

Zitat von lowF
Eine Klassenbeziehung sollte zwischen Klassen herrschen, z.B. so:

Delphi-Quellcode:
 KlasseA = class(TObject);
 KlasseB = class(KlasseA);

Das würde ich jetzt eine Ableitung nennen.

In meinem Beispiel fehlt grad noch was:

Delphi-Quellcode:
TKlasseA = class(TObject)
  EineBeziehung: TKlasseB;

TKlasseB = class(TObject)


procedure Test;
begin
  InstanzA := TKlasseA.Create;
  InstanzB := TKlasseB.Create;
  InstanzA.EineBeziehung := InstanzB;
end;

Sinn und Zweck soll sein,
dass aus InstanzA eine Methode der KlasseB aufgerufen werden kann.

MacGuyver 26. Aug 2009 13:37

Re: Klassenbeziehung herstellen?
 
Moin oxDEAD,

das siehst du so richtig. Jupp, das wollte ich auch gerade so schreiben.
Dann sieht das so aus:
Delphi-Quellcode:
TKlasseA = class(TObject)
  EineBeziehung : TKlasseB;

TKlasseB = class(TObject)
  EineBeziehung : TKlasseA;
Und was sieht daran blöd aus?

Stefan

Klaus01 26. Aug 2009 13:38

Re: Klassenbeziehung herstellen?
 
So sollte es auch funktionieren.

Die Klasse A ist dann der Aggregator(Seite 4) der Klasse B.

Delphi-Quellcode:
TKlasseA = class(TObject)
  EineBeziehung: TKlasseB;

TKlasseB = class(TObject)

...
constructor TKlasseA.create;
begin
  ...
  eineBeziehung := TKlasseB.create;
end;

procedure Test;
begin
  InstanzA := TKlasseA.Create;
end;
Grüße
Klaus

0xDEAD 26. Aug 2009 14:29

Re: Klassenbeziehung herstellen?
 
Mir fällt es immer noch schwer das UML-Modell in richtigen Quellcode umzusetzen, ist wohl Übungssache.

Ich überlege, ob ich mal sowas wie ModelMaker einsetzen soll. Das will ich aber erst, wenn ich diese Thema wirklich richtig verstanden habe. Von daher erstmal alles selber coden.



Nochwas:

Jetzt habe ich InstanzA und InstanzB erstellt.
Muss ich beim Destruktor von InstanzA die Variable befreien?

Delphi-Quellcode:
EineBeziehung.Free;
Oder reicht das:

Delphi-Quellcode:
InstanzB.Free;

guidok 26. Aug 2009 14:33

Re: Klassenbeziehung herstellen?
 
InstanzB.Free ist besser.

Da EineBeziehung auf InstanzB verweist würde bei beiden Varianten die gleiche Wirkung erzielen und die InstanzB entfernen, aber idealerweise wird eine Instanz dort entfernt, wo sie erzeugt wird.

lowF 26. Aug 2009 17:34

Re: Klassenbeziehung herstellen?
 
Also ich muss widersprechen ;)

Bin gerade frisch aus der Schule mit Abi und wir haben gelernt, dass das, was du jetzt machst, eine Objektbeziehung ist, also eine Beziehung zwischen Objekten.
Hättest du geschrieben, dass du willst, dass ein Objekt die Methode eines Objektes einer anderen Klasse aufrufen soll, dann wär es mir klar gewesen, dass du Objektbeziehung meinst ;)

Oder widerspricht mir da jemand? (Geht mir gerade nur um den Unterschied zwischen Objekt- und Klassenbeziehung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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