Diagramy UML 2.0 Diagram klas (class diagram) + Hurtownia - nazwa : String - adres : String + hurtownia 1..1 + zamówienie 1..* + klient + Zamówienie - datazlozenia : int + zamówienie 1..1 + podst. platnosci *.kls *.cld + Platnosc + platnosc 1..* + Naleznosc - terminplatnosci : int - suma : float + Wplyw + zaksieguj()
Diagram klas Podstawowy diagram struktury logicznej systemu Przedstawia klasy występujące w systemie i statyczne relacje między nimi pozwala na sformalizowanie specyfikacji danych i metod w sposób związany z oprogramowaniem, ale dotyczący jego zewnętrznego opisu bez wchodzenia w szczegóły implementacyjne
Diagram klas Klasy i obiekty Klasę reprezentuje prostokąt, w którym zapisane są kolejno: Nazwa klasy Atrybuty klasy Operacje klasy + Klient - Pesel : int - Imie : String - Nazwisko : String - Adres : String + Zamawiaj() Cechy klasy są to informacje jakie klasa przechowuje. Przedstawiane są w postaci atrybutów klasy i relacji między klasami Operacje reprezentują usługi jakie klasa dostarcza
Diagram klas Klasy i obiekty Obiekt to instancja klasy + Kowalski:Klient - Pesel : int = 12345678901 - Imie : String = Jan - Nazwisko : String = Kowalski - Adres : String = Jakas 3/24 + Zamawiaj() Klasa jest więc opisem zbioru obiektów o takich samych atrybutach, związkach i znaczeniu.
Diagram klas Atrybuty klasy Pełne określenie atrybutu klasy posiada składnię: [widoczność]nazwa:typ[krotność]{ograniczenia}=wart. domyślna W UML-u wyróżniono 4 poziomy widoczności + publiczny widoczny z każdego miejsca systemu # chroniony widoczny wewnątrz klasy i jej podklas - prywatny widoczny tylko wewnątrz własnej klasy ~ publiczny wewnątrz pakietu widoczny wewnątrz własnego pakietu
Diagram klas Atrybuty klasy Pełne określenie atrybutu klasy posiada składnię: [widoczność]nazwa:typ[krotność]{ograniczenia}=wart. domyślna Krotność zapisywana jest najczęściej w postaci dolna granica..górna granica Przykłady: 1 dokładnie jeden 0..1 jeden lub wcale 1..* przynajmniej jeden * dowolna ilość
Diagram klas Atrybuty klasy Pełne określenie atrybutu klasy posiada składnię: [widoczność]nazwa:typ[krotność]{ograniczenia}=wart. domyślna Najczęściej stosowane ograniczenia to {ordered} elementy wewnątrz atrybutu są uporządkowane {unique} elementy wewnątrz atrybutu nie mogą się powtarzać {readonly} elementy wewnątrz atrybutu nie mogą być zmieniane {frozen} elementy wewnątrz atrybutu, po ustawieniu nie mogą być ponownie edytowane
Diagram klas Atrybuty klasy Atrybuty pochodne i statyczne + Paczka - Adres nadawcy : String - Adres odbiorcy : String - Rodzaj : String - Data wyslania : Date - Data dostarczenia : Date - Max termin dostarczenia : int - /Przetrzymana : boolean = (Data dostarczenia - Data wyslania)>max termin dostarczenia Atrybut pochodny jest zależny od innych atrybutów i może być wyliczony na ich podstawie. Oznaczany jest znakiem / Atrybut statyczny jest widoczny zarówno w klasie jak i w jej instancji podczas gdy inne atrybuty widoczne są wyłącznie w instancjach danej klasy. Oznaczany jest podkreśleniem nazwy.
Diagram klas Operacje klasy Operacje to procesy, które klasa potrafi wykonać Pełne określenie operacji posiada składnię: [widoczność] nazwa(parametr1, parametr2, ) :typ {ograniczenia} Parametry są zapisywane tak jak atrybuty z dodatkiem informacji o kierunku przekazania parametru kierunek nazwa typ[krotność]=wart. domyślna Dostępne kierunki in parametr wejściowy out parametr wyjściowy inout parametr wejściowo/wyjściowy return parametr zwracany przez metodę
Diagram klas Operacje klasy Operacje to procesy, które klasa potrafi wykonać Pełne określenie operacji posiada składnię: [widoczność] nazwa(parametr1, parametr2, ) :typ {ograniczenia} Tak samo jak w przypadku atrybutów istnieje możliwość zdefiniowania dodatkowych ograniczeń i informacji Podstawowym ograniczeniem jest {query} operacja jest zapytaniem. Nie powoduje zmian stanu obiektu Dodatkowo często oznacza się operacje zgłaszające wyjątki <<exception>>
Diagram klas Operacje klasy Operacje to procesy, które klasa potrafi wykonać Pełne określenie operacji posiada składnię: [widoczność] nazwa(parametr1, parametr2, ) :typ {ograniczenia} Operacje mogą mieć również przypisane warunki wstępny i końcowy Warunek wstępny określa w jakim stanie muszą znajdować się pewne elementy systemu by operacja wykonała się prawidłowo Np. pre: parametr1!= null Warunek końcowy określa oczekiwany stan elementu systemu po wykonaniu operacji Np. post: wynik!= null, wynik instanceof artykuły
Relacje - zależność Diagram klas Najsłabszym rodzajem relacji między klasami jest zależność Zmiana w jednej z klas wpływa jakoś na drugą. Zależność ta jest zwykle jednokierunkowa. Oznacza się ją przerywaną linią ze strzałką określającą kierunek relacji + Klasa 1 + Klasa 2 <<zależność>>
Relacje - zależność Diagram klas Do typowych zależności należą: <<call>> - operacje klasy E_1 wywołują operacje klasy E_2 <<create>> klasa E_1 tworzy instancje klasy E_2 <<instantiate>> obiekt E_1 jest instancją klasy 2 <<use>> - aby zaimplementować klasę E_1 niezbędna jest klasa E_2 + E_1 + E_2 <<zależność>>
Relacje - asocjacja Diagram klas Asocjacja reprezentuje czasowe powiązanie między obiektami dwóch klas. Obiekty te jednak są od siebie niezależne. Ich czas życia może być różny. Asocjacja jest równorzędnym do atrybutu sposobem zapisu cech klasy + Klient - Nazwisko : String - Imie : String - Adres : String - Identyfikator : int krotność + sklada 1..1 + {Od_kiedy<Do_kiedy} 0..* + asocjacja warunek + Rezerwacja - Nr_pokoju : int - Od_kiedy : Date - Do_kiedy : Date - Id_kl : int
Relacje - asocjacja Diagram klas Nawigowalność Określa jaka jest wiedza o sobie nawzajem obiektów uczestniczących w relacji Jedno i dwukierunkowa + Klient + Klient_1 + sklada 1..1 + {Od_kiedy<Do_kiedy} 0..* Klient zna swoje rezerwacje Rezerwacja nie ma informacji o kliencie + sklada 1..1 + {Od_kiedy<Do_kiedy} 0..* Możliwa jest nawigacja w obie strony + Rezerwacja + Rezerwacja_1
Relacje - asocjacja Klasa asocjacyjna Diagram klas Zawiera informacje dotyczące samej relacji asocjacji a nie przechowywane przez żaden z połączonych obiektów Jedno i dwukierunkowa + Klient + sklada 1..1 + {Od_kiedy<Do_kiedy} 0..* + Rezerwacja + zamowienie - Data_przyjecia : Date - Sposob_rez : String - potwierdzenie : boolean
Relacje - asocjacja Asocjacja kwalifikowana Diagram klas Wskazuje konkretny atrybut danej klasy zapewniający unikatowość relacji Atrybut ten jest jej kwalifikatorem + Klient + Rezerwacja Id_pokoju 1 + zamowienie *
Relacje - agregacja Diagram klas Agregacja reprezentuje relację całość część Część może należeć do kilku całości a jej czas życia jest od nich niezależny + Orkiestra + Karta muzyka - miejsce w orkiestrze : String - Nazwisko : String - Imie : String - Instrument : String - Data przyjecia : Date - Data zwolnienia : Date
Diagram klas Relacje - kompozycja kompozycja reprezentuje relację całość część Część należy tylko do jednej całości a jej czas życia jest od niej zależny. Jest jednym z komponentów z których składa się całość + Czasopismo - Tytul : String - Wydawnictwo : String - ISBN : String + Tom - Numer : String - Rocznik : int Usunięcie całości powoduje usunięcie wszystkich jego części
Diagram klas Relacje - uogólnienie Uogólnienie tworzy hierarchię klas Relacje wskazują klasę ogólną i klasy bardziej szczegółowe + magazyn + wyszukaj() + sortowanie() + magazyn podreczny + wyszukaj() + sortowanie() + magazyn surowcow + wyszukaj() + sortowanie() + magazyn produktow + wyszukaj() + sortowanie() Dziedziczenie jest jedną z technik uogólniania
Diagram klas Relacje - Klasyfikacja Reprezentuje związek między obiektem i klasami Obiekt może należeć jednocześnie do wielu klas - typów Ograniczenia przynależności do klas {disjoint} obiekt może należeć tylko do jednej klasy naraz {overlaping} obiekt może należeć do wielu klas, posiadać wiele typów {complete} prezentowana lista podklas jest kompletna, nie może powstać nowa podklasa {incomplete} mogą powstać nowe podklasy
Diagram klas Relacje - Klasyfikacja Reprezentuje związek między obiektem i klasami Obiekt może należeć jednocześnie do wielu klas - typów {disjoint}, {complete} {overlaping}, {incomplete} + ogolne + ksiazka + wydawnictwo + specjalizowane + czasopismo
Klasa abstrakcyjna Diagram klas Klasa abstrakcyjna reprezentuje wirtualny byt grupujący wspólną funkcjonalność kilku klas. Posiada ona sygnatury operacji (czyli deklaracje, że klasy tego typu będą akceptować takie komunikaty), ale nie definiuje ich implementacji. Klasa abstrakcyjna nie posiada własnych instancji obiektów. Na diagramie oznaczana jest kursywą w nazwie klasy lub słowem {abstract}
Diagram klas Uogólnienia hierarchia klas hhj Klasa najwyższa w hierarchii + Osoba {root} Klasa abstrakcyjna + Pracownik obslugi kina Żadna fizyczna osoba nie jest bezpośrednio pracownikiem obsługi kina + Pracownik dzialu informacji + Kasjer + Operator projektora Klasa najniższa w hierarchii + Kasjer biletowy {leaf} + Kasjer gastronomiczny {leaf}
Diagram klas Proces tworzenia diagramu klas - propozycja Zidentyfikowanie i nazwanie klas Połączenie klas z wykorzystaniem asocjacji Zidentyfikowanie i nazwanie atrybutów i operacji Określenie cech asocjacji (nazwa, role, nawigacja, liczebność, agregacja, kwalifikacja) Opracowanie innych rodzajów związków (uogólnień, zależności, realizacji) Wyspecyfikowanie atrybutów i operacji według składni Opracowanie diagramów obiektów
Diagram klas Przykład telefonia komórkowa + Biling + Karta SIM + Taryfa + nosnik pamieci 0..* + cennik 1..1 + zest. polaczen 0..* + numer 1..* + zbior dok. 1..1 + wlasciciel 1..1 + Korespondencja + komunikacja 0..* + Klient + wlasciciel 1..1 + Komorka + wlasciciel 1..1 + produkt 1..* + zbior dok. 1..1 + produkt 10..* + rozliczenie 0..* + punkt sprzedazy 1..* + Faktura + zestawienie 1..1 + Pozycja + SalonFirmowy + przedmiot sprz. 1..*
Diagram klas Przykład księgarnia wysyłkowa 1..* Książka -Autor : string -tytuł : string -wydawca : string -ISBN : String -datawydania : Date -cenanetto : Decimal -stawkavat : Byte +dodajpozycję() +usuńpozycję() +przekazpozycję() +obliczcenębrutto() +wyczyśćkoszyk() +wyszukaj() KartaKredytowa -typkarty : String -nrkarty : String -datawazności : Date -limit : Single +weryfikujdane() +obciąż() Zamówienie -nrzamówienia : String -datazamówienia : Date -formazapłaty : String -status : String 1..* 0..* +sporzadź() +ustaldatę() +zmieńformę() +zmieństatus() +wskazniezrealizowane() +wyliczwartość() 1 1 0..* 1 0..* 1 Klient #telefon : String #ulica : String #nrdomu : String #nrlokalu : String #kodpocztowy : String #miasto : String +aktualizuj() 0..* Użytkownik 1..3 -login : String -hasło : String +zaloguj() 0..* Faktura -nrfaktury : String -datawystawienia : Date -datapłatności : Date -Zapłacona : Boolean +sporzadź() +zaznaczpłatność() Dostawa -formadostarczenia : String -kosztnetto : Decimal -stawkavat : Byte +obliczkosztbrutto() +dodajkoszt() KlientFirmowy -nazwafirmy : String -NIP : String KlientIndywidualny -imię : String -nazwisko : String UżytkownikZaawansowany -poziomdostępu : Byte +zmieńdostęp()
Diagramy UML 2.0 Diagram sekwencji (sequence diagram) Opisuje sekwencje komunikatów wymienianych między obiektami Recepcjonista : Rezerwacja : BazaDanych : *.skw *.sd otwórzrezerwacje() sprawdzdostepnoscpokoi() 10/13 wprowadzdane() zamknij() dokonajrezerwacji()
Diagram sekwencji Diagramy sekwencji kładą nacisk na porządek w jakim dzieją się rzeczy Służą przede wszystkim do pokazywania interakcji między poszczególnymi elementami systemu Pokazują czas życia obiektów w stosunku do innych współuczestniczących w obsłudze danego zadania Z reguły pokazują jeden scenariusz, nie wszystkie możliwe
Diagram sekwencji Elementy diagramu Obiekt Okno_logowania Reprezentuje obiekt w systemie lub jeden z jego komponentów Czas Linia życia. Pokazuje czas istnienia danego obiektu.
Diagram sekwencji Elementy diagramu Aktywacja Okno_logowania Obszar aktywacji. Reprezentuje czas, w którym obiekt jest aktywny (wykonuje jakieś zadanie) Znacznik zerwania. Pokazuje jawnie chwilę w której dany obiekt przestaje istnieć
Diagram sekwencji Elementy diagramu Okno_logowania Komunikat Pokazuje przepływ sterowania (i informacji) między poszczególnymi obiektami Skrypt_logowania Sprawdź_logowanie Istnieje kilka rodzajów komunikatów
Diagram sekwencji Elementy diagramu Komunikat Komunikat prosty Komunikat synchroniczny Komunikat asynchroniczny Komunikat zwrotny Pełne przekazanie sterowania do drugiej instancji Wstrzymanie operacji do czasu uzyskania odpowiedzi Kontynuowanie operacji bez oczekiwania na odpowiedź Powrót z wywołania podprogramu
Diagram sekwencji Przepływy komunikatów Sprzedawca Zamówienie Artykuł pobierzwartość cena pobierzadres Przepływ zagnieżdżony
Diagram sekwencji Komunikaty mogą być opisane w sposób sformalizowany poprz / [warunek] *[iter] nr sekw : wynik := operacja(lista) Poprz lista komunikatów poprzedzających Warunek warunek wysłania komunikatu Iter ilość powtórzeń komunikatu Nr sekw numer określający kolejność komunikatu Wynik nazwa zmiennej zwracanej Operacja nazwa wywoływanej operacji wraz z parametrami
Diagram sekwencji Komunikaty mogą być opisane w sposób sformalizowany poprz / [warunek] *[iter] nr sekw : wynik := operacja(lista) Przykłady komunikatów przesuń(1,2) wyn1:=przesuń(5,5), *[1..5]: wyn1 := przesuń(5,7) [z>0]: wyn1 := przesuń(5,7), A3,B4 / [x<0] *[1..4] C3.1: wyn2 := pobierzlokację(wyn1) [dostęp do bazy] *[Dla każdego rekordu] 6: DaneWyj:=Formatuj(DaneWej,Format) [drukarka zajęta] zapisz_do_kolejki(wydruk)
Diagram sekwencji Przepływy komunikatów Obiekt1 Obiekt2 Warunki pozwalają na rozdzielenie komunikatów i wprowadzenie alternatywnych linii życia obiektów [x>0]komunikat1 [x<=0]komunikat2 Alternatywna linia życia obiektu 2
Diagram sekwencji Przepływy komunikatów Obiekt1 Obiekt3 Obiekt2 Możliwe jest również alternatywne wykorzystywanie dodatkowych obiektów [x>0]komunikat1 [x<=0]komunikat2 Komunikat3 Obiekt wykorzystywany tylko w przypadku x<=0
CDN Diagram sekwencji