1
1
UML - Diagramy klas
UML - Diagramy klas
wprowadzenie
wprowadzenie
2
2
Plan wykładu
Plan wykładu
Klasy w UML
Klasy w UML
Atrybuty klasy
Atrybuty klasy
Operacje klasy
Operacje klasy
Widoczność atrybutów i operacji
Widoczność atrybutów i operacji
Zasięg atrybutów i operacji
Zasięg atrybutów i operacji
Dziedziczenie
Dziedziczenie
Klasy abstrakcyjne w UML
Klasy abstrakcyjne w UML
3
3
Klasy w
Klasy w
UML
UML
4
4
Klasyfikacja diagramów UML 2.0
Klasyfikacja diagramów UML 2.0
1. Diagramy struktury
1. Diagramy struktury
Diagram klas (class diagram)
Diagram klas (class diagram)
Diagram komponentów (component diagram)
Diagram komponentów (component diagram)
Diagram struktur złożonych, diagram składowych, (composite
Diagram struktur złożonych, diagram składowych, (composite
structure
structure
diagram)
diagram)
Diagram wdrożenia (deployment diagram)
Diagram wdrożenia (deployment diagram)
Diagram obiektów (object diagram)
Diagram obiektów (object diagram)
Diagram pakietów (package diagram)
Diagram pakietów (package diagram)
2. Diagramy zachowania
2. Diagramy zachowania
Diagram czynności (activity diagram)
Diagram czynności (activity diagram)
Diagram przypadków użycia (use case diagram)
Diagram przypadków użycia (use case diagram)
Diagram maszyny stanów (state machine diagram)
Diagram maszyny stanów (state machine diagram)
Diagram interakcji
Diagram interakcji
- Diagram sekwencji (sequence diagram
- Diagram sekwencji (sequence diagram
- Diagram komunikacji (communication diagram)
- Diagram komunikacji (communication diagram)
- Diagram przeglądu interakcji; diagram opisu interakcji
- Diagram przeglądu interakcji; diagram opisu interakcji
(interaction overview diagram)
(interaction overview diagram)
- Diagram czasowy,diagram następstwa (timing diagram)
- Diagram czasowy,diagram następstwa (timing diagram)
5
5
Określenie klasy
Określenie klasy
Klasa definiuje
Klasa definiuje
wzorzec
wzorzec
według,
według,
którego tworzone są obiekty.
którego tworzone są obiekty.
Obiekty mają reprezentować
Obiekty mają reprezentować
koncepcje w programie, a nie
koncepcje w programie, a nie
program
program
6
6
Co to jest diagram klas?
Co to jest diagram klas?
Diagram to
Diagram to
graficzne przedstawienie
graficzne przedstawienie
statycznych, deklaratywnych
statycznych, deklaratywnych
elementów dziedziny przedmiotowej
elementów dziedziny przedmiotowej
oraz
oraz
związków
związków
między nimi.
między nimi.
7
7
Klasa
Klasa
Opis zbióru obiektów, które
Opis zbióru obiektów, które
mają takie same
mają takie same
•
Atrybuty
Atrybuty
– opisują stan
– opisują stan
Najczęściej typy proste lub biblioteczne
Najczęściej typy proste lub biblioteczne
Nie posiadają własnych reguł biznesowych
Nie posiadają własnych reguł biznesowych
Ich wartości są istotne dla obiektów klasy
Ich wartości są istotne dla obiektów klasy
•
Operacje
Operacje
– opisują zachowanie
– opisują zachowanie
Usługi oferowane przez każdy obiekt klasy
Usługi oferowane przez każdy obiekt klasy
Zwykle powodują zmianę stanu obiektu
Zwykle powodują zmianę stanu obiektu
Dzielą się na zapytania i polecenia
Dzielą się na zapytania i polecenia
•
Związki
Związki
– uogólnienia, realizacje, zależności, asocjacje,
– uogólnienia, realizacje, zależności, asocjacje,
…
…
Zachowanie klasy często zależy od zachowania innej
Zachowanie klasy często zależy od zachowania innej
klasy
klasy
•
Znaczenie
Znaczenie
8
8
Zadania diagramu klas
Zadania diagramu klas
Modelowanie słownictwa systemu
Modelowanie słownictwa systemu
(podejmowanie decyzji, której
(podejmowanie decyzji, której
abstrakcje są częścią rozważanego
abstrakcje są częścią rozważanego
systemu i określenie ich zobowiązań)
systemu i określenie ich zobowiązań)
Modelowanie prostych koopercji
Modelowanie prostych koopercji
(określenie zbioru kooperujących klas i
(określenie zbioru kooperujących klas i
związków między nimi; realizują one
związków między nimi; realizują one
wspólnie zadania które są niemożliwe
wspólnie zadania które są niemożliwe
do wykonania w pojedynkę; pokazanie
do wykonania w pojedynkę; pokazanie
różnorakich sposobów współpracy
różnorakich sposobów współpracy
elementów ze słownika)
elementów ze słownika)
9
9
Diagram klas
Diagram klas
Diagram klas wyróżnia się spośród
Diagram klas wyróżnia się spośród
diagramów
diagramów
specyfiką
specyfiką
swojej
swojej
zawartości
zawartości
.
.
Zawiera na ogół następujące
Zawiera na ogół następujące
schematy:
schematy:
klasy
klasy
interfejsy
interfejsy
kooperacje
kooperacje
zależności, uogólnienia i powiązania
zależności, uogólnienia i powiązania
10
10
Opis Klasy w UML
Klasy definiuje się w diagramach klas.
Nazwa klasy –
unikatowa w obrębie danego pakietu.
(sekcja nazwy klasy)
Atrybuty
–
właściwości klasy.
(sekcja atrybutów)
Operacje –
usługi,
których wykonania
można zażądać od
każdego obiektu klasy.
(sekcja operacji)
Okno
położenie: int
rozmiar: int
otwórz() : void
zamknij() : void
Osoba
Imie: String
Nazwisko: String
Napis
pStr: vector
len: int
<<create>>() : void
<<destroy>>() : void
11
11
Klasy w UML i w C++
Atrybut
y
Operacje
Punkt
- x: int
- y: int
+ przesun(xx: int, yy: int) :
void
+ ustaw(aa: int, bb: int) :
void
Nazwa klasy pisana dużą
literą
Argume
nty
Deklaracje
metod
{class Punkt
private:
int x;
int y;
public:
void przesun(int xx, int
yy);
void ustaw(int aa, int
bb);
};
Nazwa
klasy
UML
C++
12
12
Nazwa klasy
Nazwa prosta
Klient
Okno
MojModel::Okno::Komun
ikat
Nazwa ścieżkowa
Klient
Błąd
MojModel::Figura
MojModel
Okno
Komunika
t
MojModel::Okno
Figura
Błąd
Nazwa
jest napisem.Wyróżnia klasę spośród innych klas.
13
13
W klasach należy
:
precyzyjne wyspecyfikować atrybuty i
metody
podać typy atrybutów,
nazwy i typy parametrów operacji,
typy wyniku zwracanego przez operację
oraz reguły hermetyzacji
14
14
Poziomy tworzenia klas:
Poziomy tworzenia klas:
Poziom konceptualny
Poziom konceptualny
- zawiera
- zawiera
wyłącznie podstawowe elementy
wyłącznie podstawowe elementy
cechujące się
cechujące się
przystępnością nazw
przystępnością nazw
klas, atrybutów i operacji
klas, atrybutów i operacji
Poziom implementacyjny
Poziom implementacyjny
- jest
- jest
stopniowo wzbogacany o
stopniowo wzbogacany o
typy,
typy,
widoczność, statyczność, klasy
widoczność, statyczność, klasy
asocjacyjne, kwalifikacje, uogólnienia,
asocjacyjne, kwalifikacje, uogólnienia,
zależności czy też realizacje
zależności czy też realizacje
15
15
Przykłady specyfikacji klas
Notacja na oznaczenie instancji klasy
17
17
Atrybuty klasy
Atrybuty klasy
18
18
Atrybuty i operacje
Nazwa atrybutu
Atrybut jest nazwaną właściwością klasy. Określa zbiór wartości
jakie można przypisać do poszczególnych egzemplarzy tej klasy.
Punkt
- x: int
- y: int
+ przesun(xx: int, yy: int) :
void
+ ustaw(aa: int, bb: int) :
void
Typ
Widoczność:
- private
# protected
+ public
Operacja jest implementacją usługi,
której wykonania moża zażądać od
każdego obiektu klasy.
Typ wyniku
Nazwa operacji
Parametry operacji
19
19
Atrybuty klasy
[widoczność] nazwa [liczebność] [:typ]
[=wartość_początkowa][{określenie właściwości}]
Ogólna defnicja atrybutu:
położenie
+ położenie
położenie: Punkt
Oznaczenie: []-
opcjonalnie
20
20
Widoczność atrybutów i
Widoczność atrybutów i
operacji
operacji
Public
Public
- nieograniczony dostęp do
- nieograniczony dostęp do
takiego składnika, oznaczane "
takiego składnika, oznaczane "
+
+
"
"
Protected
Protected
- tylko potomkowie mają
- tylko potomkowie mają
dostęp do takiego składnika,
dostęp do takiego składnika,
oznaczane "
oznaczane "
#
#
"
"
Private
Private
- dostęp ograniczny tylko do
- dostęp ograniczny tylko do
operacji składowych, oznaczane "
operacji składowych, oznaczane "
-
-
"
"
Zasięg klasyfikatorowy odpowiada
statycznym atrybutom i metodom
zdefiniowanym w języku C++
21
21
Punkt
- x: int
- y: int
+ przesun(xx: int, yy: int) :
void
+ ustaw(aa: int, bb: int) :
void
class Punkt
{
private:
int x;
int y;
public:
void przesun(int xx,
int yy);
void ustaw(int aa, int
bb);
};
.....
Punkt p1;
int k;
p1.x =14;
k = p1.y;
UML
C++
[
widoczność
] nazwa [liczebność] [:typ]
[=wartość_początkowa][{określenie właściwości}]
Widoczność atrybutów
Widoczność atrybutów
22
22
Atrybuty klasy
[widoczność] nazwa [
liczebność
] [:typ]
[
=wartość_początkowa
][{określenie właściwości}]
liczebność
– Liczba określająca liczbę
egzemplarzy atrybutu.
wartość początkowa
– Wartość nadawana
atrybutowi w momencie utworzenia obiektu.
23
23
Atrybuty klasy
[widoczność] nazwa [
liczebność
] [:typ]
[
=wartość_początkowa
][{określenie właściwości}]
Lista[0..*] : Osoba
portKonsoli[2..*] : Port
pulpitSterujacy[1] : Pulpit
pojemność[0..5]: Jednostka
nazwisko : String = (“”)
ilość : long = (0)
tablicaInt[2]: Int = (2,4)
w UML
24
24
Atrybuty klasy
[widoczność] nazwa [liczebność] [:typ]
[=wartość_początkowa][{
określenie właściwości
}]
changeable
– Nie ma ograniczeń co do modyfikacji
wartości atrybutu.
addOnly
– W wypadku atrybutów o liczebności
większej niż jeden można dodawać nowe wartości,
ale raz dodana wartość nie może być usunięta
lub zmieniona.
frozen
– Wartość atrybutu nie może być zmieniona
po zainicjowaniu obiektu (= const w języku C/C++).
25
25
class Tablica
{
private:
int wektor[20];
const long id;
public:
Tablica():id(2213L)
{}
};
.....
Tablica tab;
Atrybuty – określenie właściwości
Tablica
- wektor[0..19]: int
{addOnly}
- Id: long = 2213 {frozen}
UML
C++
W języku C++ nie ma odpowiednika określenia właściwości addOnly
[widoczność] nazwa [liczebność] [:typ]
[=wartość_początkowa][{
określenie właściwości
}]
26
26
Operacje klasy
Operacje klasy
27
27
Punkt
- x: int
- y: int
+ przesun(xx: int, yy: int) :
void
+ ustaw(aa: int, bb: int) :
void
class Punkt
{
private:
int x;
int y;
public:
void przesun(int xx, int
yy);
void ustaw(int aa, int
bb);
};
.....
Punkt p1;
int k = -5;
p1.przesun(12,4);
p1.ustaw(k,26);
UML
C++
Widoczność operacji
Widoczność operacji
Widoczność operacji
definiowana jest tak
samo jak widoczność
atrybutów.
28
28
Parametry operacji klasy -
tryb
[widoczność] nazwa [(
lista-parametrów
)]
[:typ_wyniku] [{określenie właściwości}]
in
– Parametr wejściowy; nie może być modyfikowany.
out
– Parametr wyjściowy; może być modyfikowany
w celu przekazania informacji wywołującemu.
inout
– Parametr wejściowy; może być modyfikowany.
return
– Parametr zwracany przez operacje.
29
29
Parametry operacji klasy
[widoczność] nazwa [(
lista-parametrów
)]
[:typ_wyniku] [{określenie właściwości}]
W sygnaturze operacji może być dowolna liczba parametrów
(odzielane są one wówczas przecinkiem), a może nie być
ich wcale.
Deklaracja każdego z parametrów ma postać:
[tryb] nazwa : typ [= wartość_domyślna]
default(n: Nazwa = ”no name”, s: String,
i int = 5)
next(out n: int, in p: parameter)
30
30
Widoczność atrybutów i
Widoczność atrybutów i
operacji
operacji
31
31
Widoczność atrybutów i operacji w
Widoczność atrybutów i operacji w
UML i w C++
UML i w C++
Punkt2D
# x: int
# y: int
+ wyswietl() : void
class Punkt2D
{
protected:
int x;
int y;
public:
void wyswietl()
{cout << x << ' ' << y; }
};
class Punkt3D: public Punkt2D
{
protected:
int z;
public:
void wyswietl()
{cout << x << ' ' << y << ' ' <<
z; }
};
.....
Punkt2D p2D;
p2D.x=5;
p2D.y=0;
UML
C++
Punkt3D
# z: int
+ wyswietl() : void
32
32
Zasięg atrybutów i
Zasięg atrybutów i
operacji
operacji
33
33
Zasięg atrybutów i operacji
Zasięg atrybutów i operacji
Instance
Instance
- każdy egzemplarz
- każdy egzemplarz
przechowuje oddzielną wartość tego
przechowuje oddzielną wartość tego
składnika, zasięg domyślny
składnika, zasięg domyślny
Classifier
Classifier
- jest tylko jedna wartość
- jest tylko jedna wartość
tego składnika wspólna dla
tego składnika wspólna dla
wszystkich egzemplarzy, oznaczane
wszystkich egzemplarzy, oznaczane
przez podkreślenie nazwy
przez podkreślenie nazwy
Liczebność
Liczebność
- służy do ograniczenia
- służy do ograniczenia
liczby egzemplarzy konkretnej klasy
liczby egzemplarzy konkretnej klasy
lub atrybutów
lub atrybutów
34
34
Wielokrotności
Wielokrotności
0..1
0..1
Brak instancji lub jedna instancja.
Brak instancji lub jedna instancja.
Notacja
Notacja
n . . m
n . . m
oznacza od n do m
oznacza od n do m
instancji.
instancji.
0..*
0..*
lub
lub
*
*
Bez ograniczenia liczby
Bez ograniczenia liczby
instancji (łącznie z brakiem instancji).
instancji (łącznie z brakiem instancji).
1
1
Dokładnie jedna instancja
Dokładnie jedna instancja
1..*
1..*
Przynajmniej jedna instancja
Przynajmniej jedna instancja
35
35
Wielokrotności
Wielokrotności
GrupaUżytkowni
ków
Hasło
*
*
Użytkowni
k
1
*
Punkt końcowy ma krotność (określa ile obiektów
może brać udział w danym związku).
Przykładowa liczebność: 1, 0..1, 0..n, 1..n, 5;
Liczebność
Liczebność - służy do ograniczenia liczby
Liczebność - służy do ograniczenia liczby
egzemplarzy konkretnej klasy lub atrybutów
egzemplarzy konkretnej klasy lub atrybutów
37
37
Dziedziczenie
Dziedziczenie
38
38
Dziedziczenie
uogólnienie
–
związek między
elementem ogólnym (przodkiem) a
pewnym specyficznym jego rodzajem
(potomkiem).
Uogólnienie polega na tym, że potomek
może wystąpić wszędzie tam, gdzie jest
spodziewany jego przodek a nie na
odwrót.
Potomek dziedziczy wszystkie
właściwości przodka, w szczególności
atrybuty i operacje.
Uogólnienie może posiadać nazwę.
39
39
Dziedziczenie
40
40
Dodatkowe elementy specyfikacji dziedziczenia
Overlapping
- pola
(pamięci)
pokrywając
e się.
Disjoint –
rozłączny,
nie
posiadający
części
wspólnej.
41
41
Dziedziczenie
Wydarzenie
{root}
WypadekDrogo
wy
Pożar
Powódź
{leaf}
KotNaDrze
wie
{leaf}
Katastrofa
TrzęsienieZie
mi
Wypadek
Prozaiczne
uogólnienie
przodek
(nadklasa)
potomek
(podklasa)
korzeń
liść
42
42
Dziedziczenie C++
Wydarze
nie
WypadekDro
gowy
Pożar
Powód
ź
KotNaDrze
wie
Katastrof
a
Trzęsienie
Ziemi
Wypadek
Prozaiczn
e
class Wydarzenie
{
};
class Prozaiczne : public
Wydarzenie
{
};
class KotNaDrzewie : public
Prozaiczne
{
};
class Wydarzenie
{
};
class Wypadek : public Wydarzenie
{
};
class WypadekDrogowy : public
Wypadek
{
};
class Pożar : public Wypadek
{
};
43
43
Dziedziczenie
root (korzeń)
–
klasa bez przodków z
conajmniej jednym potomkiem.
(leaf) liść
–
klasa bez potomków.
44
44
Wielodziedziczenie
GłównySterownikProgram
u
Sterowni
k
ProgramWbudow
any
wielodziedziczenie – (dziedziczenie
wielobazowe) klasa ma wiele przodków.
class Sterownik
{
};
class ProgramWbudowany
{
};
class GłównySterownikProgramu:
public Sterownik, public
ProgramWbudowany
{
};
45
45
Polimorfizm
Polimorfizm- dosłownie „
wiele
kształtów
”.
W technologii obiektowej nazywamy
tak możliwość wystosowania ogólnego
żądania (komunikatu) i
uzyskania
różnych efektów, w zależności od
rodzaju obiektu,
który realizuje żądanie.
Polimorfizm
–
Operacja potomka mająca tę
samą sygnaturę co operacja przodka jest
ważniejsza (ma pierszeństwo).
46
46
Dziedziczenie, polimorfizm
// Dziedziczenie
class
Wydarzenie
{
};
class Wypadek : public
Wydarzenie
{
};
void funkcja(Wydarzenie
*pW);
int main(void)
{
Wypadek wyp;
funkcja(&wyp);
return 0;
}
// Polimorfizm
class Wydarzenie
{ public:
void
wyswietl
(){ cout << "operacja
wydarzenia"; }
};
class Wypadek : public Wydarzenie
{ public:
void
wyswietl
(){ cout << "operacja
wypadku"; }
};
int main(void)
{
Wypadek wyp;
wyp.
wyswietl
();
return 0;
}
47
47
Klasy abstrakcyjne w
Klasy abstrakcyjne w
UML
UML
48
48
Abstrakcyjność w UML
Abstrakcyjność klas
– klasy, które
nie mogą
mieć bezpośrednich egzemplarzy
są
klasami abstrakcyjnymi. Klasy abstrakcyjne
oznaczane są nazwami pisanymi kursywą.
Abstrakcyjność operacji
– operacja nie
posiadająca implementacji.
Jej
implementację muszą zapewnić
potomkowie
. Operacje abstrakcyjne
oznaczane są nazwami pisanymi kursywą.
Operacje abstrakcyjne odpowiadają
czystym
funkcjom wirtualnym w C++
Operacja liść
– operacja
nie jest
polimorficzna
. Nie może być zastąpiona w
potomkach. Operacje liście oznaczane są
napisem
leaf
umieszczonym w jej metce.
49
49
Funkcje wirtualne C++
class Wydarzenie
{
public:
void
virtual wyswietl
(){ cout << "operacja
wydarzenia"; }
};
class Wypadek : public Wydarzenie
{
public:
void
wyswietl
(){ cout << "operacja wypadku"; }
};
class Katastrofa : public Wydarzenie
{
public:
void
wyswietl
(){ cout << "operacja katastrofy"; }
};
int main(void)
{
Wypadek wyp;
Katastrofa kat;
Wydarzenie *pWyd = &kat;
Wydarzenie &refWyd = wyp;
pWyd->
wyswietl
();
refWyd.
wyswietl
();
return 0;
}
50
50
Abstrakcyjność w UML i C++
class Ikona
{ public:
Punkt polozenie;
void
virtual wyświetl
()=0;
};
class IkonaProstokatna : public Ikona
{ public:
int wysokosc, szerokosc;
};
class Przycisk : public IkonaProstokatna
{ public:
void
wyświetl
(){cout<< “ikona
prostokatna” ;}
};
Ikona
{root}
położenie: Punkt
wyświetl
()
pobierzID(): integer
{leaf}
IkonaProstokątna
wysokość : integer
szerokość : integer
Przycisk
wyświetl
()
51
51
Abstrakcyjność
Ikona
{root}
położenie: Punkt
IkonaDowolna
Brzeg: ZestawOdcinków
wyświetl()
pobierzID(): integer
{leaf}
leżyWewn(p : Punkt) :
Boolean
IkonaProstokątna
wysokość : integer
szerokość : integer
Przycisk
wyświetl()
PrzyciskOK {leaf}
wyświetl()
klasa konkretna
klasa liść
operacja polimorficzna
klasa abstrakcyjna
operacja abstrakcyjna
operacja konkretna
klasa abstrakcyjna
52
52
Podsumowanie
Podsumowanie
Klasy w UML
Klasy w UML
Atrybuty klasy
Atrybuty klasy
Operacje klasy
Operacje klasy
Widoczność atrybutów i operacji
Widoczność atrybutów i operacji
Zasięg atrybutów i operacji
Zasięg atrybutów i operacji
Dziedziczenie
Dziedziczenie
Klasy abstrakcyjne w UML
Klasy abstrakcyjne w UML