Sobes.tech
Junior

Co víte o složení tříd v programování?

sobes.tech AI

Odpověď od AI

Složené vztah je vztah "obsahuje" nebo "část celku", při kterém jedna třída (kompozit) obsahuje odkaz na jinou třídu (součást) nebo její instance. Životní cyklus součásti je obvykle úzce spojen se životním cyklem složeného objektu. Jedná se o silné spojení, kdy součást nemůže existovat bez složeného objektu.

Výhody složeného:

  • Flexibilita: Je snazší měnit chování změnou komponent.
  • Snížení závislosti: Třídy jsou méně závislé na sobě ve srovnání s dědičností.
  • Opětovné použití: Stejné komponenty lze používat v různých složených objektech.

Příklad: Třída Auto může obsahovat odkaz na třídu Motor. Pokud je Auto zničeno, přestává v tomto kontextu existovat i Motor.

class Motor {
    // vlastnosti a metody motoru
}

class Auto {
    private Motor motor; // složené

    public Auto() {
        this.motor = new Motor(); // vytvoření komponenty uvnitř složeného objektu
    }

    // další vlastnosti a metody auta
}

Rozdíl od agregace: V agregaci mohou komponenty existovat nezávisle na složeném objektu (slabé spojení). Příklad: Třída Univerzita obsahuje odkazy na instance třídy Student. Studenti mohou existovat i mimo univerzitu.

V Android vývoji je složené vztahy aktivně využíváno, například při vytváření pohledů (ViewGroup obsahuje View), při práci s závislostmi přes Dagger/Hilt. Tento přístup je preferován oproti vícenásobné dědičnosti (která v Javě/Kotlinu pro třídy neexistuje) a často je flexibilnější než jednoduchá dědičnost.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "používá" ApiService (složené/aggregace)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}