Dasturlashda sinflar kompozitsiyasi haqida nima bilasiz?
sobes.tech AI
AIdan javob
Kompozitsiya — bu "mazmuni" yoki "qism-to‘liq" bog‘liqlik bo‘lib, unda bir sinf (kompozit) boshqa sinfga (komponent) yoki uning nusxalariga havola qiladi. Komponentning hayot aylanishi odatda kompozit bilan chambarchas bog‘liq. Bu kuchli bog‘liqlik bo‘lib, komponent kompozitsiz mavjud bo‘la olmaydi.
Kompozitsiyaning afzalliklari:
- Moslashuvchanlik: Xatti-harakatni o‘zgartirish uchun komponentlarni o‘zgartirish osonroq.
- Bog‘liqlikni kamaytirish: Sinflar bir-biriga kamroq bog‘liq bo‘lib, merosdan farqli o‘laroq.
- Qayta ishlatish: Bir xil komponentlar turli kompozitlarda ishlatilishi mumkin.
Misol: Avtomobil sinfi Motor sinfiga havola qilishi mumkin. Agar Avtomobil yo‘q qilinsa, bu kontekstda Motor ham mavjud bo‘lishni to‘xtatadi.
class Motor {
// motorning xususiyatlari va metodlari
}
class Avtomobil {
private Motor motor; // kompozitsiya
public Avtomobil() {
this.motor = new Motor(); // kompozit ichida komponent yaratish
}
// avtomobilning boshqa xususiyatlari va metodlari
}
Agregatsiyadan farqi: Agregatsiyada komponentlar kompozitdan mustaqil ravishda mavjud bo‘lishi mumkin (zaif bog‘liqlik). Misol uchun: Universitet sinfi Student sinfining nusxalariga havola qilishi mumkin. Talabalar universitetdan mustaqil ravishda mavjud bo‘lishi mumkin.
Android dasturlashda kompozitsiya faol qo‘llaniladi, masalan, ViewGroup ichida View bo‘lishi, Dagger/Hilt yordamida bog‘liqliklarni boshqarish. Bu yondashuv ko‘p merosga nisbatan afzalroq bo‘lib, Java/Kotlin uchun merosdan ko‘ra ko‘proq moslashuvchan bo‘lishi mumkin.
class UserRepository(private val apiService: ApiService) {
// UserRepository "foydalanadi" ApiService (kompozitsiya/agregatsiya)
fun fetchUser(userId: String) {
// apiService.getUser(userId)
}
}