Sobes.tech
Junior

Программалоодо класстардын курамы жөнүндө эмне билесиз?

sobes.tech AI

AIден жооп

Композиция — бул "камтылуу" же "бүтүндүн бөлүгү" деген мамиле, анда бир класс (композит) башка класска (компонентке) же анын үлгүлөрүнө шилтеме камтыйт. Компоненттин жашоо цикли адатта композиттин жашоо циклине тыгыз байланыштуу. Бул күчтүү байланыш, анда компонент композитсиз жашай албайт.

Композициянын артыкчылыктары:

  • Ийкемдүүлүк: Компоненттерди өзгөртүп, жүрүм-турумду оңой өзгөртүүгө болот.
  • Кыска байланыштуулук: Класстар бири-бине аз көзкаранды, мураска салыштырмалуу.
  • Кайталап колдонуу: Бирдей компоненттерди ар кандай композиттерде колдонсо болот.

Мисал: Автомобиль классы Мотор классына шилтеме камтышы мүмкүн. Эгер Автомобиль жок кылынса, анда бул контекстте Мотор да жок болот.

class Мотор {
    // мотордун касиеттери жана ыкмалары
}

class Автомобиль {
    private Мотор мотор; // композиция

    public Автомобиль() {
        this.мотор = new Мотор(); // компонентти түзүү композиттин ичинде
    }

    // башка касиеттери жана ыкмалары
}

Аггрегациядан айырмасы: Аггрегацияда компоненттер композиттен көзкаранды эмес болушу мүмкүн (слабая байланыш). Мисал: Университет классы Студент классынын үлгүлөрүнө шилтеме камтышы мүмкүн. Студенттер университеттен тышкары да болушу мүмкүн.

Android өнүктүрүүдө композиция активдүү колдонулат, мисалы, ViewGroup View камтышы, Dagger/Hilt аркылуу көзкарандылыктарды башкаруу. Бул көп мураска салыштырмалуу артыкчылыкка ээ (Java/Kotlin үчүн класс үчүн көп мурас жок) жана көбүнчө жалгыз мураска караганда ийкемдүү.

class UserRepository(private val apiService: ApiService) {
    // UserRepository "пайдаланат" ApiService (композиция/агрегация)
    fun fetchUser(userId: String) {
        // apiService.getUser(userId)
    }
}