Sobes.tech
Junior

Čo viete o skladbe tried v programovaní?

sobes.tech AI

Odpoveď od AI

Kompozícia je vzťah "obsahuje" alebo "čas celku", pri ktorom jedna trieda (kompozit) obsahuje odkaz na inú triedu (súčasť) alebo jej inštancie. Životný cyklus súčasti je zvyčajne úzko spojený s cyklom života kompozitu. Ide o silný vzťah, kde súčasť nemôže existovať bez kompozitu.

Výhody kompozície:

  • Flexibilita: Je jednoduchšie meniť správanie zmenou komponentov.
  • Zníženie závislosti: Triedy sú menej závislé jedna od druhej v porovnaní s dedičstvom.
  • Znovupoužiteľnosť: Rovnaké komponenty je možné použiť v rôznych kompozitoch.

Príklad: Trieda Auto môže obsahovať odkaz na triedu Motor. Ak je Auto zničené, prestáva v tomto kontexte existovať aj Motor.

class Motor {
    // vlastnosti a metódy motora
}

class Auto {
    private Motor motor; // kompozícia

    public Auto() {
        this.motor = new Motor(); // vytvorenie komponentu vnútri kompozitu
    }

    // ďalšie vlastnosti a metódy auta
}

Rozdiel od agregácie: V agregácii môžu komponenty existovať nezávisle od kompozitu (slabé spojenie). Príklad: Trieda Univerzita obsahuje odkazy na inštancie triedy Študent. Študenti môžu existovať aj mimo univerzity.

V Android vývoji sa kompozícia aktívne využíva, napríklad pri vytváraní pohľadov (ViewGroup obsahuje View), pri práci s závislosťami cez Dagger/Hilt. Ide o preferovaný prístup v porovnaní s viacnásobnou dedičnosťou (ktorá v Jave/Kotlin neexistuje pre triedy) a často je flexibilnejší než jednoduchá dedičnosť.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "používa" ApiService (kompozícia/agregácia)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}