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()  // Θα εμφανίσει: Ζωγραφίζουμε έναν κύκλο

Έτσι, η λειτουργικότητα υλοποιείται μέσω σύνθεσης και πρωτοκόλλων, και όχι μέσω κληρονομικότητας.