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 |