Junior — Middle
Quali metodi possono essere utilizzati per implementare una funzionalità simile senza usare l'ereditarietà nelle strutture dati?
sobes.tech AI
Risposta dell'AI
Invece di ereditarietà nelle strutture dati, si può usare composizione e protocolli (interfacce). Ad esempio, in Swift, si usano spesso protocolli per descrivere comportamenti, e le strutture concrete implementano questi protocolli, evitando così una gerarchia di ereditarietà rigida.
Puoi anche usare il pattern di delega, in cui una struttura contiene un riferimento a un'altra che implementa la funzionalità necessaria.
Esempio in Swift con uso di protocollo e composizione:
protocol Drawable {
func draw()
}
struct Circle: Drawable {
func draw() {
print("Disegna un cerchio")
}
}
struct Square: Drawable {
func draw() {
print("Disegna un quadrato")
}
}
struct Canvas {
var shape: Drawable
func render() {
shape.draw()
}
}
let circle = Circle()
let canvas = Canvas(shape: circle)
canvas.render() // Mostrerà: Disegna un cerchio
In questo modo, la funzionalità viene implementata tramite composizione e protocolli, anziché tramite ereditarietà.