UML [ Unified Modeling Language ]
W najnowszej wersji (2.4.x) języka UML wyróżnia się 13 diagramów głównych oraz 4 abstrakcyjne.
Gdyby ktoś zaczepił Was w ciemnej alejce i szepnął –„Psyt, chcecie zobaczyćdiagram UML?” – to prawdopodobnie chciałby Wam pokazać diagram klas.
UML – język formalny służącydo opisu świata obiektów w analizie obiektowej orazprogramowaniu obiektowym.
Twórcami języka UML są Grady Booch, James Rumbaugh i Ivar Jacobson (X 1995)
Nasz cel: używanie graficznej reprezentacji UML do przestawianiatego, co projektujemy, bez wnikaniaw zbytnie szczegóły formalne UML-a.
UML [ drzewo diagramów ] • UML to nie metodologiaprojektowania i tworzeniasystemów• UML jest intensywnie rozwijany (obecnie Object Managment Group)• UML jest standardem notacji, warto go poznać
Use Case Diagrampzedstawienie przypadków użycia (wybranego fragmentu funkcjonowania systemu), aktorów oraz związków między nimi
UML [ drzewo diagramów ]
Class Diagrampzedstawienie statycznych elementów danej dziedziny (ludzi, rzeczy, danych) oraz związków między nimi (czyli statycznej struktury systemu)
Sequence Diagramrodzaj diagramu interakcji opisującym oddziaływania między instancjami klasyfikatorów systemu w postaci sekwencji komunikatów wymienianych między nimi (dynamiczny opis konkretnego przypadku użycia)
State Machine Diagramodzwierciedlenie dyskretnego, skokowego zachowania się skończonych systemów stan-przejście (obiekty użytkowane w systemie przechodzą w trakcie swojego cyklu życia przez szereg kolejnych stanów)
UML [ drzewo diagramów ] Activity Diagramprzedstawienie sekwencyjnych i (lub) współbieżnych przepływów sterowania oraz danych pomiędzy uporządkowanymi ciągami czynności, akcji i obiektów
Deployment Diagramrodzaj diagramu wdrożeniowego, który przedstawia fizyczną lub logiczną strukturę systemu (w konkretnych modułach sprzętowych) wraz ze ścieżkami interakcji zachodzącymi pomiędzy nimi
Component Diagramrodzaj diagramu wdrożeniowego, który wskazuje organizację i zależności między komponentami (komponent -hermetyczny, wymienny moduł oprogramowania systemu, realizujący określone jego usługi za pośrednictwem interfejsów
UML [ prezentacja diagramów ]
nagłówek
• każdy diagram może być prezentowany w postaci obramowanej (oto przykładowa ramka) lub nieobramowanej
• nagłówek może się składać z[ <rodzaj> ] < nazwa> [ <parametry> ]
• rodzaj - wyróżnik diagramu, nie jest ujednolicony, można korzystaćze skrótów np. cld - class diagram, ud - use case diagram, sm - state machine diagram, ad - activity diagram,cod - component diagram, dd - deployment diagram
• nazwa (obowiązkowa) - sygnatura opisująca zawartość diagramu• parametry - kluczowe dla danego diagramu np. nazwy instancji
klasyfikatorów (…nazwy obiektów danego typu), wartości zwrotne,operatory interakcji
( merytoryczna zawartość diagramu )
UML [ diagramy klas ]
diagram klas – graficzne przedstawienie statycznych, deklaratywnych elementów dziedziny przedmiotowej oraz związków między nimi
klasa – uogólnienie zbioru obiektów, które mają takie same atrybuty, operacje, związki i znaczenie, klasa na diagramie złożona jest z trzech elementów: nazwy, atrybutów i metod
- accountBalance
+ deposit( )+ withdraw( )
Bank Account Class wymagana jest tylko nazwa
atrybutyspecyfikator-dostępu nazwa: typ krotność =wartość domyślna {opis-cechy}
specyfikator-dostępu+ publiczny− prywatny# chroniony~ pakiet
przykład−nazwisko: String[1] = "default" {readOnly}
metodyspecyfikator-dostępu nazwa(lista parametrów): wyrażenie-typu-wyniku {opis-cechy}
parametry na liście, podobnie jak atrybuty:kierunek nazwa: typ = wartość-domyślnakierunek in – wejściowy, out - wyjściowy
UML [ diagramy klas – rodzaje związków ]klasy obiektów – podobnie jak inne elementy UML powiązane są różnego rodzaju związkami• asocjacje• uogólnienia• zależności• realizacje
binarne, n-arnemożna sprecyzować za pomocą• nazwy• ról powiązanych klas• nawigacji• liczebności• agregacji
Menedżer Projekt
Repertuar SalaKinowa
RezerwacjaMiejsc
SystemDźwiękowy
UML [ diagramy klas – asocjacja ]
Rozliczenie KorespondencjaElektroniczna
krotność
jest dokonywana ►
nazwa asocjacji
Klient
specyfikacja roli
Repertuar SeansFilmowyzestawienie pozycja
nawigacja
Klient Rachunek
1
n – dokładnie n (n>1)1..n – od 1 do n0..n – od 0 do nn..m – od n do m (m>1)n..* – n lub więcejn, m, o..p, q – złożona
1 – dokładnie jeden1..* – jeden lub wiele0..1 – zero lub jeden* – wiele0..* – zero lub wiele
domyślnie nawigacja dwukierunkowa
wskazanie kierunku nawigacji zwiększaefektywność komunikowania się
UML [ diagramy klas – agregacja jako forma asocjacji ]
producentmodel
siedzenia
agregacja całkowita (kompozycja)
Silnik
Siedzenie *
wskazuje na możliwośćnawigowania
wskazuje na agregacjęprzez referencje
nazwaplanyliczba muzyków
nazwiskoinstrument
agregacja częściowa
Orkiestra Wykonawca1..* 1..*
Samolot
2..4
Kokpit1 1
engines[4]: Silnikseats[400]: Siedzeniecockpit: Kokpit
Samolot
UML [ diagramy klas – przykład ]
Klient AparatTelefonicznyKorespondencja
Pozycja SalonFirmowyFaktura
KartaSIM TaryfaBilling0..* ◄ jest przypisana 1
nośnikpamięci
właściciel 1
1..*
produkt
numertelefonu
▲użytkuje
właściciel
0 kupuje ► 1..*
produkt
punktsprzedaży
▲oferuje
10..*
1..*1 zawiera ► 1..*
cennikpołączeń
zestawienie przedmiotsprzedaży
* ◄ otrzymuje 1
właścicielformakomunikacji
▲zawiera
zawiera▼
0..*
0..*
1
1zbiór
dokumentów
rozliczenie
zestawieniepołączeń
zbiórdokumentów
UML [ diagramy klas – klasy asocjacyjne, inne ]klasa asocjacyjna – umożliwia bardziej precyzyjny opis związku między klasami, służy do przedstawienia asocjacji w postaci klas, każdej asocjacji można przypisać jedną instancję tego rodzaju klasy
Uczestnik Aukcja
RezerwacjaMiejsc
Repertuar ProjekcjaSeansu
asocjacja kwalifikowana
jest sprzedającym ►
jest kupującym ►
asocjacja wielokrotna
artykuł SprzedającyLicytacja1..* 0..*
UML [ diagramy klas – uogólnienia, klasy abstrakcyjne ]
{root}klasa abstrakcyjnazapisuje się kursywąklasa podstawowamożna oznaczyć {root}w odróżnieniu do pochodnychoznaczanych jako {leaf}
ograniczenia w uogólnieniu{complete} – zawiera pełen zestaw podklas dla danej klasy{incomplete} – zestaw podklas przypisanych danej klasie nie jest pełny (istniejewięcej klas specjalizowanych nie mających istotnego znaczenia w rozpatrywanymkontekście{disjoint} – domyślny rodzaj uogólnienia, podklasa w hierarchii jest rozdzielna tzn. posiada tylko jedną klasę bezpośrednio nadrzędną{overlapping} – określone klasy mogą mieć wspólne podklasy, zwykle oznaczato dziedziczenie wielokrotne
Wzorce projektowe [ wstęp ]
Motywacje definiowania wzorców projektowych
Za twórcę uważany jest amerykański architekt Christopher AlexanderAlexander, C., Ishikawa, S., Silverstein, M., The Timeless Way of Building, New York: Oxford University Press, 1979.
Ocena, czy dana budowla jest piękna, jest nie tylko kwestią smaku i subiektywnego punktu widzenia. Podlega weryfikacji w oparciu o mierzalne, zdefiniowane wielkości. Tymi wielkościami są wzorce projektowe. Co jest obecne w dobrym projekcie, a czego nie ma w złym (i vice versa)? Jakość projektu jest rzeczą podlegającą obiektywnej analizie i ocenie, zatem powinniśmy potrafić zdefiniować co dany projekt czyni dobrym lub złym. Potrzeba zatem przeanalizować różnego rodzaju struktury rozwiązujące ten sam problem. Odnajdując w różnych projektach wspólne części stanowiące dobre rozwiązanie, możemy zdefiniować te wspólne części jako wzorce.
Wzorzec – rozwiązanie problemu w danym kontekście
Wzorzec zawsze ma nazwę i cel. Szukając właściwego wzorca należy wprost określić dany problem, sytuację do rozwiązania.Zaletą używania wzorców jest to, że można czerpać wprost z rozwiązania wypracowanego przez innych jako dobre (najlepsze) w danym zagadnieniu, unikając błędów.
• Zostały pomyślane jako zestaw sprawdzonych koncepcji architektonicznych• Dzięki nim każdy miał mieć możliwość zbudować swój własny dom• Wzorce Alexandra nie znalazły uznania wśród innych architektów
Wzorce projektowe [ programowanie ]
Wzorce w programowaniu
Wprowadzono je do inżynierii oprogramowania w 1995 („Gang of Four” – „banda czworga” – E. Gamma, R. Helm, R. Johnson, J. Vlissides „Design Patterns: Elements of Reusable Object-Oriented Software”)
Czym są wzorce projektowe?• Rozwiązanie problemu w określony sposób• Opisuje problem który się stale powtarza• Stanowią abstrakcyjny opis zależności pomiędzy klasami• Znaczna ich część stanowi obszerna dokumentacja opisująca sposób użycia wzorca • Są łączone w celu rozwiązania bardziej złożonego problemu• Algorytmy nie są wzorcami projektowymi jako że rozwiązują problemy obliczeniowe, a
nie projektowe
KlasyfikacjaKonstrukcyjne - Strukturalne - Operacyjne
Wzorce projektowe [ systematyka ]
„Każdy wzorzec opisuje problem, który ciągle na nowo pojawia się w naszym otoczeniu i opisuje rdzeń jego rozwiązania w taki sposób, że można go używać milion razy i nigdy w ten sam sposób.”
Nazwa wzorcaOdzwierciedla problem, rozwiązanie i konsekwencje danego wzorca
ProblemOpisuje zagadnienie i kontekst wystąpienia wzorca
RozwiązanieOpisuje elementy tworzące projekt, ich relacje, odpowiedzialności oraz współpracę
KonsekwencjeRezultaty zastosowania wzorca – korzyści i straty
Wzorce projektowe pomagają w realizacji zasady „open-closed” (sformułowanej przez Bertranda Meyera): moduły, metody i klasy powinny być otwarte na rozszerzenia, pozostając zarazem zamkniętymi na modyfikacje. Program należy tak projektować, żeby dało się powiększać jego funkcjonalność bez zmieniania programu (interfejsów).
Christopher Alexander
Wzorce projektowe [ systematyka ]
PrzeznaczenieKonstrukcyjne(Creational)
Strukturalne(Structural)
Behawioralne(Behavioral)
Zakres Klasa Factory Method Adapter InterpreterTemplate Method
Obiekt Abstract Factory BuilderPrototype Singleton
Adapter BridgeCompositeDecorator FacadeProxy
Chain of ResponsibilityCommandIteratorMediatorMementoFlyweightObserverStateStrategyVisitor
Wzorce projektowe [ observer – obserwator ]
Cel: obserwujemy stan jednego obiektu a gdy ten się zmieni, wysyła informację do wszystkich obiektów zarejestrowanych jako obserwatorzy w celu wywołania metody aktualizującej jeProblem: potrzebujemy zawiadomić zmienną ilość (listę) obiektów jeśli zaszło jakieś zdarzenie (zmiana stanu obserwowanego obiektu)Rozwiązanie: obserwatorzy delegują odpowiedzialność za monitorowanie zdarzenia do centralnej klasy SubjectImplementacja: obserwatorzy są na liście posiadanej przez klasę Subject i kiedy nastąpi zdarzenie, następuje iteracja po liście wszystkich obserwatorów (wskaźniki do nich) i wywołanie ich metody update()
Definicja GoF:Definiuje zależność wielu od jednego tak, że jeśli jeden obiekt zmienia stan, wszystkie zależne od niego są o tym poinformowane i odpowiednio zaktualizowane.
Wzorce projektowe [ observer – przykład ]