R
R
ealizacja Asocjacji
ealizacja Asocjacji
Monika Bombol
Monika Bombol
Igor Czechak
Igor Czechak
Referat 3
Referat 3
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
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
Rodzaje asocjacji
Rodzaje asocjacji
Dwuargumentowa (binarne)
Dwuargumentowa (binarne)
Rekurencyjna
Rekurencyjna
Klasa asocjacji lub asocjacja z
Klasa asocjacji lub asocjacja z
atrybutami
atrybutami
Agregacja
Agregacja
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:
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
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..*
*
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ą.
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
Rozwiązanie zad.1
Rozwiązanie zad.1
0..1 Opiekun
Osoba
Imię
Nazwisk
o
wiek
Podopieczny *
Opiekuje się
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)
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
}
}
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
}
}
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
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
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
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);
}
}
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..*
*
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}
}
}
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.
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
}
}
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ę?
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.
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ą
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
Ź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
- 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