Haben die Forumsteilnehmer kein Beispiel zur Hand ???



  • Suche ein Beispiel für Assoziation, Aggregation und deren Implementierung
    in C++! Das muss doch zu haben sein!!!

    😕 😕 😕 😕



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mal google versucht ?



  • Leider schon tagelang und nichts gefunden!



  • Zero_Clamping schrieb:

    Suche ein Beispiel für Assoziation, Aggregation und deren Implementierung
    in C++! Das muss doch zu haben sein!!!
    😕 😕 😕 😕

    wenn uml was mit c++ zu tun hätte, würde ich nur wenige sekunden brauchen.
    fakt ist aber, daß diese begriffe in der praxis nix verloren haben.



  • Yo, diese ganze Aggregation, Assoziation usw. kann man bisher nicht anders in C++ umsetzen. Es ist einfach nur eine Membervariable in einer Klasse. Z.B:

    class Auto
    {
       Lenkrad *lenkrad;
    };
    

    Meinem Kenntnisstand nach, lässt es sich in Code nicht anders ausdrücken. Ist in Java übrigens auch nicht anders!



  • 1. Hat Assoziation keine besondernen Ähnlichkeiten mit Aggregation
    2. Lässt sich Aggregation und Komposition in C++ sehr wohl unterscheiden, in Java nicht.

    // Aggregation
    Lenkrad* lenkrad;
    
    // Komposition
    Lenkrad lenkrad;
    


  • Optimizer schrieb:

    2. Lässt sich Aggregation und Komposition in C++ sehr wohl unterscheiden, in Java nicht.

    Aber der Übergang ist doch fließend. Wenn ich konzeptionell eine Komposition habe, das Objekt dadurch aber riesig wird dann lege ich es vielleicht trotzdem auf den Heap und halte es mit einem Zeiger. Es gibt da keine 1:1 Abbildung. Aber das ist ja auch nicht das Ziel der Definition, sondern es soll darüber eine gewisse Verbindung zwischen Objekten modelliert werden. Daß diese über das gleiche Konstrukt implementiert werden ist eigentlich ziemlich wurscht.



  • Da hast du natürlich recht. Natürlich gibt es keine 1:1 Abbildung, das simmt. Allerdings unterstützt C++ IMO in gewisser Weise den Entwickler schon dabei, eine gewissen Beziehung durchzusetzen.
    Wenn mein Objekt auf dem Heap liegen soll, mach ich halt nen Object* const - Zeiger (oder eine Referenz) und erzeuge das Objekt im Konstruktor und lösche das Objekt im Destruktor.
    Wenn ich das programmiere, hat man IMO kaum eine Chance, das als Aggregation zu interpretieren/nutzen, vorausgesetzt natürlich, man lässt nicht von außen auf den Zeiger zugreifen.
    Der Punkt ist ja der, dass C++ verschiedene Sprachmittel hierfür kennt, die sowas unterstützen können und Java nicht. Dort hat man wirklich kaum eine Chance, eine Unterscheidung zu treffen, weil man nicht die Lebenszeit eines Objekts an die eines anderen koppeln kann.



  • Hat trotzdem jemand eine Aufgabenstellung mit Lösung und Code?



  • Aggregation und Komposition sind doch 2 unterschiedliche Formen der Kopplung zweier Klassen.
    Komposition beschreibt eine im Vergleich zur Aggregation engere Kopplung, was sich einfach dadurch zeigen lässt das bei

    class a
    {
      private:
        b myb;
    };
    

    Die Lebensdauer von Objekt b von der Lebensdauer von Objekt a abhängt. Stirbt a, stirbt auch b.

    Aggregation würde hingegen bedeuten, dass eine Instanz von b auch weiterhin existieren kann, wenn a bereits das zeitliche gesegnet hat.

    class a
    {
      private:
        b *myb;
    };
    

    Die zugrunde liegende Aussage: "bei Komp. ist die Lebensdauer von slave b an master a gekoppelt, bei Aggr. nicht" lässt sich ebenso auf die Erzeugung anwenden.

    Erzeuge ich ein Objekt a , welches via Komposition an ein Objekt b gekoppelt ist, erzeuge ich automatisch ein Objekt b, wenn auch ohne explizite Initialisierung.



  • bisschen offtopic, aber wofür gibt´s in Java Referenzen @Optimizer? 🙂



  • Was für ein Zufall, dass ich heute Marcus's Buch bekommen habe.

    Da war ein Beispiel mit Flugzeug und Triebwerk als Assoziation und Gepäckstück und Laderaum als Aggregation. (Oder umgekehrt 🤡 )

    Jedenfalls läuft es darauf hinaus, dass bei einem die Objekte unabhängig voneinander existieren können (Triebwerk und Flugzeug) und beim anderen halt nicht.
    Aber wie gesagt (von volkard), UML-Diagramme sind sowieso für die Katz.



  • Docster schrieb:

    bisschen offtopic, aber wofür gibt´s in Java Referenzen @Optimizer? 🙂

    Ich verstehe deine Frage nicht. Mit den Referenzen kannst du die Lebenszeiten von zwei Objekten nicht koppeln. In Java musst du diese enge Bindung mit deiner Programmlogik alleine durchsetzen.



  • Argh, ich kapier nichts, also wie was das jetzt?

    Aggregation bedeutet, dass das eine das andere irgendwie verwendet?
    Komposition bedeutet, dass das eine vom anderen ein Teil ist.
    Assoziation bedeutet, dass eine Verbindung vorliegt, aber was heißt das denn???

    Wenn das eine das andere verwendet, so IST es eine Verbindung, wenn der Motor am Auto dran ist, dann IST er verbunden.
    Ich finde, dass das nicht eindeutig ist, das überdeckt sich doch oft. 😞



  • Ach, wenn du die Lebenszeit zweier Objekte in Java koppeln willst, is das ganz einfach:
    public class bla {
    private:
    b myB;
    };

    Wenn du jetzt mit new ein bla-Objekt anlegst, dann erzeugst du auch automatisch ein b-Objekt.
    Und wenn sich der Garbage-Collector bla schnappt, wir auch das b-objekt myB mit abgeräumt.



  • @Docster:
    Das ist mir schon bekannt - eine andere Möglichkeit gibt es in Java ja gar nicht. Ich glaube ehrlich gesagt, dass dir die Unterschiede zwischen den Beziehung nicht ganz klar ist. 🙂

    Objekt A verwaltet B
    Objekt B ist Teil von A

    Das kann man in Java nicht unterschiedlich darstellen. Ich kann jetzt ne zweite Referenz auf myB haben, dann wird vielleicht mein bla-Objekt gelöscht, aber das myB nicht, weil es kein Teil von bla ist. In Java muss die Programmlogik sicherstellen, dass das richtig abläuft.
    Das ist ja nichts schlimmes, das lässt sich ja machen - aber es ist eben der Unterschied, weil dir die Sprache dabei nicht hilft.

    Wenn du jetzt mit new ein bla-Objekt anlegst, dann erzeugst du auch automatisch ein b-Objekt.

    Stimmt übrigens nicht. myBla bleibt solange eine null-Referenz, bis du es zuweist.



  • Mis2com schrieb:

    Assoziation bedeutet, dass eine Verbindung vorliegt, aber was heißt das denn???

    Assoziation heisst:

    A <----- B

    Klasse B nutzt Dienste der Klasse A. z.B. könnte A eine Methode bereitstellen, um die Wurzel zu berechnen und Klasse B nutzt diese.



  • Nagut, ein Objekt, das ein Teil von einem anderen ist, kann von dem auch verwaltet werden.
    Aber gut, man sieht schon...

    Komposition bedeutet: Teil sein
    Aggregation bedeutet: Verwendung

    Und Assoziation ist ein Überbegriff dafür, nämlich Verbindungen, da kann es vieles geben, ich finde es nicht gut, dass die nach den speziellen Begriffen jetzt so einen allgemeinen aufführen, wahrscheinlich ist der nur da, damit Leute, die noch was Anderes darstellen wollen, die Möglichkeit dazu haben.

    MfG MAV



  • Neinneinnein. 😃

    Assoziation: Klasse A braucht Klasse B, weil sie bestimmte Dienste nutzt. Können z.B. auch statische Methoden sein, A muss nicht mal eine Referenz auf ein B-Objekt haben.
    Aggregation: Klasse B ist abhängig von A, weil ein B-Objekt von A verwaltet wird. Aber wenn B stirbt, könnte z.B. C es weiterverwalten.
    Komposition bedeutet, ein Teil von etwas anderem sein, ja.


Anmelden zum Antworten