ernst hat gesagt.:
Danke für deinen hervorragenden Beitrag. Er hat mir anschaulich erklärt, worum es geht.
Bwoah, das ist ein recht außergewöhnliches Kompliment, normalerweise bin ich eher schlecht, was das erklären von allgemeinen sachen angeht, thx^^
Vorteil (bidirektionale Assoziation gegenüber unidirektionaler Assoziation)
besseres Laufzeitverhalten (Performance)
ja, wenn du die verbindungen auch benutzst, versteht sich... Wenn man einfach so unnötige Referenzen reinpflanzt, sollte das die performance imho senken. Zumindest hat der GC schonmal mehr zu arbeiten, und das ist auch nicht kostenlos => immer so viel wie nötig, so wenig wie möglich und alles in Maßen...
Nachteil:
Bei Änderungen (z.B. wechselt ein Gast den Club) müssen 2 Seiten geändert werden müssen, um sicherzustellen dass die Daten konsistent sind.
Unidirektionale Assoziationen sind dagegen viel einfacher zu warten.
jo, aber da gewöhnt man sich dran. Wenn man weiß was man haben will, dann schafft man es meistens, da keine Fehler einzubauen.
1) Weisst du noch ein paar weitere Punkte für Vor- und Nachteile?
Die Referenzen kosten Speicherplatz. GC muss mehr absuchen (wie oben erwähnt).
Aber wenn man O(1) Zugriff braucht, kommt man da einfach nicht drumherum.
2)
Wann soll man deiner Meinung nach unidirektionale Assoziationen, wann bidirektionale Assoziation verwenden?
Dazu kann es keine "Meinung" geben. Man formuliert das Problem, stellt die Forderungen, hockt sich hin und fängt an verschiedene Szenarien durchzurechnen. Die Struktur, bei der am ende die kleinste laufzeit rauskommt, hat gewonnen. Man berücksichtigt dabei das geforderte Laufzeitverhalten für kleine und große Datenmengen, passt auf, dass es nicht zu speicherfressend ist usw.
Darüber gibts tolle Vorlesungen und viele dicke Bücher, kannst mal in eine Bibliothek gehen, und nach irgendwelchen Büchern suchen wo zB. "Datenstrukturen" draufsteht, da werden die klassischen Sachen erklärt (Listen, Bäume, Octrees, BSP's, Mengen, Maps, HashMaps, Skiplists, Graphen) und der ganze Zeug. Für die Spezialisierteren Strukturen, wo viele eigenbau-objekte mitmischen sollte man dann zu irgendwelchen "Softwareentwicklung"-Büchern greifen und guggen, dass da ein paar schöne uml-diagramme drin sind, und ein paar Beispiele gegeben werden, wie wo was verknüpft wird. Dann läuft man wieder los, und sucht nach irgendeinem Buch über verschiedene Design-Patterns, schaut sich an, wie wo was da verknüpft ist.
Wenn man gerafft hat, wie die eigenen Programme innendrin funktionieren, wenn man die Abläufe nachvollziehen kann, dann kriegt man das richtige Gefühl, und kann dass einfach so aus dem Bauch heraus alles richtig konstruieren, und greift dann immer seltener zu irgendwelchen dicken Büchern und Rechnungen.