Sobes.tech
Junior — Middle

Таврии асосии фарқиятҳо байни истифодаи мерос ва ворид кардани компонентҳо дар барномасозии объектӣ-равона чӣҳоянд?

sobes.tech AI

Ҷавоб аз AI

Асосӣ фарқиятҳо байни меросгирӣ ва ворид кардани компонентҳо (композиция) дар барномасозии объектӣ-ҳуқуқӣ:

  • Меросгирӣ — механизмие, ки дар он як синф (подсинф) хусусиятҳо ва усулҳои синфи дигар (синфи падар) мегирад. Ин имкон медиҳад, ки ҳиерархияҳо эҷод ва коди такроршаванда истифода шавад. Аммо, меросгирӣ пайванди қавӣ байни синфҳоро эҷод мекунад ва метавонад ба сохтори сахт оварда расонад.

  • Ворид кардани компонентҳо (композиция) — вақте ки объект ба дигар объектҳо ишораҳо дорад ва функсионалияти онҳоро истифода мебарад. Ба ҷои меросгирӣ, объект вазифаҳоро ба компонентҳо месупорад. Ин муносибати бештар флексибл ва имкон медиҳад, ки дар вақти иҷрои тағирот ворид шавад ва пайвандиҳоро кам кунад.

Масалан:

// Меросгирӣ (дар Go тавассути ворид кардан амалӣ мешавад)
type Animal struct {
    Name string
}
func (a Animal) Speak() string {
    return "..."
}

type Dog struct {
    Animal // ворид кардан
}
func (d Dog) Speak() string {
    return "Ву!"
}

// Композиция
ntype Speaker interface {
    Speak() string
}

type Dog struct {
    speaker Speaker
}
func (d Dog) Speak() string {
    return d.speaker.Speak()
}

Хулоса, меросгирӣ барои ифодаи муносибатҳои "ҳаст" (is-a) беҳтар аст, дар ҳоле ки композиция барои муносибатҳои "дорост" (has-a) истифода мешавад, ва бештар флексиблӣ ва модулӣ медиҳад.