====== Zadanie 4 Diagram struktury klas ====== Tematem zadania jest modelowanie struktury obejmujące: *identyfikację klas (H) *identyfikację ich atrybutów (M) *identyfikację ich metod (L) *ustalenie związków pomiędzy klasami (H) H (high), M (medium), L( low) - priorytety. Kompletna lista atrybutów oraz metody mogą zostać uściślone podczas następnych zajęć. Realizując zadanie należy uwzględnić rozszerzone tematy podane na końcu tego opisu. Rozszerzenia mają na celu zwiększenie liczby klas. ===== Do przeczytania ===== -[[http://home.agh.edu.pl/~pszwed/pub/uml/uml-pszwed-klasy.pdf|Wykład - diagram struktury klas]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/refman.pdf|UML Reference Manual (1.0)]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/omguml.pdf|Specyfikacja OMG UML]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/Antywzorce.pdf|Antywzorce w stosowaniu UML]] - 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**. 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.). * W zasadzie dobór klas może odpowiadać encjom diagramu ERD, z jednym zastrzeżeniem – ERD słabo rozróżnia element zbioru i zbiór. * Dodatkową różnicą 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** =====Identyfikacja metod ===== 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. ===== 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. ===== Rozszerzone tematy ===== Przykładowe rozszerzenia tematów pozwalające na zidentyfikowanie większej liczby klas... **1. Zakupy w sklepie internetowym** Uwzględnij: autoryzację, tworzenie grup (kategorii towarów). Edycję danych. Wystawianie faktur do zamówienia. **23. Dyspozytor taksówek** Dodaj: listę postojów, informacje o tym, że taksówka czeka na postoju lub znajduje się w innej lokalizacji. Kurs klienta „z ulicy” i na podstawie zlecenia. Harmonogram dyżurów. Załóż, że kierowcy mogą dzielić taksówkę. Statystyki dyżurów i kursów. **7. Wypożyczalnia filmów DVD** Dodaj: serwis internetowy umożliwiający rezerwację filmów wystawianie komentarzy podział filmów na kategorie, edycja kategorii (dla uprawnionego użytkownika, pracownika) historia wypożyczeń rabaty **8. Obsługa rachunku bankowego** Dodaj informację o tym, kto i kiedy wykonuje operacje. Dodaj autoryzację pracownika. **9. System rezerwacji i sprzedaży biletów kinowych** Dodaj serwis internetowy umożliwiający rezerwację. Częściowa lub pełna identyfikacja użytkownika. System przydzielający zarejestrowanym użytkownikom punkty za zakupione bilety. Wyszukiwanie filmów seansów. Klasyfikacja wg. kategorii. Streszczenia, recenzje widzów. Przypomnienia o rezerwacji przez e-mail lub SMS. **10. Biblioteka** Dodaj kategorie książek, dodawanie opinii o książce w interncie, rezerwacje, powiadomienia o zbliżającym się terminie zwrotu.