Sobes.tech
Junior

Šta znate o kompoziciji klasa u programiranju?

sobes.tech АИ

Одговор од АИ

Kompozicija je odnos "sadrži" ili "deo od", pri čemu jedna klasa (kompozit) sadrži referencu na drugu klasu (komponentu) ili njene instance. Životni ciklus komponente je obično usko povezan sa životnim ciklusom kompozita. To je snažna veza u kojoj komponenta ne može postojati bez kompozita.

Prednosti kompozicije:

  • Fleksibilnost: Lakše je menjati ponašanje menjajući komponente.
  • Smanjenje povezanosti: Klase su manje zavisne jedna od druge u poređenju sa nasleđivanjem.
  • Ponovna upotreba: Iste komponente mogu se koristiti u različitim kompozitima.

Primer: Klasa Automobil može sadržati referencu na klasu Motor. Ako se Automobil uništi, tada i Motor (u ovom kontekstu) prestaje da postoji.

class Motor {
    // svojstva i metode motora
}

class Automobil {
    private Motor motor; // kompozicija

    public Automobil() {
        this.motor = new Motor(); // kreiranje komponente unutar kompozita
    }

    // druge osobine i metode automobila
}

Razlika od agregacije: U agregaciji, komponente mogu postojati nezavisno od kompozita (slaba veza). Primer: Klasa Univerzitet sadrži reference na instance klase Student. Studenti mogu postojati i van univerziteta.

U Android razvoju, kompozicija se aktivno koristi, na primer, pri kreiranju prikaza (ViewGroup sadrži View), pri radu sa zavisnostima putem Dagger/Hilt. Ovo je preferirani pristup u poređenju sa višestrukim nasleđivanjem (koje u Javi/Kotlinu ne postoji za klase) i često je fleksibilnije od jednostavnog nasleđivanja.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "koristi" ApiService (kompozicija/agregacija)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}