Table of Contents
Zadanie 1 Diagram struktury klas dziedziny
Tematem zadania jest modelowanie struktury klas dziedziny obejmujące:
- identyfikację klas
- identyfikację ich atrybutów
- ustalenie związków pomiędzy klasami
- identyfikację ich metod (niekoniecznie)
Wybieramy jeden z tematów do zamodelowania. W nawiasach podano przykładowe klasy…
- Biblioteka (Książka, Autor, Czasopismo, Artykuł, Egzemplarz, Wypożyczenie, Rezerwacja, Osoba, Czytelnik, Bibliotekarz)
- Dziekanat (Kierunek, Specjalność, Student, Grupa, Przedmiot, Zajęcia, Prowadzący, Ocena)
- Faktury (Towar, Kategoria, Klient, Sprzedawca, PozycjaFaktury, Cena)
- Restauracja (Menu, Potrawa, Kategoria, Stolik, Zamówienie, PozycjaZamówiania, Rachunek)
- Przychodnia (Lekarz, Specjalność, Pacjent, Dyżur, Wizyta, KartaPacjenta, Wpis, Skierowanie, Recepta)
Do przeczytania
- Stanisław Wrycza, Bartosz Marcinkowski, Krzysztof Wyrzykowski: UML 2.0 w modelowaniu systemów informatycznych, Helion
Identyfikacja klas
- Celem zadania jest identyfikacja klas występujących w modelu dziedziny problemu.
- W zasadzie dobór klas powinien odpowiadać danym przechowywanym/przetwarzanym w systemie informatycznym.
- Model nie będzie uwzględniał klas, które mogą zostać wprowadzone podczas projektowania (np. okno dialogowe, skrypt PHP, strona HTML, baza danych, lista, wektor, itd.).
- Dodatkowo możliwe jest wprowadzenie klas abstrakcyjnych wykorzystywanych podczas określania związków generalizacji/dziedziczenia.
Identyfikacja atrybutów
Wprowadzone atrybuty mają opisywać istotne z punktu widzenia zadań systemu cechy obiektów. Typowy przykład: skórzana tapicerka samochodu jest nieistotna dla systemu rejestracji pojazdów, natomiast może być istotna w systemie obsługującym komis samochodowy.
Uwaga. Nie należy dodawać atrybutów odpowiedzialnych za realizację asocjacji (klucze obce w ERD). Zamiast nich należy wprowadzić role
Związki
UML rozróżnia trzy grupy związków
- zależność (zazwyczaj zależność kodu)
- dziedziczenie
- powiązania ( w tym asocjacja , agregacja i kompozycja)
W przypadku analizy dziedziny związek (1) raczej nie jest modelowany. Należy skupić się na związkach (2) i (3).
Dla przypomnienia: dobrym kryterium ustalania poszczególnych związków są frazy języka naturalnego:
dziedziczenie | jest | Student jest Osobą |
asocjacja | odnosi się do, dotyczy, ma informacje o, używa, korzysta z | Recenzja odnosi się do Filmu, Kierowca używa Samochodu, Ocena z Przedmiotu= Ocena dotyczy Przedmiotu |
agregacja | ma | Pokój ma Ściany |
kompozycja | składa się | Mieszkanie składa się z Pokoi, Kuchni, Łazienki, WC |
Definiując powiązania należy koniecznie ustalić ich krotność. Np.: pokój ma 3,* ścian, mieszkanie składa się z 1,* pokoi.
Identyfikacja metod (w tym zadaniu opcjonalnie)
W podejściu czysto obiektowym system jest siecią obiektów, które wysyłają do siebie komunikaty. Te komunikaty odpowiadają sygnaturom metod.
Sygnatura metody jest specyfikacją usługi, którą obiekt powinien zapewnić korzystając z informacji o swoim stanie (wartościach atrybutów i obiektach powiązanych) oraz obiektach zewnętrznych przekazanych jako parametry.
Identyfikując metody możemy posługiwać się rozmaitymi rutynowymi przepisami:
- Jeżeli obiekt lub aktor wysyła do innego obiektu jakieś dane lub sygnały, to zapewne odbiorca powinien zapewnić metodę, która pozwoli je odebrać
- Jeżeli mamy magazyn danych i funkcje, które pozwalają odczytać, zmodyfikować, usunąć lub dodać dane, to magazyn jest kandydatem na atrybut, natomiast funkcje/procesy kandydatami na metody pewnego obiektu.
- Obiekt nie może stworzyć lub usunąć sam siebie, natomiast może to zrobić kolekcja obiektów.
- Jeżeli mamy scenariusz przypadku użycia, to każda akcja zapewne stanie się metodą (użytkownik wprowadzając dane przesyła je do jakiegoś obiektu i wywołuje metodę, system wysyłając dane skorzysta z metody jakiegoś obiektu)
- Definiując metody należy starać się abstrahować od uwarunkowań technicznych. Może się zdarzyć, że 5 metod zidentyfikowanych w analizie dziedziny zaimplementujemy jako jedną sterowaną parametrem, który będzie przybierał 5 wartości – na przykład wykorzystując konstrukcje IF lub SWITCH-CASE.
Przykład: jeżeli piszemy system obsługi dziekanatu złą metodą jest przetwórzKwerendę()
– w domyśle metoda bazy danych – natomiast dobrą: dodajStudenta()
, usunStudenta()
, zarejestrujStudenta()
– w domyśle klasy GrupaStudentów
Metoda przetwórzKwerendę()
byłaby właściwa, gdybyśmy implementowali silnik bazy danych, a nie konkretny system wykorzystujący istniejące oprogramowanie do obsługi baz danych.