Sobes.tech
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.