Sobes.tech
Middle

Πώς λειτουργεί το αντικειμενοστραφές μοντέλο στο 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 βασίζεται στη σύνθεση δομών και στη συμπεριφορά που ορίζεται από διεπαφές, και όχι σε μια κλασική ιεραρχία κληρονομιάς κλάσεων.