Diagramy klas w języku
UML
Czym jest UML?
Zunifikowany język modelowania, w skrócie UML (ang. Unified
Modelling Language) jest to rodzina notacji graficznych, oparta na
pojedynczym metamodelu, która służy do opisywania i
projektowania systemów oprogramowania, w szczególności
systemów oprogramowania obiektowego.
Języki modelowania graficznego istnieją w informatyce od dawna.
Jest to spowodowane tym, że języki programowania nie są na
wystarczająco wysokim poziomie abstrakcji, aby umożliwiać
prowadzenie za ich pomocą dyskusji na temat projektów.
UML jest względnie otwartym standardem nadzorowanym przez
organizację OMG (ang. Object Management Group) i otwarte
konsorcjum firm. OMG została utworzona w celu budowania
standardów umożliwiających współdziałanie systemów obiektowych.
Znana jest między innymi z przygotowania standardów CORBA.
Rodzaje diagramów
Diagramy struktury:
• Klas
• Obiektów
• Pakietów
• Struktur
połączonych
• Wdrożeniowe:
– Komponentów
– Rozlokowania
Diagramy dynamiki:
• Przypadków użycia
• Czynności
• Maszyny stanowej
• Interakcji:
– Sekwencji
– Komunikacji
– Harmonogramowania
(lub Zależności
czasowych)
– Sterowania interakcją
Diagramy klas
Diagramy klas, obok diagramów przypadków użycia,
zaliczyć należy do najczęściej stosowanych i zarazem
kluczowych rodzajów diagramów w języku UML. Są one
ponadto powszechnie rozpoznawanym elementem
najpopularniejszych metodyk i technik obiektowych.
Przedstawiają statykę systemu, stanowiąc przede
wszystkim podstawę przyszłej obiektowej bazy danych.
Główne elementy diagramów klas mają znaczny wpływ
na układ i zawartość innych diagramów UML.
Diagram klas to graficzne przedstawienie statycznych,
deklaratywnych elementów dziedziny przedmiotowej
oraz związków między nimi.
Diagramy klas
W diagramach UML klasę standardowo przedstawia się jako
prostokąt złożony z trzech sekcji:
– nazwy klasy
– zestawu atrybutów
– zestawu operacji
Możliwe kombinacje graficznej prezentacji klas:
– sama nazwa klasy
– nazwa klasy z zestawem atrybutów
– nazwa klasy z zestawem operacji
– nazwa klasy z zestawem atrybutów i operacji
Diagramy klas
W związku z różnorodnością możliwych sposobów specyfikowania
klas należy wyróżnić następujące opcje ich prezentacji graficznej:
– sama nazwa klasy umieszczona w jednosekcyjnym bloku
oznacza, że sekcje atrybutów i operacji zostały
wyspecyfikowane, lecz nie są w sposób jawny zamieszczone w
diagramie klas
– alternatywnie, klasę przedstawia się jako blok złożony z
trzech sekcji z nazwą w pierwszej sekcji i
niewyspecyfikowanymi atrybutami i operacjami
– jeśli liczba atrybutów lub operacji jest większa, to ich
wyliczanie w odpowiednich sekcjach można przerwać
wielokropkiem, co należy interpretować jako przypisanie
klasie jeszcze innych atrybutów i operacji – nie wymienionych
bezpośrednio w specyfikacji
Diagramy klas – związki
Klasy obiektów – podobnie jak inne elementy języka
UML – powiązane są różnego rodzaju związkami. W
diagramach klas powszechnie stosuje się wszystkie
cztery rodzaje związków języka UML, czyli:
– asocjacje
– uogólnienia
– zależności
– realizacje
Asocjacja
Asocjacja jest związkiem pomiędzy dwoma lub więcej
klasyfikatorami, opisującym powiązania pomiędzy ich
instancjami.
Asocjacja opisuje zbiór powiązań pomiędzy obiektami, tak
jak klasa obiektu – zbiór obiektów stanowiących jej instancje.
Wyróżnia się dwa rodzaje asocjacji:
– binarne
– n-arne
W praktyce dominują asocjacje binarne.
Asocjacja
Zilustrowane na poprzednim rysunku asocjacje opisują w
sposób jedynie elementarny związki między klasami. Pełna
semantyczna interpretacja związku wymaga wprowadzenia
szeregu dodatkowych elementów opisu. Tak więc asocjację
można dokładnie sprecyzować poprzez zdefiniowanie jej
następujących cech:
– nazwy
– ról powiązanych klas
– nawigacji
– liczebności
– agregacji
Nazwy asocjacji
Podając nazwę asocjacji, określa się istotę danego związku.
W celu uniknięcia nieporozumień przy nazwie asocjacji
można podać kierunek jej odczytu. Istnieje szereg
możliwości oznaczania nazw asocjacji. Mogą one być:
– nienazwane
– nazwane, z opcjonalnym zamieszczeniem znacznika
wskazującego kierunek interpretacji asocjacji
– scharakteryzowane poprzez role klas pełnione w
asocjacji
– nazwane i równocześnie scharakteryzowane przez role
Role asocjacji
Każdą asocjację można interpretować dwustronnie
poprzez podanie ról pełnionych przez powiązane ze
sobą klasy. Rola asocjacji w związku binarnym jest
powinnością pełnioną przez jedną klasę obiektu wobec
drugiej klasy. W asocjacji n-arnej role można przypisać
każdej z powiązanych ze sobą klas.
Nazwy ról umieszcza się po obydwu stronach asocjacji.
Rola spełniana przez daną klasę lokowana jest
bezpośrednio przy klasie określanej.
Nawigacja
Do wykonywania operacji na obiektach
poszczególnych klas niezbędne jest przesyłanie
komunikatów pomiędzy nimi. Dla każdej asocjacji
istniejącej pomiędzy klasami komunikowanie
domyślnie odbywa się w obydwu kierunkach
asocjacji. Jest to nawigacja dwukierunkowa.
W praktyce występują sytuacje, w których
wskazanie kierunku nawigacji zwiększa
efektywność komunikowania się. Mamy wtedy do
czynienia z nawigacją jednokierunkową.
Liczebność
Klasom odpowiadają określone liczby
obiektów. Liczebność to specyfikacja zakresu
dopuszczalnej liczby obiektów danej klasy
biorących udział w danym związku. A zatem
jest to określenie liczby obiektów jednej klasy,
które wiążą się z jednym obiektem drugiej
klasy znajdującym się po przeciwnej stronie
tej samej asocjacji.
Liczebności
1
1..*
0..1
*
0..*
n
1..n
0..n
n..m
n..*
n, m, o..p, q
dokładnie jeden
jeden lub wiele
zero lub jeden
wiele
zero lub wiele
dokładnie n (n>1)
od 1 do n
od 0 do n
od n do m (n,m>1)
więcej niż n
liczebność złożona
Agregacja
Kolejną cechą asocjacji jest agregacja, która opisuje
związek całość-część pomiędzy klasami. W
rzeczywistości istnieje wiele złożonych obiektów
składających się z części, które w połączeniu stanowią
spójną całość. Wyróżnia się dwa rodzaje agregacji:
– agregację całkowitą (kompozycję)
– agregację częściową
Dla wymienionych pojęć używa się alternatywnych
nazw. Kompozycja nazywana jest również agregacją
silną lub składową, natomiast agregacja częściowa –
agregacją słabą lub współdzieloną.
Agregacja
W obydwu rodzajach agregacji występują dwa podstawowe
pojęcia:
– agregat, czyli obiekt stanowiący całość
– segment, czyli część
W przypadku agregacji całkowitej obiekty-segmenty będące
częściami agregatów nie mogą samodzielnie i niezależnie
funkcjonować. Usunięcie agregatu powoduje automatyczną
likwidację wszystkich segmentów będących jego częściami.
Natomiast agregacja częściowa wskazuje na asocjację, w której
usunięcie obiektu będącego agregatem nie powoduje likwidacji
obiektów będących jego częściami, czyli obiektów-segmentów.
Obiekty współdzielone mogą zatem funkcjonować
samodzielnie, niezależnie od agregatu.
Atrybuty i operacje
statyczne
W języku UML atrybuty oraz
operacje statyczne (będące
właściwością klasy, a nie obiektu)
oznacza się przez podkreślenie
linią ciągłą.
Klasy i operacje
abstrakcyjne
Nazwy klas abstrakcyjnych, nie
mających konkretnych instancji
obiektów oraz operacji
abstrakcyjnych (nie mających
konkretnej implementacji w danej
klasie) pisane są w diagramach
UML kursywą.
Widoczność
Widoczność oznacza poziom
dostępności atrybutów i operacji dla
innych klas. W języku UML stosowane
są następujące poziomy widoczności:
– Publiczny +
– Prywatny –
– Chroniony #
– Pakietowy ~
Typy wartości oraz
wartości początkowe
Dla atrybutów oraz operacji można po dwukropku
określić ich typy wartości (w przypadku operacji
jest to typ wartości zwracanej przez daną
operację).
Dla operacji można również w nawiasach podać
typy wartości argumentów oraz kierunki ich
przekazywania (in, out).
Atrybutom można także nadać wartości
początkowe pisząc je po znaku =
Uogólnienia, dziedziczenie
Za pomocą diagramów UML można
przedstawiać związki dziedziczenia klas.
Klasy na najniższym poziomie hierarchii
nazywane są liśćmi (oznaczenie {leaf}),
natomiast na najwyższym – klasami
podstawowymi albo korzeniami (oznaczenie
{root}).
Oznaczenia {leaf} oraz {root} są opcjonalne.
Zależności
Zależność to taki związek pomiędzy dwoma
elementami modelowania, w którym zmiana
jednego z nich, niezależnego, wpływa na drugi,
zależny.
Związek ten w diagramach klas odgrywa mniejsze
znaczenie. Oznacza on, że niezależna klasa
obiektów wykorzystuje klasę zależną.
Klasa niezależna jest także nazywana docelową,
natomiast zależna źródłową.
Bibliografia
• Stanisław Wrycza, Bartosz Marcinkowski,
Krzysztof Wyrzykowski – „Język UML 2.0 w
modelowaniu systemów informatycznych”
• Martin Fowler – „UML w kropelce”
• Dokumentacja UML opracowana przez OMG
• Wikipedia