Š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)
}
}