Chociaż myślę, że rozumiem aggregation
i composition
, mam trudności ze zrozumieniem skojarzenia bi-directional
i uni-directional
. Czytałem, że z bi-directional
stowarzyszenia, obie klasy wiedzieć o sobą iz uni-directional
stowarzyszenia tylko jedna z klas jest świadomy relacji. Jednak to wyjaśnienie wydaje mi się zbyt abstrakcyjne i chciałbym wiedzieć, co to oznacza w szczególności dla mojego kodu i programu, który piszę. Byłoby bardzo miło, gdybyś mógł, wraz z wyjaśnieniem, zapewniają prosty przykład jak te dwa przetłumaczyć na kod (wolę C++, ale może to być coś w tym Pseudokod)skojarzenia dwukierunkowe i jednokierunkowe UML
Odpowiedz
Dwukierunkowe stowarzyszenia jest żeglowna od oba zakończenia. Na przykład, biorąc pod uwagę następujące klasy (dla uproszczenia przyjmijmy, że stowarzyszenie jest 0..1 na obu końcach)
class Parent {
Child* children;
}
class Child {
Parent* parent;
}
można przejść od Parent
do swojego dziecka, i vice versa: rodzic wie o jego dziecko, dziecko wie o swoim rodzicu i (jeśli this.parent!=null
) this.parent.child==this
(w przeciwnym razie nie byłoby to samo stowarzyszenie).
Parent <---------> Child
Jednak gdyby nie wskaźnik do Parent
w Child
:
class Child { }
byłoby stowarzyszenie jednokierunkowy: można iść z rodzica na dziecko, ale nie może wrócić z dziećmi rodzicowi.
Parent ----------> Child
Dzięki za wyjaśnienie różnicy między stowarzyszeniem "dwukierunkowym" a "jednokierunkowym", ale teraz mam drugie pytanie. Do tej pory myślałem, że posiadanie wskaźnika członka/odniesienia do powiązanej klasy byłoby implementacją agregacji, ale przykładowy kod również używa wskaźników. Czy to oznacza, że agregacja i powiązanie są realizowane w ten sam sposób w kodzie? – jcxz
Tak, agregacja jest bardziej jak element koncepcyjny modelu. Pamiętam, że rozmawialiśmy o tym w http://stackoverflow.com/questions/15285996/do-pointer-reference-data-members-indicate-an-association-or-aggregaation-relati/15294388 – Javier
OK, dziękuję bardzo, teraz wszystko zaczyna mieć dla mnie większy sens. Podsumowując moje odkrycia: asocjacja, agregacja i skład są raczej pojęciami semantycznymi , które można zasadniczo zrealizować w bardzo podobny sposób. Dodatkowo (dla wszystkich, którzy natkną się na ten wątek w przyszłości), znalazłem ten post: http://stackoverflow.com/questions/4298177/association-vs-aggregation, który wyjaśnia różnice semantyczne między tymi trzema. – jcxz
Niestety, specyfikacja UML nie definiuje żadnego pojęcie „związku dwukierunkowym”, ale tylko wspomina się o „dwukierunkowego żeglowność”, gdzie „żeglowność” (oznaczone na strzałka na schemacie klasa) nie ma dobrze zdefiniowane znaczenie obliczeniowe, jakie może być dostarczone, np. przez właściwości referencyjne lub przez zapytania. Najbardziej wydajna forma "żeglowności", dostarczana przez właściwości referencyjne, jest modelowana za pomocą koncepcji UML stowarzyszenia końcowego właściciela (oznaczonego jako kropka w schemacie klasowym).
dwukierunkowe związki może być precyzyjnie określona jako para wzajemnie odwrotne właściwości odniesienia. Definicja ta zakłada dwa warunki:
dla
this
przedstawieniu dziecko,this.parent.child == this
, jak wyjaśniono w nieco niepełną odpowiedź Javier, ale dodatkowo równieżdla
this
przedstawieniu rodzicem,this.child.parent == this
.
Możesz przeczytać więcej na ten temat, i znaleźć wiele diagramów klas opisujących przykłady stowarzyszeń dwukierunkowych w samouczków Managing Bidirectional Associations in Java EE i Managing Bidirectional Associations in JavaScript.
- 1. neo4j: relacje jednokierunkowe/dwukierunkowe?
- 2. NSOperationQueue i współbieżne vs jednokierunkowe
- 3. Jednokierunkowe wiązanie w angularjs 1.4
- 4. Objective-C i UML Modelowanie
- 5. Szyny 4 Polimorficzne skojarzenia i obawy
- 6. Buforowanie ograniczone skojarzenia
- 7. Szybkie i eleganckie jednokierunkowe mapowanie znanych wartości całkowitych
- 8. Automapper: mapowanie dwukierunkowe z ReverseMap() i ForMember()
- 9. NetBeans ("6.8" i "później") - obsługa UML?
- 10. UML metamodel: pochodzi, unia pochodzi i podzbiorów
- 11. Różnica między licznością "*" i "0 .. *" - UML
- 12. Jak wygenerować Diagramy i UML kodu Kotlin?
- 13. PhpStorm, diagramy UML i pliki xmi
- 14. Dwukierunkowe wiązanie z $ routeParams?
- 15. extjs 4 skojarzenia klasy XTemplate
- 16. Mapowanie skojarzenia Doctrine2 z warunkami
- 17. ActiveRecord: Czy mogę skopiować skojarzenia?
- 18. Mapowanie skojarzenia z mapowaną nadklasą
- 19. Wiązanie dwukierunkowe WPF XML
- 20. Szyfrowanie dwukierunkowe w PHP
- 21. Mapowanie dwukierunkowe AutoMapper
- 22. DataGridCheckboxColumn dwukierunkowe wiązanie
- 23. Zapytanie według przykładów o skojarzenia
- 24. Wizualizacja czasu UML
- 25. Schemat klasy UML MVC
- 26. UML do reprezentacji XML
- 27. Rysowanie diagramów stanu UML
- 28. Jak dołączyć skojarzenia zagnieżdżone i siostrzane do aktywnego rekordu to_json?
- 29. szyn 3 polimorficzny skojarzenia z spinacza i wielu modeli
- 30. Intellij UML Diagramy
Masz kilka przykładów w http://sourcemaking.com/refactoring/change-bidirectional-association-to-directionid i http://etutorials.org/Programming/UML/Chapter+4 .+Class+Diagrams+The + Essentials/Associations /. – user1929959