• Nie Znaleziono Wyników

Agregacja<>Agregacja: umiera żołnież nie ginie oddział<=>Kompozycja: umiera serce ginie człowiekPole

N/A
N/A
Protected

Academic year: 2021

Share "Agregacja<>Agregacja: umiera żołnież nie ginie oddział<=>Kompozycja: umiera serce ginie człowiekPole"

Copied!
1
0
0

Pełen tekst

(1)

Czasem nic znaczy więcej...

...i dlatego takie małe nic jest TU!

Agregacja

<>Agregacja: umiera żołnież nie ginie oddział

<=>Kompozycja: umiera serce ginie człowiek PoleClass Oddział{

final int licznosc = 100;

String rozkazy;

Zolnierze [licznosc];

// kolekcja referencji do obiektow skladowych }

Class Zolnierz{

String rozkazy;

Oddział oddział;

// referencja do obiektu bedacego caloscia }

Klasa wewnętrzna

Class Niebo{

final int licznosc = 100;

private class Gwiazdy {

// ...

};

Gwiazdy gwiazdy[licznosc];

}

Ukrywanie implementacji. Automatyczna propagacja operacji(Kompozycja).

Wady poszczególnych kolekcji. Nieodpowiedni dla agregacji.

Osobna klasa (klasa z atrybutami)

Class termin{

final int licznosc = 100;

Date data;

Oddział całość;

Zolnierz[licznosc];

}

Odpowiednio, zarówno obiekt Oddział, jak i obiekty Żołnierz muszą zawierać referencje do obiektu Termin

Asocjacje n-arne

Pole

Utrzymywanie n-1 referencji (możliwie kolekcji referencji) w każdej klasie jest dość uciążliwe.

Utrudniona Nawigacja

Osobna klasa

Class Asocjacja_N_Arna {

Oddzial oddzial;

Zolnierz zolnierz;

}

Każda klasa wchodząca w skład asocjacji musi utrzymywać jedynie referencje do powyższego obiektu

Łatwa nawigacja. Niski stopień komplikacji.

Możliwość wprowadzenia atrybutów asocjacji. Duża liczba referencji

Asocjacja kwalifikowana

public class Ksiazka extends Object { private String tytul; // Atrybuty // Konstruktor

public Book() { }

// Metody dostępu do atrybutów asocjacji public String getTytul() {

return tytul;

}

public void setTytul(String tytul2) { tytul = tytul2;

} }

public class Klient extends Object { private String nazwisko;

public Hashtable zbiorKsiazek;

public Klient() {

zbiorKsiazek = new Hashtable();

}

public String getNazwisko() { return nazwisko;

}

public void setNazwisko(String nazwisko) { this.nazwisko = nazwisko;

}

// ---- Metody dostępu do asocjacji // Pobierz zbiór książek

public Vector getZbiorKsiazek(String ksiID2) { Object obiekt = zbiorKsiazek.get(ksiID2);

if (obiekt != null) return ((Vector) obiekt);

return null;

}

// Dodaj książkę do zbioru

public void addKsiazka(String ksiID2, Ksiazka book2) {

if (book2 == null) return;

Vector vector = (Vector) zbiorKsiazek.get(ksiID2);

if (vector == null) { vector = new Vector();

zbiorKsiazek.put(ksiID2, vector);

}

vector.addElement(book2);

}

// Usun książkę do zbioru

public void removeKsi(String ksiID2, Ksiazka book2) {

if (book2 == null) return;

Vector vector = (Vector) zbiorKsiazek.get(ksiID2);

if (vector != null) vector.removeElement(book2);

} }

Asocjacja

Asocjacja: 1(Samochod) – 4(Kolo)

public class Samochod { public String Marka;

public Kolo[4] moje_kola;

}

public class Kolo { public int Rozmiar;

}

Asocjacja: 1(Samochod) – 1(silnik)

public class Samochod { public String Marka;

public Silnik moj_silnik;

}

public class Silnik { public int pojemnosc;

}

System.out.print(”pojemnosc = ” + Toyota.moj_silnik.pojemnosc);

Asocjacja: 1 – 0...* (na tablicach)

public class Osoba { public String Nazwisko;

public String Imie;

public Ksiazka[] mojeKsiazki;

// ale jaki ustalić rozmiar tablicy w konstruktorze }

public class Ksiazka { public String Tytul;

}

Asocjacja: 1 – 0...* (na hashSet)

Public class Osoba { String imie;

HashSet mojeKsiazki;

public Osoba(String imie) {

this.imie = imie;

mojeKsiazki = new HashSet();

}

public void addTo(ksiazka k) {

mojeKsiazki.add(k);

}

public void show() {

Iterator iterator = mojeKsiazki.iterator();

while (iterator.hasNext()) { ksiazka o = (ksiazka)iterator.next();

String name = o.tytul;

System.out.println(name);

} } }

public class ksiazka{

public String tytul;

public ksiazka(String tytul) {

this.tytul = tytul;

} }

Asocjacja: * - *

public class Aktor { public String Nazwisko;

public String Imie;

public Film[] mojeFilmy;

}

public class Film { public String Tytul;

public Aktor[] aktorzy;

}

Asocjacja z klasą pośredniczącą

public class Aktor { public String Nazwisko;

public String Imie;

}

public class Film { public String Tytul;

}

public class Aktor_Film { public Aktor aktor;

public Film film;

}

Asocjacja z atrybutami

public class klaun{

string imie;

string Nazwisko;

double Pesel;

Hashset zatrudnienia;

// moze byc dowolna kolekcja }

public class Cyrk{

string nazwa;

string adres;

Hashset zatrudnienia;

// moze byc dowolna kolekcja }

public class zatrudnienie{

double zarobek;

Klaun klaun;

Cyrk cyrk;

}

Cytaty

Powiązane dokumenty

Nacisnął mocniej czapkę, i znowu milcząc siedział. Księżyc skrył się za chmury, i znowu jak w grobie ; lecz nie długo , bo za chwil kilka szelest rozległ się już

 istnieje mo˙zliwo´s´c rzutowania wska´znika(referencji) do klasy pochodnej na wska´znik (referencj ˛e) do klasy bazowej;.  istnieje mo˙zliwo´s´c tworzenia obiektu klasy bazowej

Wielkopolska może się pochwalić, mimo nadal niedostatecznej liczby prze- szczepów w Polsce, bardzo dobrymi

Jak widać optymalne rozwiązanie problemu polega na takim podziale krawędzi grafu zupełnego pomiędzy podgrafy występujące w ilości równiej liczbie długości fal w systemie,

Jest taki fajny wierszyk, który przy każdym ulu mówię, pukam trzy razy nad wlotkiem i mówię: „Chrystus zmartwychwstał, pszczoły zdrowo się chowajcie, gospodarzowi miodu –

On, Bóg, który sta³ siê cz³owie- kiem (kolor b³êkitny – „ludzki” jest na³o¿ony na czerwieñ tuniki – ozna- ka Boga), podejmuje w geœcie b³ogo- s³awieñstwa

zjada chleb, który wcześniej Balladyna pokroiła nożem z zatrutym jadem 10.. należy bić w dzwony, kiedy

Otwierające tom Ľ Hérésiarque et Cie opowiadanie Le P assant de Prague G.. Czeska awangarda literacka okresu międzywojennego 179 Arnošt Procházka, w kwietniu 1913