Nadstruktura języka UML w wersji 2.2 Część II Modelowanie struktury – klasy (pakiet UML::Classes)
Pakiet UML::Classes – struktura
Pakiet UML::Classes::Kernel Zależności od pakietów infrastruktury
Pakiet Kernel – diagram bazowy
Pakiet Kernel – diagram przestrzeni nazew-niczych
Pakiet Kernel – diagram krotności
Pakiet Kernel – diagram wyrażeń
Pakiet Kernel – diagram instancji
Pakiet Kernel – diagram ograniczeń
Pakiet Kernel – diagram klasyfikatorów
Pakiet Kernel – diagram klasyfikatorów – dodatkowe atrybuty i powiązania RedefinableElement::isLeaf – określa czy dana instancja rzeczywiście może być przedefiniowana true – brak możliwości przedefiniowania Domyślnie: false Generalization::isSubstitutable – określa czy klasyfikator specyficzny może być użyty w miejsce klasyfikatora ogólnego (domyślnie: true) Classifier::redefinedClassifier – klasyfikatory (zagnieżdżone) przedefiniowane przez bieżący klasyfikator UML::Classes::Kernel dodaje możliwość przedefiniowywania zagnieżdżonych klasyfikatorów
Pakiet Kernel – diagram cech
Pakiet Kernel – diagram cech – dodatkowe atrybuty i powiązania Feature::isStatic – określa czy dana cecha charakteryzuje instancje klasyfikatora (false – wartość domyślna), czy sam klasyfikator (true) StructuralFeature::isReadOnly – określa czy wartość cechy może być modyfikowana przez klienta false (domyślna) – może być modyfikowana true – nie może być modyfikowana Parameter::defaultValue – specyfikacja wartości domyślnej dla parametru Parameter::default staje się atrybutem pochodnym
Cechy statyczne Dana cecha nie może być statyczna w jednym kontekście, a niestatyczna w innym Specyfikacja UML dopuszcza dwojakie rozumienie cech statycznych Cecha statyczna ma tę samą wartość we wszystkich cechowanych klasyfikatorach (jak w C++/Java/C#) Cecha statyczna ma różne wartości w różnych klasyfikatorach, do jakich należy W standardowej notacji cechy statyczne są podkreślone
Pakiet Kernel – diagram operacji
Pakiet Kernel – diagram klas
Pakiet Kernel – diagram klas – dodatkowe atrybuty i powiązania Class::nestedClassifier – wskazuje na wszystkie klasyfikatory zdefiniowane wewnątrz klasy (zagnieżdżone) Property::defaultValue – specyfikacja wartości domyślnej właściwości Property::default jest atrybutem pochodnym Property::aggregation – określa rodzaj agregacji stosowany do danej właściwości AggregationKind::none – brak agregacji (domyślne) AggregationKind::shared – agregacja współdzielona AggregationKind::composite – agregacja całkowita (kompozycja) Property::isComposite jest atrybutem pochodnym
Notacja powiązań – dodatkowe elementy Jawna notacja własności, nawigowalności i rodzaju agregacji Górny diagram: agregacja współdzielona, oba końce należą do klasyfikatorów, koniec b jawnie nienawigowalny. Dolny diagram: agregacja całkowita, oba końce należą do klasyfikatorów, koniec b jawnie nawigowalny. Zamiast {ordered,nonunique} można pisać {sequence} albo {seq}
Pakiet Kernel – diagram typów danych
Pakiet Kernel – diagram pakietów
Standardowe stereotypy klasyfikatorów <<realization>> – klasyfikator (np. komponent) określający pewną dziedzinę obiektów, definiujący zarazem ich fizyczną implementację <<specification>> – klasyfikator określający pewną dziedzinę obiektów bez definiowania ich fizycznej implementacji Np. komponent zawierający tylko zapewniane interfejsy
Standardowe stereotypy klas <<auxiliary>> – pomocnicza klasa wspierająca inną bardziej fundamentalną, np. przez określenie drugorzędnej logiki albo przepływu sterowania Klasa wspierana może być określona jawnie jako klasa ogniskująca, albo niejawnie przy pomocy zależności <<focus>> – klasa ogniskująca, czyli określająca fundamentalną logikę lub przepływ sterowania dla jednej lub więcej pomocniczych klas wspierających
Standardowe stereotypy klas (c.d.) <<implementationClass>> – implementacja klasy w języku programowania, w którym instancja nie może mieć więcej niż jednej klasy (C++, Java) <<metaclass>> – klasa, której instancjami są klasy <<type>> – klasa opisująca pewną dziedzinę obiektów łącznie z operacjami na tych obiektach bez definiowania ich fizycznej implementacji <<utility>> – klasa bez instancji, opisująca zbiór atrybutów i operacji o zasięgu klasowym Instancja klasy (Class) w UML może mieć dowolnie wiele klas, może też je zmieniać dynamicznie. Obiekt może mieć co najwyżej jedną klasę implementacyjną, chociaż może być zgodny z wieloma typami.
Standardowe stereotypy pakietów <<framework>> – pakiet zawierający elementy modeli definiujące wielokrotnie używalną architekturę części lub całości systemu Typowo zawiera klasy, wzorce lub szablony <<modelLibrary>> – pakiet zawierający elementy modeli przeznaczone do wykorzystania w innych pakietach Często używane w połączeniu z profilami Profil zależy od biblioteki albo ją zawiera Biblioteka nie definiuje stereotypów ani wartości etykietowanych
Standardowe stereotypy cech czynnościowych <<create>> – oznacza, że dana cecha czynnościowa tworzy instancje klasyfikatora, do którego jest dołączona <<destroy>> – oznacza, że dana cecha czynnościowa usuwa instancje klasyfikatora, do którego jest dołączona
Pakiet UML::Classes::Dependencies
Metaklasa Dependency Zależność jest związkiem mówiącym, że element lub zbiór elementów modelu (client) wymaga innych elementów (supplier) do swojej specyfikacji lub implementacji Modyfikacja dostawcy (supplier) może mieć wpływ na elementy klienckie (client) Związek zależności nie ma żadnych implikacji w semantyce czasu wykonania modelu
Notacja zależności
Metaklasa Usage Użycie jest związkiem, w którym element wymaga innego elementu (lub zbioru elementów) do pełnej implementacji lub działania
Standardowe stereotypy związku użycia <<call>> – związek pomiędzy operacjami (również klasami) – wywołanie <<create>> – klasyfikator-klient tworzy instancje klasyfikatora-dostawcy <<instantiate>> – operacje klasyfikatora-klienta tworzą instancje klasyfikatora-dostawcy <<responsibility>> – kontrakt lub zobowiązanie jednego elementu wobec innego <<send>> – operacja-klient wysyła sygnał-dostawcę
Metaklasa Abstraction Abstrakcja jest związkiem łączącym dwa elementy (lub zbiory elementów) reprezentujące to samo pojęcie na różnych poziomach abstrakcji albo ukazane z różnych punktów widzenia W metamodelu istnieje odwzorowanie między dostawcą a klientem Formalne lub nieformalne Jedno- lub dwukierunkowe Notacja: symbol zależności ze słowem kluczowym <<abstraction>> (lub innym określonym przez stereotyp)
Standardowe stereotypy związku abstrakcji <<derive>> – klient może być wyliczony na podstawie dostawcy; odwzorowanie określa sposób wyliczenia <<refine>> – związek rozwinięcia (uszczegółowienia) łączący elementy modelu na różnych poziomach semantycznych (np. analiza i projektowanie); odwzorowanie określa szczegóły związku <<trace>> – związek śledzenia między elementami reprezentującymi to samo pojęcie w różnych modelach; używany głównie do śledzenia wymagań i zmian pomiędzy modelami Związek śledzenia bywa często dwukierunkowy
Metaklasa Realization Realizacja jest specjalizowanym związkiem abstrakcji pomiędzy specyfikacją (dostawca) a jej implementacją (klient)
Metaklasa Substitution Podstawienie jest związkiem między dwoma klasyfikatorami mówiącym, że substitutingClassifier wypełnia kontrakt określony przez klasyfikator contract Tym samym instancje substitutingClassifier mogą być w czasie wykonania podstawione w miejsce instancji klasyfikatora contract Nie jest to specjalizacja Nie implikuje dziedziczenia cech Może określać specjalne reguły podstawiania (np. implementacja tych samych interfejsów, zgodność portów, itp.)
Notacja podstawienia
Pakiet UML::Classes::Interfaces
Metaklasa Interface Interfejs – rodzaj klasyfikatora reprezentujący deklarację spójnego zbioru publicznych cech i zobowiązań Określa kontrakt, który musi być wypełniony przez każdą instancję klasyfikatora realizującego dany interfejs Zobowiązania nakładane przez kontrakt mogą być określone w postaci Ograniczeń (np. warunków wstępnych i końcowych) Specyfikacji protokołu (np. określenia dopuszczalnej kolejności wywołania operacji) Atrybuty i powiązania interfejsów są także jedynie zobowiązaniami (są abstrakcyjne)
Metaklasa Interface – ograniczenie self.feature->forAll(visibility = VisibilityKind::public)
Metaklasy Interface i InterfaceRealization Interfejs – jako deklaracja – nie ma własnych instancji Jest realizowany (implementowany) przez instancjonowalny klasyfikator Realizacja interfejsu oznacza, że klasyfikator dostarcza cech określonych przez interfejs i wszystkie interfejsy bazowe Interfejsy realizowane przez klasyfikator to jego interfejsy zapewniane Klasyfikator może też określić zbiór interfejsów wymaganych
Interfejsy – notacja
Interfejsy – przykład definicji protokołu
Pakiet UML::Classes::AssociationClasses
Kwalifikatory powiązań – metaklasa AssociationClasses::Property Właściwość, która jest końcem powiązania może mieć właściwości, które służą jako jej kwalifikatory Kwalifikator określa podział zbioru powiązanych instancji względem instancji na kwalifikowanym końcu Przy danym kwalifikowanym obiekcie i danej instancji kwalifikatora liczba obiektów na drugim końcu powiązania jest ograniczona przez deklarowaną krotność Jeśli dolne ograniczenie jest dodatnie (zwykle 1), to dla każdej instancji kwalifikatora musi być określony powiązany obiekt „Surowa” krotność powiązania kwalifikowanego wynosi (praktycznie zawsze) 0..*
Notacja powiązań kwalifikowanych
Klasy powiązań – metaklasa AssociationClasses::AssociationClass Element modelu o cechach zarówno klasy, jak i powiązania Deklaracja związku semantycznego między klasyfikatorami, który ma własne cechy (atrybuty, operacje) Dla konkretnej instancji klasy powiązania jest tylko po jednej instancji klasyfikatorów na jego końcach
Notacja klas powiązań
Pakiet UML::Classes::PowerTypes
Zbiór uogólnień – metaklasa PowerTypes::GeneralizationSet Definiuje szczególny zbiór instancji związków uogólnienia opisujący sposób, w jaki ogólny klasyfikator może być podzielony (na podzbiory) przy użyciu specyficznych podtypów Atrybut isCovering mówi czy dany podział stanowi pokrycie ogólnego klasyfikatora true (oznaczane jako {complete}) – tak false ({incomplete}) – nie, tzn. istnieją instancje klasyfikatora ogólnego nie będące instancjami żadnego klasyfikatora specyficznego z danego zbioru uogólnień
Zbiór uogólnień (c.d.) Atrybut isDisjoint mówi o tym, czy klasyfikatory specyficzne mają wspólne instancje true oznacza się {disjoint} false oznacza się {overlapping} Wartości domyślne to {incomplete, disjoint} Przyjmuje się następujące ograniczenie: generalization->collect(general)->asSet()->size() <= 1
Notacja zbiorów uogólnień
Notacja atrybutów zbioru ogólnień
Typy potęgowe Typ potęgowy to klasyfikator (na ogół klasa), którego instancje są podklasami innej klasy Typ potęgowy jest więc w szczególności metaklasą
Typ potęgowy – przykład
Podstawowe diagramy struktury Diagramy klas Diagramy pakietów Diagramy obiektów
Typowa zawartość diagramów klas Węzły Klasa Interfejs Krawędzie Powiązanie Agregacja Kompozycja Uogólnienie Zależność Realizacja (w tym realizacja interfejsu)
Typowa zawartość diagramów pakietów Węzły Pakiet Krawędzie Zależność Import pakietowy Scalenie pakietów
Typowa zawartość diagramów obiektów Węzły Specyfikacja instancji (klasy) Krawędzie Wiązanie (specyfikacja instancji powiązania)