Sobes.tech
Junior — Middle

როგორ შეიძლება განხორციელდეს მსგავსი ფუნქციონალი მონაცემთა სტრუქტურებში მემკვიდრეობის გამოყენების გარეშე?

sobes.tech AI

პასუხი AI-სგან

მონაცემთა სტრუქტურებში მემკვიდრეობის ნაცვლად შეიძლება გამოყენებულ იქნას კომპოზიცია და პროტოკოლები (ინტერფეისები). მაგალითად, Swift-ში ხშირად გამოიყენება პროტოკოლები ქცევის აღწერისთვის, ხოლო კონკრეტული სტრუქტურები ამ პროტოკოლებს ახორციელებს, რაც საშუალებას აძლევს თავიდან აიცილოს მტკიცე მემკვიდრეობის ჰიეარარქია.

ასევე, შეიძლება გამოიყენოთ დელეგირების ნიმუში, როდესაც ერთი სტრუქტურა შეიცავს სხვა სტრუქტურის მითითებას, რომელიც ახორციელებს საჭირო ფუნქციონალს.

მაგალითი Swift-ში პროტოკოლსა და კომპოზიციას გამოყენებით:

protocol Drawable {
    func draw()
}

struct Circle: Drawable {
    func draw() {
        print("ხაზავთ წრეზე")
    }
}

struct Square: Drawable {
    func draw() {
        print("ხაზავთ კვადრატზე")
    }
}

struct Canvas {
    var shape: Drawable
    func render() {
        shape.draw()
    }
}

let circle = Circle()
let canvas = Canvas(shape: circle)
canvas.render()  // გამოიტანს: ხაზავთ წრეზე

ამ გზით, ფუნქციონალობა რეალიზებულია კომპოზიციასა და პროტოკოლების მეშვეობით, არა მემკვიდრეობით.