background image

1

1

UML - Diagramy klas

UML - Diagramy klas

wprowadzenie

wprowadzenie

background image

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

background image

3

3

                             

                             

Klasy w 

Klasy w 

UML

UML

background image

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)

background image

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

background image

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.

background image

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

background image

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) 

background image

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

 

 

background image

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

background image

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++

background image

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.

background image

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 

background image

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

background image

15

15

Przykłady specyfikacji klas

background image

 

 

 

 

 Notacja na oznaczenie instancji klasy

background image

17

17

                                    

                                    

Atrybuty klasy

Atrybuty klasy

background image

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

background image

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

background image

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++

background image

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

background image

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.

background image

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

background image

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++).

background image

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

}]

background image

26

26

Operacje klasy

Operacje klasy

background image

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.

background image

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.

background image

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)

background image

30

30

Widoczność atrybutów i 

Widoczność atrybutów i 

operacji

operacji

background image

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

background image

32

32

        

        

Zasięg atrybutów i 

Zasięg atrybutów i 

operacji

operacji

background image

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 

background image

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

background image

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;

background image

 

 

 

 

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

 

 

background image

37

37

                                   

                                   

Dziedziczenie

Dziedziczenie

background image

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ę.

background image

39

39

Dziedziczenie

background image

40

40

Dodatkowe elementy specyfikacji dziedziczenia

Overlapping 
-  pola 
(pamięci) 
pokrywając
e się.

Disjoint – 
rozłączny, 
nie 
posiadający 
części 
wspólnej.

background image

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ść

background image

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

{

};

background image

43

43

Dziedziczenie

root (korzeń)

 – 

klasa bez przodków z 

conajmniej  jednym potomkiem. 

(leaf) liść

 – 

klasa bez potomków. 

background image

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

{

};

background image

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).

background image

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;

}

background image

47

47

Klasy abstrakcyjne w 

Klasy abstrakcyjne w 

UML

UML

background image

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.

background image

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;

}

background image

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

()

background image

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

background image

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


Document Outline