C++ Aggregation/Komposition



  • Hallo,

    ich habe eine Frage zu UML und c++.

    Ich habe mir eine verkettete Liste gebaut. Leider weis ich nicht ob ich das mit der Aggregation
    richtig verstanden habe.

    Die Klasse PcapFrameNode beschreibt ein Listenelement. In der Klasse ist
    ein Zeiger auf sich selbst vorhanden usw.
    In der Klasse PcapFrameList beschreibt die Funktionen, die eine
    verkettete Liste hat (Löschen der Liste und Ausgabe..).

    Die Klasse PcapFrameList besitzt vier Zeiger, die auf Objekte der Klasse
    PcapFrameNode zeigen können. In welcher Beziehung stehen die beiden
    Klassen zu einander. Ist es eine Komposition oder Aggregation.

    Meiner Meinung nach ist es eine Komposition, da die Lebensdauer der
    PcapNode-Objekte, auf die die vier Zeiger zeigen, von der
    Lebensdauer der Klasse PcapFrameList, abhängt (Im Destruktor der Klasse PcapFrameList lösche ich mit clear alle Nodes). Ist das richtig?

    Für die Zahlen, die an den Pfeil geschrieben werden müssen: Die Klasse PcapFrameList besitzt genau vier Zeiger auf PcapFrameNode Objekte und ein PcapFrameNode-Objekt kann entweder keinem oder einem PcapFrameList Objekt angehören. Ein PcapFrameNode könnte nämlich auch ohne Liste existieren. Ist das
    korrekt?

    class PcapFrameNode : public PcapFrame
    {
    	private:
    		PcapFrameNode *m_next_p;
    	public:
    		PcapFrameNode ( unsigned int index=1,
    			unsigned char *ts_usec=NULL, unsigned int ts_sec=0, unsigned int incl_len=0,
    			unsigned int orig_len=0, unsigned char* payload=NULL) :
    				PcapFrame(index, ts_usec, ts_sec, incl_len, orig_len, payload)
    		{
    			m_next_p = NULL;
    		}
    		int isLast()
    		{
    		}
    		void setNextNode(PcapFrameNode *next_p=NULL)
    		{
    			m_next_p = next_p;
    		}
    		PcapFrameNode *get_next()
    		{
    			return m_next_p;
    		}
    };
    
    class PcapFrameList
    {
    	private:
    		PcapFrameNode *head_p, *laeufer_p, *last_p, *neu_p;
    	public:
    		PcapFrameList();
    		~PcapFrameList()
    		{
    			clear();
    		}
    		PcapFrameNode* addItem(unsigned int index, unsigned char *ts_usec, unsigned int ts_sec, unsigned int incl_len, unsigned int orig_len, unsigned char* payload);
    		PcapFrameNode *getHead()
    		{
    			return head_p;
    		}
    		unsigned int count();
    		void print();
    		void clear();
    };
    


  • --- mom



  • Komposition ist, wenn du die Objekte innerhalb einer Klasse erstellst und löschst. Also wirst du da wohl auch eine solche haben.



  • Was ist an der Erklaerung bei Wikipedia unverstaendlich?



  • Na ja, aber die Frage ist, wie viele. Werden dort alle gelöscht oder löscht jedes Element der Liste die weiteren Elemente durch Rekursion? Davon hängt nämlich imo ab, ob die Komposition von Liste zu Element nur 0..1 : 1 oder 0..1 : n mit n = Anzahl der Knoten ist. Die restlichen drei Zeiger müsste man dann ja zu einer Aggregation oder Assoziation auslagern (imo Auslegungssache, was man von den zwei nimmt; denn was ist der Unterschied von "hat" und "kennt", wenn mit "hat" nicht das Erstellen gemeint ist? Man kann vll. "kennt" so auslegen, dass manchen Methoden die Objekte übergeben werden, diese aber nicht in der Klasse als Attribute vorliegen)


Anmelden zum Antworten