background image

Diagramy klas i 
obiektów

GRUPA ZIN I

Modelowanie aplikacji 

w UML 2.0

Mateusz Drzymała
Marcin Opszalski
Mateusz Pisarek

background image

Modelowanie Klas

•   Na etapie zbierania wymagań oraz analizy systemu, przy pomocy 
klas tworzy się słownik pojęć dziedzinowych, które powinny 
odzwierciedlać byty występujące w dziedzinie problemu postrzegania
z punktu widzenia przyszłych jego użytkowników.

•   Precyzja nazewnictwa, na tym etapie, pozwala na precyzyjne opisanie 
dziedziny problemu, zapobiegając późniejszym, fundamentalnym 
zmianom wynikającym z nieporozumień na linii specjalista
dziedzinowy – analityk.

    „Gdy ja używam jakiegoś słowa, oznacza ono dokładnie to, co mu każę
oznaczać… ni mniej, ni więcej.”
                                                                                     Humpty Dumpty

background image

Klas
a

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

zatrudnij
zwolnij
oblicz 
wynagrodzenie

Nazwa

Atrybuty

Cechy

Operacje

Klasa – jest opisem obiektów, posiadających takie same atrybuty, operacje,
              związki oraz semantykę

Klasę oznacza się przy pomocy prostokąta podzielonego na trzy podstawowe
części. W części górnej należy podać nazwę klasy oraz można podać 
dodatkowe informacje, takie jak stereotyp oraz dodatkowe właściwości. 
część środkowa służy do definiowania atrybutów klasy. W części dolnej podaje
się operacje zdefiniowane dla klasy.

background image

Klas
a

Klasa – może zawierać dodatkowe części, zdefiniowane przez osobę 
modelującą. W takim przypadku, każda część symbolu klasy powinna 
być zapoczątkowana nazwą (słowem kluczowym). Typowym przykładem 
dodatkowych części są:

•   lista sygnałów, na które reaguje obiekt,

•   lista odpowiedzi klasy.

background image

Atrybut
y

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

zatrudnij
zwolnij
oblicz 
wynagrodzenie

Określają właściwości pojęcia
Reprezentowanego przez klasę

Wyznaczają zawartość
Informacyjną klasy,
Specyfikują dane
Związane z klasą i jej 
obiektami

background image

Typ i liczność 
atrybutów

Pracownik

imię: string
nazwisko: string
stanowisko: stanowisko
data zatrudnienia: date
umiejętności[1…*]: Umiejętność

zatrudnij
zwolnij
oblicz 
wynagrodzenie

Pełna składnia deklaracji atrybutu:
<widoczność> <nazwa> [<liczność>] ‘:’ <typ> [ ‘=‘ <wartość początkowa> ][<modyfikatory>]

•   <widoczność> -> ‘-’ | ‘#’ | ‘+’ | ‘~’

•   <liczność> -> ‘[‘ <minimalna ilość> ‘..’ <maksymalna ilość> ‘]’

•   <modyfikatory> -> { <modyfikator> (‘,’ modyfikator)*}

•   <modyfikator> -> ‘readOnly’ | ‘union’ | ‘subsets’ <nazwa atrybutu> | ‘redefines’ 
    <nazwa atrybutu> | ‘ordered’ | ‘unique’ | <ograniczenie>

background image

Typ i liczność 
atrybutów

Typ atrybutu określa dopuszczalny rodzaj / zbiór wartości jakie mogą 
przyjmować atrybuty. Typ atrybutu określa się przy pomocy nazwy
umieszczonej po nazwie atrybutu i znaku rozdzielającym ‘:’.

UML – owe typy danych:

•   typy proste (typy prymitywne / predefiniowane : Boolean, Integer, 
     String, UnlimitedNatural, typ wyliczeniowy),

•   typy złożone – klasy.

Liczność atrybutów  - jest określana przez umieszczenie w nawiasach 
kwadratowych dopuszczalnego zakresu możliwej liczby wartości do 
przyjęcia przez atrybut. Jeżeli ta jest równa jeden, wówczas 
wskaźnik liczności jest pomijany.

background image

Widoczność i zakres 
atrybutów

Pracownik

id {private}
zmodyfikowany {protected}
imię {public}
nazwisko {public}
stanowisko {public}
data zatrudnienia {public}
odczytanie z bazy danych {package}

zatrudnij
zwolnij
oblicz 
wynagrodzenie

Pracownik

- id 
# zmodyfikowany
+ imię
+ nazwisko
+ stanowisko
+ data zatrudnienia
~ odczytanie z bazy danych

zatrudnij
zwolnij
oblicz 
wynagrodzenie

Atrybuty określają zawartość informacyjną, jaką klasa niesie w systemie.

background image

Widoczność i zakres 
atrybutów

Przynależność atrybutów:

Atrybuty klasy (class scope attribute) Atrybuty klasy przyjmują swoją 
wartość jeden raz dla całej klasy.

Atrybuty obiektu (instance scope attribute) Atrybuty obiektu przyjmują
swoją wartość dla każdego obiektu z osobna.

Atrybuty klasy są oznaczone przez podkreślenie nazwy jedną linią
(na przykład : domyślny kształt).
Nazwę atrybutu podaje się w normalny sposób (na przykład: imię).

Widoczność atrybutów: 

•   prywatne – oznaczone przez „-” lub słowem kluczowym private,

   chronione – oznaczone przez „#” lub słowem kluczowym protected,

•   publiczne – oznaczone przez „+” lub słowem kluczowym public,

•   pakietowe – oznaczone przez „~” lub słowem kluczowym package.

background image

Modyfikatory 
atrybutów

data zatrudnienia: DateTime {readOnly}
umiejętności[1…*]: Umiejętność {ordered, unique}
obowiązki[1…*]: Umiejętność {subsets umiejętności}
/dni kalendarzowe[1…*]: Date {union}
dni powszednie[1…*]:  Date {subset dni kalendarzowe}
dni weekendowe[1…*]: Date {subset dni kalendarzowe}
święta[1…*]: Date {subset dni kalendarzowe}
/staż pracy: Integer
stanowisko: String = „Projektant”
wynagrodzenie: Real {wynagrodzenie > 0.00}

Znaczenie poszczególnych metek:
{readOnly}: atrybut nie może być modyfikowany,
{unique}: zbiór wartości atrybutu wielowartościowego nie zawiera powtórzeń,
{ordered}: zbiór wartości atrybutu wielowartościowego jest uporządkowany,
{subsets atrybut}: zbiór wartości atrybutu wielowartościowego jest podzbiorem 
zbioru wartości innego atrybutu,
{union}: zbiór wartości atrybutu jest sumą mnogościową zbiorów wartości 
atrybutów, które zadeklarowano jako podzbiory tego atrybutu.

background image

Obiekty

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

zatrudnij
zwolnij
oblicz 
wynagrodzenie

andrzej: Pracownik

Imię = „Andrzej”
Nazwisko = „Wtorkowski”
Stanowisko = „Projektant”
data zatrudnienia = 10/12/2002

krzysztof: Pracownik

Imię = „Krzysztof”
Nazwisko = „Ćwikłowski”
Stanowisko = „Programista”
data zatrudnienia = 15/09/2005

grażyna: Pracownik

Imię = „Grażyna”
Nazwisko = „Wójcik”
Stanowisko = „Analityk”
data zatrudnienia = 01/07/2006

staszek: Pracownik

Imię = „Stanisław”
Nazwisko = „Rybak”
Stanowisko = „Tester”
data zatrudnienia = 10/05/1996

background image

Obiekty

Obiekt można zdefiniować jako element o dobrze zdefiniowanych granicach oraz
tożsamości, która hermetyzuje w sobie określone zachowanie oraz stan. 
Obiekt jest reprezentantem klasy.

Stan, w tym przypadku, należy rozumieć jako kolekcję wartości atrybutów oraz 
powiązań, w jakich obiekt w danym momencie występuje.
W tym miejscu warto także wspomnieć o tożsamości obiektów. Każdy obiekt 
powoływany do życia automatycznie posiada swoją własną tożsamość. 
Oznacza to, iż nie jest konieczne modelowanie cech w klasie, przy pomocy 
których będzie zapewniana unikalność każdego z tworzonych obiektów.

Obiekt przedstawia się na diagramach podobnie jak klasę.
Podanie nazwy obiektu, przed nazwą klasy, umożliwia dokładne wskazanie
konkretnego obiektu (w danym kontekście).
Obiekt znajdujący się w określonym stanie (zbiorze stanów) pokazuje się na 
diagramach przez umieszczenie po nazwie klasy list stanów, w których obiekt 
się znajduje.
<nazwa obiektu> ‘:’ <nazwa klasy> ‘[‘ <lista stanów> ‘]’
Na przykład:
Klient : Osoba [‘Uprzywilejowany’]

background image

Operacj
e

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

zatrudnij
zwolnij
oblicz 
wynagrodzenie

Specyfikuje zbiór procedur,
Które można wywoływać
Na obiektach klasy,
Wyznaczają sposób dostępu
Do danych.

Opisują zachowania bytów
Reprezentowanych przez klasę

background image

Widoczność i zakres 
operacji

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

zatrudnij {public}
zwolnij {public}
oblicz wynagrodzenie {public}
oblicz wartość premii 
{private}
Oblicz płacę podstawową 
{protected}
Znajdź wg nazwiska {public}

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

+zatrudnij
+zwolnij {public}
+oblicz wynagrodzenie 
{public}
-oblicz wartość premii 
{private}
#Oblicz płacę podstawową 
{protected}
+Znajdź wg nazwiska {public}

Operację można zdefiniować jako usługę świadczoną przez klasę na 

rzecz swojego otoczenia

background image

Widoczność i zakres 
operacji

Operacje klasy (class scope operation) mogą być wywoływane dla klasy, a więc 
nie wymagają istnienia żadnego obiektu tej klasy, i nie mogą się odwoływać do 
atrybutów obiektu. Operacje klasy są oznaczane przez podkreślenie nazwy jedną 
linią (np.: utwórz).
   Operacje obiektu (instance scope operation) Operacje obiektu są wywoływane 
dla poszczególnych obiektów należących do danej klasy. Nazwę operacji obiektu 
podaje się bez podkreślenia (na przykład: oblicz wiek). 

Widoczność operacji

•   prywatne – oznaczone przez „-” lub słowo kluczowym private,

   chronione – oznaczone przez „#” lub słowo kluczowym protected,

•   publiczne – oznaczone przez „+” lub słowo kluczowym public,

•   pakietowe – oznaczone przez „~” lub słowo kluczowym package.

Użytkownik może definiować własne rodzaje określeń widoczności operacji. 
Określone w ten sposób typy przedstawiane są w modelu w postaci własności 
(ang. property) na końcu definicji operacji.

background image

Parametry, wartość 
zwracana

+  zatrudnij(od dnia:Date)

-   oblicz wartość premii():Real
+  oblicz wynagrodzenie(na dzien:Date):Real
+  posortuj wg stażu(lista: Pracownik[*]): Pracownik[*]

-   pobierz miesiąc i rok(in data:Date, out miesiąc: Integer, out 
rok:Integer)
+  posortuj wg nazwiska(inout lista:Pracownik[*])
+  wyszukaj binarnie(lista:Pracownik[*] {ordered}, nazwisko: 
String) Pracownik
+ zatrudnij(od dnia:Date = DateTime.Today)

Pełna składnia deklaracji operacji:

< wodoczność <nazwa> [‘(‘<lista parametrów> ‘)’] ‘:’ <typ zwracanej wartości> [<modyfikatory 
operacji>]
 <widoczność> -> ‘-’ | ‘#’ | ‘+’ | ‘~’

•   <liczność> -> ‘[‘ <minimalna ilość> ‘..’ <maksymalna ilość> ‘]’

•   <modyfikatory operacji> -> { <modyfikator operacji> [ (‘,’ modyfikator        
     operacji)]*}

•   <modyfikator operacji> -> ‘redefines’ <nazwa operacji> | query | ordered | unique | 
ograniczenie>

•   <lista parametrów> -> <parametr> [ ‘,’ <parametr> ]*

•   <parametr> -> [<kierunek>] <nazwa>  ‘:’ <typ> [<liczność>] [‘=‘ <wartość domyślna> ] 
[<modyfikatory parametru>]

•   <kierunek> -> ‘in’ | ‘out’ | ‘inout’

•   <modyfikatory parametru> -> {<modyfikator parametru> [ ‘,’ <modyfikator parametru>]*}

•   <modyfikator parametry> ->  ‘ordered’ | ‘unique’ | <ograniczenie>

background image

Parametry, wartość 
zwracana

Pracownik

imię
nazwisko
stanowisko
data zatrudnienia

zatrudnij(od dnia: Date)
zwolnij (z dniem: Date)
oblicz wynagrodzenie (na dzień: 
Date): Real

Wyjątki:

i

RaisedException
Nie można zatrudnić

Wyjątki :
Metamodel UML uwzględnia możliwość specyfikowania wyjątków, zgłaszanych przez
operacje, ale nie ma to odzwierciedlenia w składni operacji. Zaleca się używania do 
tego celu notatek.
U Uml 1.x wyjątki modelowano jako klasy ze stereotypem 

<<

exceptuion

>>

, z punktu

widzenia UML 2.0 wyjątek jest daną dowolnego typu.

background image

Modyfikatory operacji i 
parametrów

Oblicz wynagrodzenie(na dzień: Date): Real {query}
Pobierz dni urlopu(miesiąc: int, rok: int): Date[*]{unique}
Posortuj wg stażu(lista: Pracownik[*]): Pracownik [*] 
{ordered}
Wyszukaj binarnie( lista: Pracownik[*]{ordered}, nazwisko: 
string): Pracownik

Znaczenie poszczególnych metek:
{query}: operacja nie zmienia stanu obiektu, tzn. nie 
modyfikuje wartości atrybutów.
{unique}: zbiór wartości zwróconych w wyniku nie zawiera 
powtórzeń
{ordered}: zbiór wartości, zwróconych w wyniku jest 
uporządkowany
{ordered}: dla parametru: zbiór wartości parametru 
wielokrotnościowego jest uporządkowany.

background image

Zachowa
nie

•   

Diagramy klas nie opisują sposobu realizacji 

operacji. 
     Do tego celu wykorzystuje się diagramy 
opisujące
     dynamiczny aspekt systemu:

•   Diagram maszyny stanów

•   Diagram aktywności

•   Diagram interakcji (sekwencji, komunikacji)

background image

Związki

Związek (and. Association)
Semantyczna zależność występuje między klasami, która ma bezpośrednie 
odzwierciedlenie w powiązaniach(ang. link) występujących między konkretnymi
obiektami systemu.

Każdy związek posiada swoją nazwę, która powinna być unikalna w ramach zbioru 
klas które są przez ten związek łączone. Doprecyzowanie funkcji jaką pełni dana
klasa w związku jest możliwe poprzez zastosowanie koncepcji roli (ang. role).

Powyższy rysunek prezentuje klasy Pracownik oraz Zakład połączone związkiem
o nazwie „zatrudnia”. Związek określa miejsce klasy w systemie w określonym
kontekście. Pracownik może interesować osobę modelującą w kontekście związku
z zakładem, jak i np.: jako „zasób ludzki” posiadający określone certyfikaty,
potwierdzające jego kompetencje.

Pracownik

Zakład

*
pracownik

zatrudnia                  *

pracodawca

Rola

Nazwa związku

Symbol związku

background image

Role

Role obiektów w związku są reprezentowane za pomocą specjalnych atrybutów.
Atrybut, reprezentujący rolę należy do klasy po przeciwnej stronie związku, niż klasa
występująca w tej roli. Jego typ jest zgodny z klasą występującą w roli a liczność 
odpowiada liczności klasy w związku.

Pracownik

Zakład

*
pracownik

zatrudnia

                 *
pracodawca

imię: string
nazwisko : string
stanowisko: string
/pracodawca[*]: Zakład

nazwa: string
adres : string
NIP: string
REGON: string
/pracownik[*]: 
Pracownik

background image

Liczności 
związku

Liczność związku jest górnym i dolnym ograniczeniem liczności zbioru obiektów, z którymi może być powiązany
dany obiekt w danej roli.
Liczność związku określa się dla każdej z ról osobno. Liczność związku specyfikuje się poprzez podanie przedziału 
liczb naturalnych, domkniętego obustronnie:
<granica dolna> … < granica górna>

•   Jeżeli granica górna jest nieograniczona, wówczas należy użyć symbolu „*”.

•   Jeżeli liczność związku jest precyzyjnie określona, wówczas należy podać tylko jedną liczbę, na przykład „4”

•   Jeżeli liczność związku nie może być w żaden sposób oszacowana i może przyjąć wartości od 0 do ∞, 
     wówczas należy podać jedynie symbol „*”.

Samochód

Koło

1

4

Wielokąt

Wierzchołek

1

1..
*

Towarzystwo 
ubezpieczeniowe

Polisa

1

*

Pracownik

Zakład

*

*

Butelka

Korek

0..1

0..
1

background image

Związki 
rekurencyjne

Związek może dotyczyć tej samej klasy. W takim przypadku, w systemie, 
dwa obiekty tej samej klasy są ze sobą powiązane. W celu rozróżnienia 
powiązanych obiektów, konieczne jest określenie ról na obydwu końcach 
związku.

Pracownik

0..1       
szef

*
podwładny

zarządza

background image

Nawigacja

Jeżeli z punktu widzenia systemu, istotny jest jeden aspekt związku, wówczas 
należy wskazać, jaka informacja jest wymagana. Kierunek przeglądania związku 
jest oznaczony grotem umieszczonym na końcu symbolu związku. Na powyższym
przykładzie, obiekty klasy Kolekcja będą miały powiązania z obiektami klasy 
Element. Obiekty klasy Element nie będą miały powiązań z obiektami klasy 
Kolekcja.

Kolekcja

Element

*

zawiera

                 *

background image

Uporządkowanie 
związku

Uporządkowanie związku

Jeżeli liczność związku jest większa niż 1, wówczas może zajść konieczność
pokazania, iż elementy znajdujące się po stronie „wiele” mają być uporządkowane
według jakiegoś porządku. Sytuację taką oznacza się na diagramie własnością
{ordered}. Jeżeli elementy nie są uporządkowane, wówczas nie należy tej sytuacji 
osobno specyfikować, gdyż jest ona przyjmowana jako domyślna.

Harmonogram

Zadanie

1

grupuje

                 *

{ordered}

background image

Ogranicze
nia

Ograniczenia (ang. Constraint)

Czasami w trakcie tworzenia modelu występuje sytuacja, w której należy wyraźnie
zaznaczyć, iż tylko jedno z potencjalnie wielu powiązań może być utworzone dla
danego obiektu.

Sytuację taką zaznacza się poprzez nałożenie ograniczeń {xor} na związki określone
na modelu klas.

Osoba

Firma

0..
1

*

{xor}

Konto

*

1..
*

background image

Klasa 
związku

Jeżeli wraz z wystąpieniem powiązania między obiektami pojawiają się dodatkowe 
informacje, związek na
modelu klas należy wzbogacić o klasę związku (ang. Association Class).
Klasa związku jest reprezentowana na diagramie w taki sam sposób jak normalna 
klasa. Różni się od niej
tym, iż semantycznie jest ona integralną częścią związku, i samodzielnie na diagramie 
nie występuje.

Klasa związku jest przykładem czysto analitycznej konstrukcji, nie posiadającej 
swojego odpowiednika w
językach programowania. Z punktu widzenia metamodelu UML, klasa związku jest 
zarówno klasą, jak i 
związkiem. Z punktu widzenia modelu, klasę związku należy rozumieć jako zestaw 
danych oraz usług, które
zaistnieją tylko wówczas, gdy pomiędzy obiektami reprezentującymi klasy znajdujące 
się po dwóch 
stronach związku zaistnieje powiązanie.

Pracownik

Zakład

                   
   *
   
pracodawc
a

*
pracown
ik

Umowa

zatrudnia

rodzaj
wynagrodzenie

background image

Klasa 
związku

Należy pamiętać, iż domyślnie nie dopuszcza się, aby w 
systemie wystąpiły dwa powiązania o tym samym 
identyfikatorze (na który składają się identyfikatory 
powiązanych obiektów). Oznacza to, że nie może zaistnieć 
w systemie więcej niż jedno powiązanie (pracownik1, 
pracodawca1), gdzie pracownik1, pracodawca1 są 
obiektami znajdującymi się na końcach powiązania 
utworzonego na podstawie związku „zatrudnienia” – nie 
mogą istnieć w systemie 2 pary tych samych obiektów 
powiązanych różnymi obiektami klasy związku. W 
podanym przykładzie przekłada się to na brak możliwości 
zatrudnienia konkretnego pracownika w konkretnym 
zakładzie pracy na podstawie więcej niż jednej umowy.

background image

Kolekcje z 
powtórzeniami

Pracownik

Zakład

                   
   *
   
pracodawc
a

*
pracown
ik

Umowa

zatrudnia

rodzaj
Wynagrodzenie
Data podpisania

{bag}

Kolekcje, reprezentujące role klas w związkach mogą zawierać powtórzenia. 
Oznacza to, że dwa obiekty mogą być ze sobą powiązane więcej niż raz w tym 
samym związku. Zgodnie z diagramem na slajdzie pracownik może być 
wielokrotnie zatrudniony w tym samym zakładzie (np.: w wyniku zmiany
warunków umowy, albo zwolnienia i ponownego zatrudnienia po pewnym 
czasie).

background image

Kwalifikat
or

Kwalifikator jest atrybutem lub zbiorem atrybutów powiązania 
umożliwiającym podział obiektów powiązanych z danym obiektem 
kwalifikowanym
 (obiektem klasy do której jest przyłączony kwalifikator) 
na zbiory według określonego atrybutami kryterium.

Liczność związku określa się dla ustalonego obiektu i kwalifikatora. W 
przypadku gdy liczność jest określona jako „0..1” lub „1”, kwalifikacja 
ma zarówno znaczenie semantyczne jak i implementacyjne. W 
przypadku liczności „0..*” kwalifikator może mieć
jedynie znaczenie implementacyjne, sugerując w ten sposób 
konieczność uwzględnienia szybkiego dostępu do zbioru obiektów. 
Wartym odnotowania jest fakt, iż w przypadku rozważania powiązania 
kwalifikowanego bez ustalonej wartości kwalifikatora, przyjmuje się 
liczność „0..*”.

Pracownik

Zakład

 0..1

*

imię
nazwisko 
Stanowisko
Data zatrudnienia

nazwa
adres
NIP
REGON

nazwisko
imię

background image

Agregacja i 
kompozycja

Agregacja jest szczególnym rodzajem związku, implikującym pewną 
zależność między obiektem – agregatem a obiektami – składowymi. 
Agregacja jest zawsze związkiem binarnym i jest relacją przechodnią i 
asymetryczną. Agregacja nie niesie ze sobą żadnych implikacji 
projektowych i implementacyjnych.

Szczególnym rodzajem agregacji jest kompozycja (ang. Composition). W 
przypadku takiego związku, składowe mogą w danym momencie 
należeć tylko do jednego agregatu (aczkolwiek agregat może się 
zmieniać). Ponadto agregat jest odpowiedzialny za usunięcie 
składowych, gdy sam jest usuwany.

Zespół

Zawodnik

*

1..
*

Wydział

Instytut

*

składa się z

składa się z

background image

Podzbiory ról

Za pomocą własności subsets można wyrazić fakt, że elementy jednej 
kolekcji są podzbiorem elementów innej kolekcji. Własność union 
oznacza, że zawartość kolekcji jest sumą wszystkich podzbiorów, które 
zostały na niej zadeklarowane, a zatem sumą zawartości wszystkich 
kolekcji, dla których użyto własności subsets z nazwą tej kolekcji.

Członek 

stowarzyszenia

Oddział

stowarzyszenia

1

*

imię
nazwisko 
Data wstąpienia

nazwa
Adres
REGON

należy do

Jest w zarządzie

Jest członkiem 
zwyczajnym

*

5..7

0..1

0..1

członek 
zwyczajny
{subsets 
członek}

/członek {union}

background image

Widoczność roli

Widoczność roli:

Określenie widoczności roli umożliwia późniejszą kontrolę dostępu do 
obiektów. Widoczność roli określa się w podobny sposób jak widoczność 
atrybutów i operacji.

Rola „rozdział w związku łączącym książkę z rozdziałem została 
określona jako prywatna dla klasy Książka. Podobnie, rola „akapit” 
została ustalona jako prywatna dla klasy rozdział. Taka definicja 
widoczności ról skutkuje tym, iż niemożliwe jest bezpośrednie odwołanie 
się od obiektu klasy Książka do obiektu klasy akapit. Informacja taka 
może zostać uzyskana jedynie poprzez wywołanie ewentualnej operacji 
zdefiniowanej w klasie Rozdział.

Książka

Rozdział

1..*

1

Książka.Rozdział

1..*

Akapit

{private
}

{private
}

1

background image

Związki 
wielokrotne

Związki wielokrotne, podobnie jak klasy związków, są konstrukcjami 
analitycznymi. Przechodząc do etapu projektowania, należy zmienić 
związki wielokrotne na odpowiednie związki binarne.

Liczność związku dla danej roli odczytuje się przy ustalonych obiektach 
występujących w pozostałych rolach.

Dziecko

Klasa

0..1

*

0..n

Ro

k

background image

Koniec


Document Outline