Junior — Middle
Jakie metody można zastosować do realizacji podobnej funkcjonalności bez użycia dziedziczenia w strukturach danych?
sobes.tech AI
Odpowiedź od AI
Zamiast dziedziczenia w strukturach danych można użyć kompozycji i protokołów (interfejsów). Na przykład w Swift często stosuje się protokoły do opisu zachowania, a konkretne struktury implementują te protokoły, co pozwala uniknąć sztywnej hierarchii dziedziczenia.
Możesz także użyć wzorca delegowania, gdy jedna struktura zawiera odwołanie do innej, która implementuje potrzebną funkcjonalność.
Przykład w Swift z użyciem protokołu i kompozycji:
protocol Drawable {
func draw()
}
struct Circle: Drawable {
func draw() {
print("Rysujemy koło")
}
}
struct Square: Drawable {
func draw() {
print("Rysujemy kwadrat")
}
}
struct Canvas {
var shape: Drawable
func render() {
shape.draw()
}
}
let circle = Circle()
let canvas = Canvas(shape: circle)
canvas.render() // Wyświetli: Rysujemy koło
W ten sposób funkcjonalność jest realizowana przez kompozycję i protokoły, a nie przez dziedziczenie.