Diagramy klas- prośba o wytłumaczenie

0

Witam zgłębiam temat diagramów klas w uml. Mam trochę problem z zależnością i asocjacją, ale zacznijmy od końca :)
Kompozycja (agregacja całkowita)
Jeden obiekt ma na własność drugi obiekt i gdy usuwamy obiekt parent to usuwamy również child-a, a jeśli usuniemy child-a to parent zostacje
Np.

public class Car{
           public void init(){
                      Kierownica kierownica = new Kierownica();
           }
}

Agregacja częściowa
Jeden obiekt ma w sobie referencję do drugiego obiektu, nie tworzy go i nie usuwa (czasy istnienia są od siebie niezależne)
Np.

public class Car{
Kierowca kierowca;
           public void setKierowca(Kierowca kierowca){
                      this.kierowca=kierowca;
           }
}

Zależność
Jedna klasa może wykonywać operacje na innej klasie, tworzyć ją, mieć w sobie jej instację
Np

public class Car{
           public void addCar(Kierowca kierowca){
                      kierowca.add(this);
           }
}

A jak to będzie z asocjacją? Wiem że ona jest silniejsza od zależności (czyli będzie pozwalała na mniej operacji niż zależność), prosiłbym o jakiś prosty przykład. Przykładowy kod pisałem w javie :P
Z góry dziękuję za odpowiedzi :)

0

Nie rozumiem tego fragmentu kodu:

public class Car{
           public void addCar(Kierowca kierowca){
                      kierowca.add(this);
           }
}

Samochód ma możliwość dodania samochodu poprzez pobranie pojedynczego, istniejącego już Kierowcy i dodaniu do tego kierowcy aktualnego samochodu... o.O

Po drugie nie oddaje to w ogóle tego co napisałeś tutaj:

może wykonywać operacje na innej klasie, tworzyć ją, mieć w sobie jej instację

0

Samochód ma możliwość dodania samochodu poprzez pobranie pojedynczego, istniejącego już Kierowcy i dodaniu do tego kierowcy aktualnego samochodu... o.O

O to mi chodziło xD
Ogólnie chciałem pokazać w tym kodzie to że jedna klasa może w metodzie przyjąć jako argument obiekt innej klasy i ją zmodyfikować

Stworzyłem taki diagram klas (sklep komputerowy), czy jest on poprawny ?
computer_shop

1

Nie wkręcałem się zanadto w diagram ale moją uwagę przykuła jedna rzecz: rozumiem, że chcesz handlować tylko dyskami, zasilaczami i pamięciami RAM, a jak będziesz chciał poszerzyć asortyment o myszki i klawiatury to będziesz musiał dopisać do programu nową funkcjonalność i go przekompilować, tak? :-)

0

czyli muszę dodać klasę dodaj asortyment który mi utworzy nowy obiekt?

1

Nie. Produkt posiada przypisaną kategorię, a nie jest kategorią. Kompozycja, a nie dziedziczenie, przy czym kategoria to także jedna klasa, a nie tysiące specjalizacji, bo wrócimy do punktu wyjścia. Taka klasa Kategoria posiada np. pole Nazwa gdzie określasz czy to dysk, czy pamięci oraz pole Id, które jednoznacznie identyfikuje kategorię np. w bazie danych, bo tworzenie tożsamości za pomocą stringów to zło . Tworzy się wtedy taki słownik, gdzie user wybiera kategorię mając do dyspozycji listę obiektów klasy Kategoria, wyświetlaną np. w combo boksie.

Zależność mniej więcej taka:

// pseudokod:
class Produkt
{
	public int Id;
	public string Nazwa;
	public string Opis;
	public decimal Cena;
	public int IloscSztuk;
	public Kategoria Kategoria;
}

class Kategoria
{
	public int Id;
	public string Nazwa;
	public List<Produkt> Produkty; // w zasadzie niewymagane jeżeli nie chcesz mieć zależnosci obustronnej.
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1