Middle
Πώς υλοποιούνται οι έννοιες του αντικειμενοστραφούς προγραμματισμού (OOP) στη γλώσσα Go;
sobes.tech AI
Απάντηση από AI
Στο Go, δεν υπάρχουν οι κλασικές έννοιες των κλάσεων, κληρονομικότητας και εικονικών μεθόδων που είναι κοινές σε άλλες γλώσσες (Java, C++). Ο αντικειμενοστραφής προγραμματισμός υλοποιείται μέσω:
- Δομές (Structs): Ομαδοποιούν δεδομένα (πεδία).
type Person struct { Name string Age int } - Μέθοδοι: Συναρτήσεις με έναν συσχετισμένο δεκτή (δομή ή άλλο τύπο). Επιτρέπουν στις δομές να έχουν συμπεριφορά.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Δέκτης τιμής: Η μέθοδος λειτουργεί με ένα αντίγραφο της δομής. Οι αλλαγές μέσα στη μέθοδο δεν επηρεάζουν την αρχική δομή.
- Δέκτης δείκτη: Η μέθοδος λειτουργεί με την αρχική δομή μέσω δείκτη. Οι αλλαγές μέσα στη μέθοδο επηρεάζουν την αρχική δομή.
- Διεπαφές (Interfaces): Ορίζουν ένα σύνολο υπογραφών μεθόδων που πρέπει να υλοποιεί ένας τύπος. Παρέχουν πολυμορφισμό "με βάση το παπάκι" (
duck typing). Ένας τύπος υλοποιεί έμμεσα μια διεπαφή αν υλοποιεί όλες τις μεθόδους της.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Ενσωμάτωση (Embedding): Επιτρέπει σε μια δομή να "ενσωματώνει" μια άλλη δομή ή διεπαφή. Αυτό δεν είναι κληρονομικότητα με την κλασική έννοια, αλλά περισσότερο σύνθεση. Η ενσωματωμένη δομή γίνεται ανώνυμο πεδίο, και τα πεδία και οι μέθοδοι της μπορούν να προσπελαστούν άμεσα μέσω του παραδείγματος της δομής που την ενσωματώνει.
type Employee struct { Person // ενσωματωμένη δομή ID string } // Το Employee τώρα έχει τα πεδία Name και Age, καθώς και τη μέθοδο Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // Κλήση της μεθόδου Greet() της Person μέσω του Employee
| Έννοια ΟΠ | Υλοποίηση στο Go | Σημειώσεις |
|---|---|---|
| Κλάσεις | Δομές | Δεν υπάρχει ρητή λέξη-κλειδί class |
| Ενθυλάκωση | Εκτεταμένα (με κεφαλαίο γράμμα) / μη-εκτεταμένα (με μικρό γράμμα) πεδία/μέθοδοι | Έλεγχος ορατότητας σε επίπεδο πακέτου |
| Κληρονομικότητα | Ενσωμάτωση (Embedding) | Σύνθεση αντί για ιεραρχική κληρονομικότητα |
| Πολυμορφισμός | Διεπαφές | Duck typing, άτυπη υλοποίηση διεπαφών |