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()  // Արդյունք՝ Նկարում ենք շրջան

Այս կերպ, ֆունկցիոնալությունը իրականացնում է կոմպոզիցիա և պրոտոկոլներ, ոչ թե ժառանգություն: