Sobes.tech
Middle

Ako funguje objektovo orientovaný model v Go?

sobes.tech AI

Odpoveď od AI

V jazyku Go neexistuje tradičný objektovo orientovaný model s hlbokou hierarchiou dedičnosti tried. Namiesto toho sa používajú:

  • Štruktúry (Structs): Definujú dátové polia, podobne ako triedy bez metód.

    type Person struct {
        Name string
        Age  int
    }
    
  • Metódy: Funkcie viazané na konkrétnu štruktúru. Sú definované oddelene od štruktúry.

    func (p Person) Greet() string {
        return "Ahoj, volám sa " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Metódy s prijímačom hodnoty (napríklad (p Person)) pracujú s kópiou štruktúry.
    • Metódy s prijímačom ukazovateľa (napríklad (p *Person)) pracujú s originálom štruktúry, čo umožňuje meniť jej polia.
  • Rozhrania (Interfaces): Súbory podpisov metód. Typy, ktoré implementujú všetky metódy rozhrania, nevedomky ho spĺňajú. Toto je základ polymorfizmu v Go.

    type Greeter interface {
        Greet() string
    }
    
    // Person nevedomky implementuje Greeter
    
  • Kompózícia (Vkladanie): Namiesto dedičnosti môže jedna štruktúra vkladať inú štruktúru, čím získa prístup k jej poliam a metódam.

    type Employee struct {
        Person // Vkladá štruktúru Person
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    Vložené polia a metódy sú dostupné priamo:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Prístup k poľu Name cez vloženú Person
    fmt.Println(e.Greet())  // Volanie metódy Greet cez vloženú Person
    fmt.Println(e.GetID())  // Volanie metódy Employee
    

Takto je objektovo orientovaný model v Go založený na kompozícii štruktúr a správaní definovanom rozhraniami, nie na klasickej hierarchii dedičnosti tried.