Sobes.tech
Junior

Ką žinote apie klasių sudėtį programavime?

sobes.tech AI

Atsakymas iš AI

Kompozicija yra ryšys "apima" arba "dalis-visas", kai viena klasė (kompozitas) turi nuorodą į kitą klasę (komponentą) arba jos egzempliorius. Komponento gyvavimo ciklas dažnai glaudžiai susijęs su kompozito gyvavimo ciklu. Tai stiprus ryšys, kai komponentas negali egzistuoti be kompozito.

Kompozicijos privalumai:

  • Lankstumas: Lengviau keisti elgseną keičiant komponentus.
  • Mažesnis priklausomumas: Klasės mažiau priklauso viena nuo kitos nei paveldėjimas.
  • Pakartotinis naudojimas: Tą pačią komponentą galima naudoti skirtinguose kompozituose.

Pavyzdys: Klasė Automobilis gali turėti nuorodą į klasę Variklis. Jei Automobilis sunaikinamas, tada ir Variklis (šiuo kontekste) nustoja egzistuoti.

klasė Variklis {
    // variklio savybės ir metodai
}

klasė Automobilis {
    privatus Variklis variklis; // kompozicija

    viešas Automobilis() {
        this.variklis = naujas Variklis(); // komponento kūrimas kompozicijoje
    }

    // kitos automobilio savybės ir metodai
}

Skirtumas nuo agregacijos: agregacijoje komponentai gali egzistuoti nepriklausomai nuo kompozito (silpnas ryšys). Pavyzdys: Klasė Universitetas turi nuorodas į Studento klasių egzempliorius. Studentai gali egzistuoti ir už universiteto ribų.

Android kūrime kompozicija aktyviai naudojama, pavyzdžiui, kuriant vaizdus (ViewGroup turi View), dirbant su priklausomybėmis per Dagger/Hilt. Tai yra pageidaujamas požiūris, palyginti su daugiavaidžiu paveldėjimu (kurio Java/Kotlin nėra klasių lygyje) ir dažnai lankstesnis nei viengubas paveldėjimas.

klasė UserRepository(private val apiService: ApiService) {
    // UserRepository "naudoja" ApiService (kompozicija/agregacija)
    funkcija fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}