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() // გამოიტანს: ხაზავთ წრეზე
ამ გზით, ფუნქციონალობა რეალიზებულია კომპოზიციასა და პროტოკოლების მეშვეობით, არა მემკვიდრეობით.