Zpo-10-wyk-Slajd16
Change Bidirectional Association with Uni
Przekształcenie to służy do osiągnięcia przeciwnego celu niż poprzednie: zmiany relacji dwukierunkowej na jednokierunkową. Zmiana taka jest wskazana, gdy dwie klasy są zbyt blisko ze sobą związane. Wówczas usunięcie jednego z kierunków asocjacji pozwala uniezależnić jeden z obiektów i zmniejszyć siłę zależności istniejącej między nim a drugim obiektem.
Aby przystąpić do realizacji tego przekształcenia, należy najpierw określić, który z kierunków asocjacji ma pozostać, oraz w jaki sposób można zastąpić usuwany kierunek relacji. Nie można bowiem całkowicie usunąć asocjacji bez wpływu na sposób komunikowania się obiektów, dlatego konieczne jest wprowadzenie rozwiązania zastępczego, które nie wymaga istnienia stałej asocjacji.
Kolejnym krokiem jest usunięcie odwołań do metody aktualizującej referencje powrotne po stronie obiektu kontrolowanego (w tym przypadku B) z metody w obiekcie kontrolującym (czyli A). Po wykonaniu tego kroku obiekt kontrolowany nie będzie posiadał aktualnych referencji do obiektów po stronie kontrolującej, a zatem jest to krok wprowadzający istotną zmianę mogącą mieć wpływ na zachowanie programu.
Po usunięciu odwołania do metody po stronie obiektu B można usunąć zarówno pole reprezentujące referencje powrotne w tej klasie, jak i samą metodę. Ostatnim krokiem jest modyfikacja metod w klasie B, które wymagają referencji do klasy A: może ona np. zostać przekazana jako parametr lub uzyskana za pośrednictwem innego obiektu.