background image

R

R

ealizacja Asocjacji

ealizacja Asocjacji

Monika Bombol

Monika Bombol

Igor Czechak

Igor Czechak

Referat 3

Referat 3

background image

Indeks zagadnień

Indeks zagadnień

Co to są asocjacje i powiązania

Co to są asocjacje i powiązania

Rodzaje asocjacji

Rodzaje asocjacji

Implementacja asocjacji

Implementacja asocjacji

Pola

Pola

Tablice

Tablice

Kolekcje

Kolekcje

Zadania

Zadania

background image

Asocjacje

Asocjacje

Grupa powiązań między klasami 

Grupa powiązań między klasami 

posiadającymi wspólną strukturę i 

posiadającymi wspólną strukturę i 

semantykę

semantykę

Posiadają:

Posiadają:

Osob

a

Firma

jest_w

 

 

Umożliwiają nawigację po 

Umożliwiają nawigację po 

diagramie

diagramie

nazw
ę

liczność

kierunek

Osoba

stanowis

ko

1..*

*

atrybut

klasa

background image

Rodzaje asocjacji

Rodzaje asocjacji

Dwuargumentowa (binarne)

Dwuargumentowa (binarne)

Rekurencyjna

Rekurencyjna

Klasa asocjacji lub asocjacja z 

Klasa asocjacji lub asocjacja z 

atrybutami

atrybutami

Agregacja

Agregacja

background image

Rodzaje powiązań (1)

Rodzaje powiązań (1)

Dwuargumentowe (binarne): 

Dwuargumentowe (binarne): 

Firma

Osoba

pracuje_w

1..*

1

:Osoba

Kasia

:Firma

Krawiecka

pracuje_w

:Osoba

Ewa

pracuje_w

Diagram obiektów:

Diagram obiektów:

background image

Asocjacja 

Asocjacja 

rekurencyjna

rekurencyjna

Asocjacje mogą łączyć obiekty tej samej 

Asocjacje mogą łączyć obiekty tej samej 

klasy. Stosuje się wtedy tzw. 

klasy. Stosuje się wtedy tzw. 

role asocjacji

role asocjacji

.

.

Nazwy ról (np. 

Nazwy ról (np. 

szef

szef

 ) umieszcza się przy 

 ) umieszcza się przy 

odpowiednich końcach asocjacji. Określają 

odpowiednich końcach asocjacji. Określają 

one rodzaj nawigowania;

one rodzaj nawigowania;

Pracownik w roli szefa ma od 0 do wielu 

Pracownik w roli szefa ma od 0 do wielu 

podwładnych. Pracownik w roli 

podwładnych. Pracownik w roli 

podwładnego   ma 0 lub 1 szefa.

podwładnego   ma 0 lub 1 szefa.

Pracownik

szef

*

0..1

podwładny

background image

Asocjacja z 

Asocjacja z 

atrybutami

atrybutami

Asocjacje mogą być wyposażone            

Asocjacje mogą być wyposażone            

               w atrybuty lub klasy asocjacji. 

               w atrybuty lub klasy asocjacji. 

Wewnątrz klasy asocjacji można 

Wewnątrz klasy asocjacji można 

zdefiniować atrybuty, operacje i inne 

zdefiniować atrybuty, operacje i inne 

cechy asocjacji.

cechy asocjacji.

 

 

Osoba
nazwisko
pesel
adres

Firma
nazwa
adres

pracuje_w

Zatrudnienie
zarobek
stanowisko

*

1..*

Osoba
nazwisko
pesel
adres

Firma
nazwa
adres

Zatrudnienie
zarobek
stanowisko

1

1

1..*

*

background image

grupa

*

Dom

pokój

*

Agregacja i 

Agregacja i 

kompozycja

kompozycja

Agregacja jest szczególnym rodzajem asocjacji 
wyrażającym zależność część-całość. 

Używamy jej jako pomocniczy środek do 
modelowania dowolnej innej sytuacji, kiedy 
grupę obiektów warto - w pewnych sytuacjach - 
potraktować jak całość.

student

W przypadku, gdy cykl składowej 
zawiera się w cyklu życia całości, oraz 
składowa nie może być współdzielona, 
wtedy mamy do czynienia z 
kompozycją.

background image

Zadanie 1

Zadanie 1

Zamień poniższą asocjacje wiele-do-

Zamień poniższą asocjacje wiele-do-

wiele na asocjację rekurencyjną 

wiele na asocjację rekurencyjną 

używając ról asocjacji.

używając ról asocjacji.

Niani
a

Opiekuje się

0..1

*

Dzieck
o

background image

Rozwiązanie zad.1

Rozwiązanie zad.1

0..1 Opiekun

Osoba

Imię

Nazwisk
o

wiek

Podopieczny *

Opiekuje się

background image

Implementacja asocjacji

Implementacja asocjacji

Asocjacje o różnych licznościach 

Asocjacje o różnych licznościach 

implementujemy w różny sposób:

implementujemy w różny sposób:

1 – przez pole z referencją

1 – przez pole z referencją

np. [2-5] – przez tablicę statyczną

np. [2-5] – przez tablicę statyczną

* – przez jedną z kolekcji (Vector, 

* – przez jedną z kolekcji (Vector, 

HashTable)

HashTable)

background image

Pole z referencją

Pole z referencją

Obiekt przechowuje w sobie pole z 

Obiekt przechowuje w sobie pole z 

referencją do drugiej klasy

referencją do drugiej klasy

class Student {

Indeks nrIndeksu;
Student() {

//konstruktor

}

}

class Indeks {

Student idStudenta;
Indeks() {

//konstruktor

}

}

background image

Tablica statyczna

Tablica statyczna

Obiekt przechowuje tablicę referencji do 

Obiekt przechowuje tablicę referencji do 

powiązanych obiektów

powiązanych obiektów

Tylko gdy liczność asocjacji jest 

Tylko gdy liczność asocjacji jest 

ograniczona (np. 1..3 lub 2..5)

ograniczona (np. 1..3 lub 2..5)

class Osoba {

Firma pracodawca;
Osoba() {

//konstruktor

}

}

class Firma {

Osoba[] pracownicy;
Firma() {

//konstruktor
pracownicy = new Osoba[10]; 

//przykładowo

}

}

background image

Vector

Vector

class Osoba {

Firma pracodawca;
Osoba() {

//konstruktor

}

}

class Firma {

Vector pracownicy;
Firma() {

//konstruktor
pracownicy = new 

Vector();

}
void zatrudnij(Osoba 

pracownik) {

pracownicy.add(pracownik);

}

}

Gdy liczność 

Gdy liczność 

asocjacji nie 

asocjacji nie 

jest 

jest 

ograniczona (*)

ograniczona (*)

Obiekt 

Obiekt 

przechowuje 

przechowuje 

kolekcję z 

kolekcję z 

referencjami do 

referencjami do 

powiązanych 

powiązanych 

obiektów

obiektów

background image

Użycie HashTable

Użycie HashTable

Hashtable przechowuje pary: klucz, 

Hashtable przechowuje pary: klucz, 

wartość

wartość

Klucz to obiekt z którego wychodzi 

Klucz to obiekt z którego wychodzi 

asocjacja

asocjacja

Wartość to obiekt wskazywany (koniec 

Wartość to obiekt wskazywany (koniec 

asocjacji)

asocjacji)

Hashtable może być np. przechowywany 

Hashtable może być np. przechowywany 

statycznie wewnątrz klasy

statycznie wewnątrz klasy

background image

Hashtable

Hashtable

class Osoba {

String imie;

}

class Firma {

static Hashtable zatrudnienie;
void zatrudnij(Osoba pracownik) {

zatrudnienie.put(this, 

pracownik);

}

}

Tablica haszująca przechowuje 

Tablica haszująca przechowuje 

referencję do pracownika firmy 

referencję do pracownika firmy 

background image

Hashtable – relacja 1- *

Hashtable – relacja 1- *

Tablica przechowuje wektor z 

Tablica przechowuje wektor z 

referencjami do powiązanych obiektów

referencjami do powiązanych obiektów

class Osoba {

String imie;

}
class Firma {

static Hashtable zatrudnienie;
Firma() {

zatrudnienie.put(this, new Vector());

}
void zatrudnij(Osoba pracownik) {

((Vector)(zatrudnienie.get(this))).add(pracownik);

}

}

background image

Atrybuty asocjacji

Atrybuty asocjacji

Atrybuty asocjacji implementuje się jako 

Atrybuty asocjacji implementuje się jako 

klasę pośredniczącą zawierającą referencje 

klasę pośredniczącą zawierającą referencje 

do klas które łączy

do klas które łączy

class Osoba {

Hashtable zatrudnienie; }

class Firma {

Hashtable zatrudnienie; }

class Zatrudnienie {

Osoba pracownik;
Firma pracodawca;
int czas;
Zatrudnienie(Osoba pracownik, Firma pracodawca, int 

czas) { }
}

Relacje mogą być zrealizowane jednym z wcześniej 

Relacje mogą być zrealizowane jednym z wcześniej 

opisanych sposobów (np. Hashtable)

opisanych sposobów (np. Hashtable)

Osoba
nazwisko
pesel
adres

Firma
nazwa
adres

Zatrudnienie
zarobek
stanowisko

1

1

1..*

*

background image

Implementacja agregacji

Implementacja agregacji

Agregację można zaimplementować 

Agregację można zaimplementować 

przy pomocy klasy wewnętrznej

przy pomocy klasy wewnętrznej

class Dom {

Pokój[] pokoje;
Dom(int ilośćPokojów) {

pokoje = new Pokój[ilośćPokojów];

}
class Pokój() {

Pokój() {//konstruktor}

}

}

background image

Zadanie (2)

Zadanie (2)

Stół ma od jednej do trzech nóg. 

Stół ma od jednej do trzech nóg. 

Zaproponuj diagram klas i 

Zaproponuj diagram klas i 

rozwiązanie implementacyjne.

rozwiązanie implementacyjne.

background image

Odpowiedź do zadania (2)

Odpowiedź do zadania (2)

class Stół {

Noga[] nogi;
Stół(int ilośćNóg) {

this.nogi = new Noga[ilośćNóg];
//stworzenie nóg
for (int i=0; i<ilośćNóg; i++) {

nogi[i] = new Noga();

}

}

}
class Noga {

Noga() {

//konstruktor

}

}

background image

Zadanie (3)

Zadanie (3)

Na jednym wydziale studiuje wiele 

Na jednym wydziale studiuje wiele 

osób. Osoba może studiować na 

osób. Osoba może studiować na 

wielu wydziałach jednocześnie.

wielu wydziałach jednocześnie.

Jak będzie wyglądał przykładowy 

Jak będzie wyglądał przykładowy 

diagram klas?

diagram klas?

W jaki sposób zaimplementować 

W jaki sposób zaimplementować 

można taką asocjację?

można taką asocjację?

background image

Odpowiedź do zadania (3)

Odpowiedź do zadania (3)

Implementacja za pomocą klasy 

Implementacja za pomocą klasy 

pośredniczącej przechowującej 

pośredniczącej przechowującej 

referencje do obu klas.

referencje do obu klas.

Relacja 1-* do klasy pośredniej może 

Relacja 1-* do klasy pośredniej może 

być zaimplementowana np. za 

być zaimplementowana np. za 

pomocą wektora.

pomocą wektora.

background image

Zadanie (4)

Zadanie (4)

W pudełku są czekoladki. Czekoladki 

W pudełku są czekoladki. Czekoladki 

nie mogą istnieć bez pudełka.

nie mogą istnieć bez pudełka.

Zaproponuj implementację powyższej 

Zaproponuj implementację powyższej 

zależności przy założeniu, że mamy 

zależności przy założeniu, że mamy 

do czynienia z kompozycją

do czynienia z kompozycją

background image

Odpowiedź do zadania (4)

Odpowiedź do zadania (4)

class Pudełko {

Czekoladka[] zawartość;
Pudełko() {

zawartość = new Czekoladka[20];
//stworzenie czekoladek
for (int i=0; i<20; i++) {

zawartość[i] = new 

Czekoladka();

}

}
class Czekoladka() {

Czekoladka() {//konstruktor}

}

}

Tworzymy klasę Czekoladka 

Tworzymy klasę Czekoladka 

wewnątrz klasy Pudełko

wewnątrz klasy Pudełko

background image

Źródła do których warto 

Źródła do których warto 

zajrzeć

zajrzeć

Wykłady z PRI. Ewa Stemposz i 

Wykłady z PRI. Ewa Stemposz i 

Kazimierz Subieta

Kazimierz Subieta

http://www.jot.fm/issues/issue_2003_0

http://www.jot.fm/issues/issue_2003_0

9/article4

9/article4

 - Mapping UML Associations into 

 - Mapping UML Associations into 

Java Code 

Java Code 

Carlos Ruiz del Castillo. 

Carlos Ruiz del Castillo. 

Implementación en Java de 

Implementación en Java de 

asociaciones binarias UML

asociaciones binarias UML

 

 


Document Outline