Sobes.tech
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, άτυπη υλοποίηση διεπαφών