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() // Ман наметавонам парвоз кунам

Бо ин роҳ, композиция бештар флексиблӣ медиҳад ва нигоҳдории коди осонтар мешавад.