Sobes.tech
Middle

Kako su koncepti objektno-orijentisanog programiranja (OOP) implementirani u jeziku Go?

sobes.tech АИ

Одговор од АИ

U Go nema klasične koncepte klasa, nasleđivanja i virtuelnih metoda koje su karakteristične za druge jezike (Java, C++). Objektno-orijentisano programiranje se realizuje putem:

  • Strukture (Structs): Kombinuju podatke (polja).
    type Person struct {
    	Name string
    	Age  int
    }
    
  • Metode: Funkcije sa povezanim primaocem (struktura ili drugi tip). Omogućavaju strukturama da imaju ponašanje.
    func (p Person) Greet() string {
    	return "Hello, my name is " + p.Name
    }
    
    • Primaoc po vrednosti: Metod radi sa kopijom strukture. Promene unutar metode ne utiču na originalnu strukturu.
    • Primaoc po pokazivaču: Metod radi sa originalnom strukturom putem pokazivača. Promene unutar metode utiču na originalnu strukturu.
  • Interfejsi (Interfaces): Definišu skup potpisa metoda kojima mora odgovarati tip. Obezbeđuju polimorfizam "po patku" (duck typing). Tip implicitno implementira interfejs ako implementira sve njegove metode.
    type Greeter interface {
    	Greet() string
    }
    
    func SayHello(g Greeter) string {
    	return g.Greet()
    }
    
  • Ugrađivanje (Embedding): Omogućava jednoj strukturi da "ugrađuje" drugu strukturu ili interfejs. To nije nasleđivanje u klasičnom smislu, već kompozicija. Ugrađena struktura postaje anonimno polje, a na njena polja i metode može se direktno obraćati putem instance ugrađujuće strukture.
    type Employee struct {
    	Person // ugrađena struktura Person
    	ID string
    }
    
    // Employee sada ima polja Name i Age, kao i metod Greet()
    
    e := Employee{
    	Person: Person{Name: "Alice", Age: 30},
    	ID:     "E123",
    }
    fmt.Println(e.Greet()) // poziv metode Greet() strukture Person putem Employee
    
Koncept OO Implementacija u Go Napomene
Klase Strukture Nema jasnu ključnu reč class
Inkapsulacija Eksportabilne (sa velikim slovom) / Nekexportabilne (sa malim slovom) polja/metode Upravljanje vidljivošću na nivou paketa
Nasleđivanje Ugrađivanje (Embedding) Kompozicija umesto hijerarhijskog nasleđivanja
Polimorfizam Interfejsi Duck typing, nejasna implementacija interfejsa