Sobes.tech
Junior

Ce știi despre compoziția claselor în programare?

sobes.tech AI

Răspuns de la AI

Compoziția este o relație de "conține" sau "parte a", în care o clasă (compozitul) conține o referință la o altă clasă (componentul) sau la instanțele acesteia. Ciclul de viață al componentului este de obicei strâns legat de cel al compozitului. Este o relație puternică, în care componentul nu poate exista fără compozit.

Avantajele compoziției:

  • Flexibilitate: Este mai ușor să schimbi comportamentul modificând componentele.
  • Reducerea cuplajului: Clasele depind mai puțin unele de altele comparativ cu moștenirea.
  • Reutilizare: Aceleași componente pot fi utilizate în diferite compozite.

Exemplu: Clasa Mașină poate conține o referință la clasa Motor. Dacă Mașina este distrusă, și Motorul (în acest context) încetează să mai existe.

class Motor {
    // proprietăți și metode ale motorului
}

class Masina {
    private Motor motor; // compoziție

    public Masina() {
        this.motor = new Motor(); // crearea componentei în interiorul compozitului
    }

    // alte proprietăți și metode ale mașinii
}

Diferența față de agregare: În agregare, componentele pot exista independent de compozit (relație slabă). Exemplu: Clasa Universitate conține referințe la instanțe ale clasei Student. Studenții pot exista și în afara universității.

În dezvoltarea Android, compoziția este utilizată activ, de exemplu, la crearea de vizualizări (ViewGroup conține View), la lucrul cu dependențe prin Dagger/Hilt. Este o abordare preferată față de moștenirea multiplă (care nu există în Java/Kotlin pentru clase) și adesea mai flexibilă decât moștenirea simplă.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "utilizează" ApiService (compoziție/agregare)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}