Cześć wszystkim,
Stworzyłem sobie ostatnio w Javie system do głosowania, działający poprzez sieć lokalną i teraz potrzebuję udokumentować w języku UML jego architekturę. Posiedziałem trochę w temacie i skleciłem diagram klas jednej części systemu, czyli samego serwera, który to wrzucam w załączniku do wglądu. Kwestia wygląda tak, że nie jestem w stanie określić, czy to, co udało mi się zrobić, jest poprawne. Nie mam pewności co do połączeń między poszczególnymi klasami. Czy ktoś z Was, znających się lepiej na tym języku modelowania, jest w stanie sprawdzić ten diagram i wytknąć mi błędy? Mam dylemat w których sytuacjach użyć np. agregacji zamiast kompozycji, itp.
Opis wymaganych połączeń:
(MainWindow - ApplicationManager) - okno główne tworzy obiekt ApplicationManagera i ma do niego dostęp, ale komunikacja w odwrotną stronę jest niemożliwa. Dostęp do ApplicationManagera mają też inne obiekty (widać na diagramie).
(ApplicationManager - QuestionWindow) - ApplicationManager tworzy okno QuestionWindow do dodawania pytania, a okno odsyła mu treść pytania podaną przez użytkownika po kliknięciu guzika po czym się zamyka, czyli następuje komunikacja w obu kierunkach,
(ApplicationManager - Server) - ApplicationManager tworzy obiekt Serwera, komunikacja w obu kierunkach jest możliwa (ApplicationManager ma dostęp do Servera i odwrotnie),
(Server - Discovery) - Server tworzy obiekt Discovery, komunikacja tylko w jedną stronę (Server ma dostęp do Discovery),
(Server - Connection) - Serwer tworzy kolejne obiekty Connection, ale ich nie magazynuje, komunikacja tylko w jedną stronę (Server ma dostęp do aktualnie utworzonego obiektu Connection, później obiekt ten jest nadpisywany kolejnym),
(ApplicationManager - Connection), (ApplicationManager - Question), (ApplicationManager - Voter) - ApplicationManager posiada listy, na których znajdują się obiekty wymienionych klas, komunikacja jednokierunkowa w przypadku Question (ApplicationManager ma dostęp do Question), dla Connection i Voter - dwukierunkowa,
(Connection - Voter) - obiekt klasy Connection posiada referencję do obiektu klasy Voter, komunikacja w jedną stronę (Connection ma dostęp do Votera),
(Connection - EncryptionManager) i (Connection - ResponseHandler) - obiekt klasy Connection tworzy dwa pozostałe i ma do nich dostęp (referencje), więc komunikacja w jedną stronę,
(Connection - RequestHandler) - obiekt klasy Connection tworzy obiekt RequestHandler, przy czym komunikacja jest dwustronna (Connection może się dobrać do RequestHandlera i odwrotnie),
(ApplicationManager - RequestHandler) - komunikacja dwukierunkowa, polegająca tylko na wzajemnym używaniu metod,
(RequestHandler - Voter) - RequestHandler tworzy obiekt klasy Voter, komunikacja w jedną stronę (RequestHandler ma dostęp do Votera, ale nie odwrotnie).
Inne połączenia możliwe są tylko pośrednio, przechodząc przez dodatkowe obiekty np. z RequestHandlera do Question należy przejść przez ApplicationManager (użyć jakiejś jego metody).
Informacje dodatkowe:
Główne okno MainWindow wraz z ApplicationManagerem może sobie po uruchomieniu działać bez istnienia pozostałych obiektów (liczba pytań, połączeń i głosujących może być zerowa, serwer może być nieuruchomiony, a okno dodawania pytania może jeszcze nie istnieć).