Sobes.tech
Middle

Kako je organizovan objekto-orijentisani model u Go?

sobes.tech АИ

Одговор од АИ

U Go ne postoji tradicionalni objektno-orijentisani model sa dubokom hijerarhijom nasleđivanja klasa. Umesto toga, koriste se:

  • Strukture (Structs): Definišu polja podataka, slično klasama bez metoda.

    type Person struct {
        Name string
        Age  int
    }
    
  • Metode: Funkcije povezane sa određenom strukturom. Definišu se odvojeno od strukture.

    func (p Person) Greet() string {
        return "Zdravo, moje ime je " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Metode sa prijemnikom po vrednosti (npr., (p Person)) rade sa kopijom strukture.
    • Metode sa prijemnikom po pokazivaču (npr., (p *Person)) rade sa originalom strukture, omogućavajući izmene njenih polja.
  • Interfejsi (Interfaces): Skupovi potpisa metoda. Tipovi koji implementiraju sve metode interfejsa implicitno ga ispunjavaju. Ovo je osnova polimorfizma u Go.

    type Greeter interface {
        Greet() string
    }
    
    // Person implicitno implementira Greeter
    
  • Kompozicija (Ugrađivanje): Umesto nasleđivanja, jedna struktura može da ugrađuje drugu strukturu, dobijajući pristup njenim poljima i metodama.

    type Employee struct {
        Person // Ugrađuje strukturu Person
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    Ugrađena polja i metode su dostupne direktno:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Pristup polju Name putem ugrađene Person
    fmt.Println(e.Greet())  // Pozivanje metode Greet putem ugrađene Person
    fmt.Println(e.GetID())  // Pozivanje metode Employee
    

Na ovaj način, objektno-orijentisani model u Go zasniva se na kompoziciji struktura i ponašanju definisanom putem interfejsa, a ne na klasičnoj hijerarhiji nasleđivanja klasa.