Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Komposition / Aggregation

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
18.01.2005, 09:37 Uhr
~JohnDi
Gast


Hi zusammen,

wie kann ich eine Komposition bzw. eine Aggregation in C++ ausdrücken, bzw. für was könnte ich sowas mal gebrauchen.
Kann mir hier bitte jemand mit einem kleinen Beispiel weiterhelfen ?

Vielen Dank !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.01.2005, 10:16 Uhr
Th



Aggregation und Komposition stellen Beziehungen dar, welche nicht auf Vererbung beruhen, sondern auf "ist Teil von" oder "besteht aus".

In C++ wird dies mittels Member-Variablen bewerkstelligt, d.h.

C++:
class X
{
public:

private:
   Y m_y;     // Komposition (stärkere Form der Aggregation)
   Z* m_z;   // Aggregation
};



"m_y" ist vom Typ "Y" und wird automatisch beim Anlegen eines Objekts der Klasse "X" erzeugt und auch wieder zerstört, wenn "X" zerstört wird, d.h. "m_y" kann nicht alleine existieren.

"m_z" ist dagegen ein Zeiger auf ein Objekt vom Typ "Z", d.h. dieses Objekt existiert getrennt von einem Objekt der Klasse "X", ist aber mit diesem verbunden (entweder intern oder extern).
Dies kann auch mittels Referenz ("Z& m_z") ausgedrückt werden, d.h. im Konstruktor der Klasse "X" muß dann das Objekt "m_z" erzeugt werden (intern) bzw. als Parameter übergeben werden (extern).

Ich hoffe, dies hilft weiter...

Ansonsten einfach mal "googlen" mit den Stichwörtern: "Aggregation", "Komposition" und "Programmierung".
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.01.2005, 10:33 Uhr
~JohnDi
Gast


Danke,
das würde jetzt aber im Falle von m_y heißen daß auch die Klassendefinition von der Klasse Y in der Klasse X stehen muss, denn sonst könnte ja die Klasse Y auch ohne das die Klasse X instanziert wird bestehen, so oder ?

//.h

C++:
class X
{
public:

   class Y{
    
    void YFunc(){...;};
    };


   Y m_y;     // Komposition (stärkere Form der Aggregation)
  };



Die Klasse X darf ich jetzt nicht private deklarieren da ich sonst nicht zugreifen kann:


C++:
X *x = new X();
x.m_y.YFunc();



Ist das so richtig ?

Dieser Post wurde am 18.01.2005 um 12:46 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.01.2005, 12:50 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mmh das hört sich für mich wieder nach akademischen blödsinn an... nur weil jemand ne instanz einer klasse anlegen könnte die es nicht geben soll wenn diese nicht member einer anderen klasse ist willst du das unbedingt verpacken...

das muss natürlich unbedingt verhindert werden und weil ich das nicht ganz so toll in c++ abbilden kann verrenck ich mich ohne dabei wirklcih was zu gewinnen.... was für ein wahnsinniger zusatznutzen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.01.2005, 13:32 Uhr
Th



Ansonsten arbeite mit dem PIMPL-Idiom und definiere dir die privaten Klassen in der zur Oberklasse gehörigen Quellcode-Datei (.cpp).


C++:
class X
{
     X();
     ~X();
private:
     class Y;
     Y *m_y;
}



und in X.cpp:

C++:
X::X()
{
    m_y = new Y;
}

X::~X()
{
    delete m_y;
}



Willst du denn erlauben, daß externe Klassen direkt auf "Y" bzw. "m_y" zugreifen dürfen?
Dafür sollten eher Delegationsmethoden verwendet werden, also ein Methode in X, welche dann auf Methoden in Y zugreift.

P.S. an Windalf: auch wir Akademiker brauchen Arbeit...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.01.2005, 13:35 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

P.S. an Windalf: auch wir Akademiker brauchen Arbeit...


hehe hast du was für mich?
Ich muss mir demnächst leider was suchen (arg jeden tag um 8 Uhr oder früher aufstehen alleine der gedanke lässt mich schaudern)... Ich glaub ich studier lieber noch irgendwas?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.01.2005, 18:00 Uhr
~JohnDi
Gast


Vielen Dank !
Die Komposition hab ich verstanden - klar muss die Definition private sein.

Wie sieht aber nun die Implementation einer Aggregation in C++ aus.
Hier haben wir ja die "ist ein Teil von" Beziehung.

Ist hier von der Logik nicht eine Vererbung angebracht ?
Die Aggregation beschreibt doch eine nicht existenzielle Abhängigkeit, eben ein Teil
von einem Ganzen, daß auch ohne die Basis existieren kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.01.2005, 18:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Ist hier von der Logik nicht eine Vererbung angebracht ?


äh da würd ich ganz klar sagen nein... wenn du das einfach als klasse definierst kannst du doch ne instanz von anlegen und damit kann es auch ohne die "Basis" existieren... das eine instanz davon auch ein member ner instanz von ner anderen klassse sein kann spiegelt doch gerade die aggragation wieder...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.01.2005, 18:31 Uhr
Bruder Leif
dances with systems
(Operator)


*g* Sch... Theorie. Wozu will alle Welt UML, wenn ich die Prototypen der Klassen schneller runtergetippt als mit Lineal und Bleistift gezeichnet hab? Für mich sind gescheite Klassendefinitionen lesbarer als der ganze graphische Kram... man sieht ja hier, wie einen das durcheinanderbringt
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.01.2005, 20:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Leif
da bin ich voll und ganz deiner meinung...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: