Middle
Jak w języku Go realizowane są koncepcje programowania obiektowego (OOP)?
sobes.tech AI
Odpowiedź od AI
W Go nie ma klasycznych koncepcji klas, dziedziczenia i metod wirtualnych, które są powszechne w innych językach (Java, C++). Programowanie obiektowe realizuje się za pomocą:
- Struktury (Structs): Grupują dane (pola).
type Person struct { Name string Age int } - Metody: Funkcje z powiązanym odbiorcą (struktura lub inny typ). Pozwalają na dodanie zachowania do struktur.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Odbiorca przez wartość: Metoda działa na kopii struktury. Zmiany w metodzie nie wpływają na oryginalną strukturę.
- Odbiorca przez wskaźnik: Metoda działa na oryginalnej strukturze przez wskaźnik. Zmiany w metodzie wpływają na oryginalną strukturę.
- Interfejsy: Definiują zestaw sygnatur metod, które musi spełniać typ. Zapewniają polimorfizm "po typowaniu kaczki" (
duck typing). Typ implementuje interfejs niejawnie, jeśli implementuje wszystkie jego metody.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Wbudowywanie (Embedding): Pozwala jednej strukturze "wbudować" inną strukturę lub interfejs. To nie jest dziedziczenie w klasycznym sensie, lecz kompozycja. Wbudowana struktura staje się anonimowym polem, do którego można odwołać się bezpośrednio przez instancję struktury wbudowującej.
type Employee struct { Person // wbudowana struktura ID string } // Employee ma teraz pola Name i Age, a także metodę Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // wywołanie metody Greet() struktury Person przez Employee
| Koncepcja OOP | Implementacja w Go | Uwagi |
|---|---|---|
| Klasy | Struktury | Nie ma jawnego słowa kluczowego class |
| Hermetyzacja | Eksportowane (z wielką literą) / nieeksportowane (z małą literą) pola/metody | Kontrola widoczności na poziomie pakietu |
| Dziedziczenie | Wbudowywanie (Embedding) | Kompozycja zamiast hierarchicznego dziedziczenia |
| Polimorfizm | Interfejsy | Duck typing, niejawna implementacja interfejsów |