Asociace mezi objekty

Proč to potřebuji?

Reálné programy se skládají z mnoha spolupracujících objektů. Asociace popisují, jak jsou objekty propojeny, a správná implementace těchto vztahů je klíčem k čistému návrhu aplikace.

Teorie

Asociace je vztah mezi dvěma třídami/objekty. V UML se zobrazuje jako čára mezi třídami s popisem kardinalit (1:1, 1:N, M:N).

Agregace (prázdný kosočtverec) – volný vztah, podřízený objekt může existovat nezávisle. Kompozice (plný kosočtverec) – silný vztah, podřízený objekt nemůže existovat bez nadřazeného.

Při převodu UML do Javy se asociace implementuje jako atribut (reference). Kardinalita 1 = jednoduchý atribut, kardinalita N = kolekce (List, Set).

Příklady

// Agregace: Ucitel existuje nezávisle na Škole
public class Skola {
    private String nazev;
    private List<Ucitel> ucitele; // 1:N agregace

    public Skola(String nazev) {
        this.nazev = nazev;
        this.ucitele = new ArrayList<>();
    }

    public void pridejUcitele(Ucitel u) {
        ucitele.add(u);
    }
}

public class Ucitel {
    private String jmeno;
    public Ucitel(String jmeno) {
        this.jmeno = jmeno;
    }
}

// Kompozice: Mistnost nemůže existovat bez Budovy
public class Budova {
    private List<Mistnost> mistnosti;

    public Budova() {
        this.mistnosti = new ArrayList<>();
    }

    // Místnost se vytváří UVNITŘ budovy
    public Mistnost vytvorMistnost(String cislo) {
        Mistnost m = new Mistnost(cislo);
        mistnosti.add(m);
        return m;
    }
}

// Vnitřní třída – zdůrazňuje, že Mistnost patří Budově
public class Mistnost {
    private String cislo;
    Mistnost(String cislo) { // package-private konstruktor
        this.cislo = cislo;
    }
}

// UML → Java převod:
// Škola 1 ---<> * Ucitel   →  List<Ucitel> v třídě Skola
// Budova 1 ---■ * Mistnost →  List<Mistnost> + tvorba uvnitř Budovy

Shrnutí

Klíčové body

  • Asociace se převádí na atributy (reference) ve třídě
  • Kardinalita 1 → jednoduchý atribut, N → List/Set
  • Agregace = volný vztah, Kompozice = silný (životní cyklus řízen vlastníkem)
  • Obousměrná asociace = reference na obou stranách