Πώς λειτουργεί το αντικειμενοστραφές μοντέλο στο Go;
sobes.tech AI
Απάντηση από AI
Στο Go δεν υπάρχει το παραδοσιακό μοντέλο αντικειμενοστραφούς προγραμματισμού με βαθιά ιεραρχία κληρονομιάς κλάσεων. Αντ' αυτού, χρησιμοποιούνται:
-
Δομές (Structs): Ορίζουν πεδία δεδομένων, παρόμοια με κλάσεις χωρίς μεθόδους.
type Person struct { Name string Age int } -
Μέθοδοι: Συναρτήσεις που συνδέονται με μια συγκεκριμένη δομή. Ορίζονται ξεχωριστά από τη δομή.
func (p Person) Greet() string { return "Γειά σου, το όνομά μου είναι " + p.Name } func (p *Person) CelebrateBirthday() { p.Age++ }- Οι μέθοδοι με δεκτή τιμή (π.χ.,
(p Person)) εργάζονται με ένα αντίγραφο της δομής. - Οι μέθοδοι με δεκτή δείκτη (π.χ.,
(p *Person)) εργάζονται με το πρωτότυπο της δομής, επιτρέποντας την τροποποίησή της.
- Οι μέθοδοι με δεκτή τιμή (π.χ.,
-
Διεπαφές (Interfaces): Σύνολα υπογραφών μεθόδων. Τύποι που υλοποιούν όλες τις μεθόδους μιας διεπαφής, ικανοποιούν έμμεσα αυτήν τη διεπαφή. Αυτό είναι η βάση του πολυμορφισμού στο Go.
type Greeter interface { Greet() string } // Το Person υλοποιεί έμμεσα το Greeter -
Σύνθεση (Ενσωμάτωση): Αντί για κληρονομικότητα, μια δομή μπορεί να ενσωματώσει μια άλλη δομή, αποκτώντας πρόσβαση στα πεδία και τις μεθόδους της.
type Employee struct { Person // Ενσωματώνει τη δομή Person ID string } func (e Employee) GetID() string { return e.ID }Τα ενσωματωμένα πεδία και μέθοδοι είναι άμεσα διαθέσιμα:
e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Name) // Πρόσβαση στο πεδίο Name μέσω της ενσωματωμένης Person fmt.Println(e.Greet()) // Κλήση της μεθόδου Greet μέσω της ενσωματωμένης Person fmt.Println(e.GetID()) // Κλήση της μεθόδου Employee
Έτσι, το αντικειμενοστραφές μοντέλο στο Go βασίζεται στη σύνθεση δομών και στη συμπεριφορά που ορίζεται από διεπαφές, και όχι σε μια κλασική ιεραρχία κληρονομιάς κλάσεων.