Sobes.tech
Junior

Proqramlaşdırmada siniflərin tərkibi haqqında nə bilirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Kompozisiya — bu "məzmunu" və ya "hissəsi-bütöv" əlaqəsidir, burada bir sinif (kompozit) başqa sinfə (komponent) və ya onun nümunələrinə istinad edir. Komponentin həyat dövrü adətən kompozit ilə sıx bağlıdır. Bu güclü əlaqədir və komponent kompozit olmadan mövcud ola bilməz.

Kompozisiyanın üstünlükləri:

  • Esneklik: Xüsusiyyətləri dəyişdirmək üçün komponentləri dəyişdirmək daha asandır.
  • Yüklenmənin azaldılması: Sinflər bir-birinə daha az bağlıdır, irsiyyətə nisbətən.
  • Təkrar istifadə: Eyni komponentlər müxtəlif kompozitlərdə istifadə oluna bilər.

Misal: Avtomobil sinfi Mühərrik sinfinə istinad edə bilər. Əgər Avtomobil məhv olunsa, bu kontekstdə Mühərrik də mövcud olmamağa başlayır.

class Mühərrik {
    // mühərrikin xüsusiyyətləri və metodları
}

class Avtomobil {
    private Mühərrik mühərrik; // kompozisiya

    public Avtomobil() {
        this.mühərrik = new Mühərrik(); // komponentin yaradılması kompozit daxilində
    }

    // digər xüsusiyyətlər və metodlar
}

Ayrıse, agregasiya ilə fərqi: Agregasiyada, komponentlər kompozitdən müstəqil mövcud ola bilər (zəif əlaqə). Misal: Universitet sinfi Tələbə sinfinin nümunələrinə istinad edir. Tələbələr universitetdən müstəqil mövcud ola bilər.

Android inkişafında kompozisiya aktiv şəkildə istifadə olunur, məsələn, ViewGroup içində View yerləşdirmək, Dagger/Hilt ilə asılılıqları idarə etmək. Bu, çoxlu irsiyyətə nisbətən üstün sayılır (Java/Kotlin-də sinflər üçün çoxlu irsiyyət yoxdur) və tez-tez tək irsiyyətə nisbətən daha çevik olur.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "istifadə edir" ApiService (kompozisiya/agregasiya)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}