AGB  ·  Datenschutz  ·  Impressum  







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

assoziationen zwischen objekten

Ein Thema von volf · begonnen am 5. Feb 2010 · letzter Beitrag vom 5. Feb 2010
Antwort Antwort
volf

Registriert seit: 25. Jan 2010
Ort: Mannheim
11 Beiträge
 
#1

assoziationen zwischen objekten

  Alt 5. Feb 2010, 17:22
hey,


also es gibt bidirektionale und unidirektionale assoziation(sowie kompostion und aggregation).

Aggregation

Delphi-Quellcode:
TPerson = class (TObject)
            Adresse : TAdresse;
            Name : string[15];
            ...
           public
            constructor Create; virtual;
            procedure Init; virtual;
            procedure SetName (n: string); virtual;
           ...
          end;
Zitat:
Komponenten sind vom Aggregat existenzabhängig
– Erzeugung des Aggregats erzeugt auch die Komponenten
– Löschung des Aggregats löscht auch die Komponenten
richtig verstanden habe ich das nicht. Muss bei einer Aggregation die Komponente in der Klasse als Feld hinzugefügt werden? Man könnte doch die Komponente außerhalb der Klasse irgendwo deklarieren und im z.B. im FormCreate() createn?

Bei einer unidirektional Assoziation müssen dan gegenseitig die Komponenten als Feld hinzugefügt werden oder? wie werden sie dan createt? oder ist das nur bei einer Aggregation so?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 17:34
Zitat:
Muss bei einer Aggregation die Komponente in der Klasse als Feld hinzugefügt werden? Man könnte doch die Komponente außerhalb der Klasse irgendwo deklarieren und im z.B. im FormCreate() createn?
Aggegation heisst ja Teil eines Ganzen und vom Ganzen abhängig.
Zitat:
Bei einer unidirektional Assoziation müssen dan gegenseitig die Komponenten als Feld hinzugefügt werden oder?
Nein, unidirektional heisst der eine kennt den anderen, der andere den einen aber nicht.
Z.B. der Normalfall beim Owner. Der Owner kennt sein Eigentum und gibt dieses bei seiner Freigabe mit frei. eine Komponente kennt im Normalfall seinen Owner ab nicht.
Bidirektional heisst, das ein Objekt weiss, wer sein Owner ist.
Markus Kinzler
  Mit Zitat antworten Zitat
volf

Registriert seit: 25. Jan 2010
Ort: Mannheim
11 Beiträge
 
#3

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 18:35
Zitat von mkinzler:
Zitat:
Muss bei einer Aggregation die Komponente in der Klasse als Feld hinzugefügt werden? Man könnte doch die Komponente außerhalb der Klasse irgendwo deklarieren und im z.B. im FormCreate() createn?
Aggegation heisst ja Teil eines Ganzen und vom Ganzen abhängig.
Zitat:
Bei einer unidirektional Assoziation müssen dan gegenseitig die Komponenten als Feld hinzugefügt werden oder?
Nein, unidirektional heisst der eine kennt den anderen, der andere den einen aber nicht.
Z.B. der Normalfall beim Owner. Der Owner kennt sein Eigentum und gibt dieses bei seiner Freigabe mit frei. eine Komponente kennt im Normalfall seinen Owner ab nicht.
Bidirektional heisst, das ein Objekt weiss, wer sein Owner ist.
ja sollte bidirektional heißen.

Klasse 1:

Delphi-Quellcode:
 TDaten= class
 private
     spielFeld: array [0..3,0..3] of string;
// function pruefeZeile(pZ:string,pZeile:integer):integer;
 // function pruefeZeile(pZ:string,pZeile:integer):integer;
 public
 // procedure setzeFeld(pNr:integer,pAktSpieler:string):boolean;
  // procedure pruefeGewonnen(pAktSpieler:string):boolean;
 end;

Klasse 2:
Delphi-Quellcode:
type
  TSteuerung= class
 private
   dieSpielNr:integer;
   anzahlZuege:integer;
 // procedure setzeAktSpieler(pAktSpieler:string);
  // procedure erhoeheAnzZuege;
 // procedure erstelleStatistik(pAktSpieler:string);
     function ermittleSpieler(): string;
 public
        aktSpieler:string;
  // procedure bearbeiteClick(pNr:integer);
  // procedure bearbeiteTaste(pNr:integer);
     procedure NeuesSpiel;
 end;

sagen wir mal zwischen diesen Klassen soll eine bidirektionale assoziation bestehen. könnte jemand die felder ergänzen, die jetzt hinzukommen würden?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 18:41
Ein einfaches Beispiel:

Delphi-Quellcode:
TReifen = class;

TAuto = class ( Fahrzeug)
    ReifenLinksVorne, ReifenRechtsVorne,
    ReifenLinksHinten, ReifenRechtsHinten: TReifen;
   ...
end;

TReifen = class
    Auto: TAuto;
    ...
end;
Das Auto kennt seine Reifen und der Reifen weis, zu welchem Auto er gehört
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 18:54
Also ich habe es so gelernt:
Aggregation <> Komposition

Aggregation:

Ein Objekt/Entität ist ein Behälter für ein anderes.

Beispiel:
Eine Kaffeetasse aggregiert den Kaffee, dh. man kann Kaffee hineinfüllen oder herausnehmen.
Egal ob / wiviel Kaffee darin ist, es ist immer eine Kaffeetasse.
Der Kaffee wird unabhängig von der Tasse erzeugt und vernichtet.

Komposition:

Ein Objekt/Entität besteht aus einem anderem.

Beispiel:
Eine Kaffeetasse besteht unter anderem aus einem Henkel.
Besitzt sie keinen, ist sie keine Tasse.
Der Henkel wird bei der Erstellung der Tasse erstellt und bei ihrer Erstellung vernichtet.


Die Unterscheidung in uni- bzw. bidirektional ist aber afaik nicht davon abhängig.

So, hoffe, das ist richtig, sonst falle ich bei der Prüfung auf die Nase
  Mit Zitat antworten Zitat
volf

Registriert seit: 25. Jan 2010
Ort: Mannheim
11 Beiträge
 
#6

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 19:06
Zitat von mkinzler:
Ein einfaches Beispiel:

Delphi-Quellcode:
TReifen = class;

TAuto = class ( Fahrzeug)
    ReifenLinksVorne, ReifenRechtsVorne,
    ReifenLinksHinten, ReifenRechtsHinten: TReifen;
   ...
end;

TReifen = class
    Auto: TAuto;
    ...
end;
Das Auto kennt seine Reifen und der Reifen weis, zu welchem Auto er gehört
hat es einen bestimmten Grund warum du zweimal TReifen = class; geschrieben hast?

wie createt man jetzt ReifenLinksHinten, ReifenRechtsHinten und Auto?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 19:08
Zitat:
hat es einen bestimmten Grund warum du zweimal TReifen = class; geschrieben hast?
Ja, das erste ist die Forward-Deklaration.

Zitat:
wie werden jetzt die klassen createt?
Die Reifen im Konstruktor von TAuto.
Markus Kinzler
  Mit Zitat antworten Zitat
volf

Registriert seit: 25. Jan 2010
Ort: Mannheim
11 Beiträge
 
#8

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 19:44
@BUG & mkinzler danke für die antoworten.



Delphi-Quellcode:
Auto.Create;
Auto.ReifenLinksVorne.Create;
Auto.ReifenRechtsVorne.Create;
Auto.ReifenLinksHinten.Create;
Auto.ReifenRechtsHinten.Create;
ist es richtig so?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#9

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 19:47
Zitat von volf:
Delphi-Quellcode:
Auto.Create;
Auto.ReifenLinksVorne.Create;
Auto.ReifenRechtsVorne.Create;
Auto.ReifenLinksHinten.Create;
Auto.ReifenRechtsHinten.Create;
ist es richtig so?
Eher würde ich an so etwas denken:

Delphi-Quellcode:
Auto.Create;
Auto.ReifenLinksVorne := TReifen.Create;
...
Auto.ReserveRad := TReifen.Create;
Cheers,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: assoziationen zwischen objekten

  Alt 5. Feb 2010, 19:50
Nein.

Delphi-Quellcode:
type
  TAuto = class (Fahrzeug)
    ...
    constructor Create;
    destructor Destroy;
    ...
  end;

  constructor TAuto.Create;
  begin
      inherited;
      ReifenLinksVorne := TReifen.Create;
      ReifenRechtsVorne := TReifen.Create;
      ...
  end;

  destructor TAuto.Destroy;
  begin
     ReifenLinksVorne.Free;
     ...
     inherited;
  end:
...

var Auto: TAuto;
   ...

  Auto := TAuto.Create;
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:14 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