Sobes.tech
Junior — Middle

Жүйелерді жобалау кезінде мұрагерлік немесе композицияны қолдануға бейімсіз бе?

sobes.tech AI

AI-дан жауап

Жүйелерді жобалау кезінде әдетте мұрагерліктен гөрі композицияға басымдық беріледі.

Неге?

  • Мұрагерлік қатты иерархияны құрайды, ол өзгерістер мен кодтың күрделенуіне әкелуі мүмкін.
  • Композиция компоненттерден объектілер құруға мүмкіндік береді, бұл жүйені икемді әрі кеңейтілетін етеді.

Мысалы, "Құстар" класын құрып, оған "ҰшатынҚұс" және "ЖүгіретінҚұс" сияқты мұрагерлік жасау орнына, "Құс" класын құрып, оған ұшу, жүгіру сияқты мінез-құлық объектілерін қосуға болады. Осылайша, мінез-құлықты динамикалық түрде өзгертуге болады, иерархияны өзгерту қажет емес.

iOS-та жиі протоколдар мен делегаттар пайдаланылады, бұл композицияның бір түрі.

Swift тілінде мысал:

protocol Flyable {
    func fly()
}

class Bird {
    var flyingAbility: Flyable?
    func performFly() {
        flyingAbility?.fly()
    }
}

class CanFly: Flyable {
    func fly() {
        print("Мен ұша аламын")
    }
}

class CannotFly: Flyable {
    func fly() {
        print("Мен ұша алмаймын")
    }
}

let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Мен ұша аламын

let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Мен ұша алмаймын

Осылайша, композиция үлкен икемділік береді және кодты қолдауды жеңілдетеді.