Mida teate klasside koostisest programmeerimises?
sobes.tech AI
Vastus AI-lt
Kompositsioon on seos "sisaldab" või "osa-täielik", kus üks klass (komposiit) sisaldab viidet teisele klassile (komponent) või selle eksemplaridele. Komponendi elutsükkel on tavaliselt tihedalt seotud komposiidi elutsükliga. See on tugev seos, kus komponent ei saa eksisteerida ilma komposiidita.
Kompositsiooni eelised:
- Paindlikkus: Elukäiku on lihtsam muuta, muutes komponente.
- Vähendatud sõltuvus: Klassid sõltuvad üksteisest vähem kui pärimisega.
- Taaskasutus: Sama komponenti saab kasutada erinevates komposiitides.
Näide: Klass Auto võib sisaldada viidet klassile Mootor. Kui Auto hävib, siis ka Mootor (selles kontekstis) ei eksisteeri enam.
klass Mootor {
// mootori omadused ja meetodid
}
klass Auto {
privaatne Mootor mootors; // kompositsioon
avalik Auto() {
this.mootors = uus Mootor(); // komponendi loomine kompositsioonis
}
// muud auto omadused ja meetodid
}
Erinevus agregatsioonist: agregatsioonis võivad komponendid eksisteerida sõltumatult komposiidist (nõrk seos). Näide: Klass Ülikool sisaldab viiteid klassi Õpilane eksemplaridele. Õpilased võivad eksisteerida ka väljaspool ülikooli.
Androidi arenduses kasutatakse kompositsiooni aktiivselt, näiteks vaadete loomisel (ViewGroup sisaldab View), sõltuvuste haldamisel Dagger/Hilt abil. See on eelistatud lähenemine võrreldes mitme pärimisega (mida Java/Kotlinis ei ole klasside jaoks) ning sageli paindlikum kui üksik pärimine.
klass UserRepository(private val apiService: ApiService) {
// UserRepository "kasutab" ApiService (kompositsioon/agregatsioon)
funktsioon fetchUser(userId: String) {
// apiService.getUser(userId)
}
}