Middle
Ako sú v jazyku Go realizované koncepty objektovo orientovaného programovania (OOP)?
sobes.tech AI
Odpoveď od AI
V Go chýbajú klasické koncepty tried, dedičstva a virtuálnych metód, ktoré sú charakteristické pre iné jazyky (Java, C++). Objektovo orientované programovanie je realizované cez:
- Štruktúry (Structs): Zoskupujú údaje (polia).
type Person struct { Name string Age int } - Metódy: Funkcie s asociovaným príjemcom (štruktúrou alebo iným typom). Umožňujú štruktúram mať správanie.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Príjemca podľa hodnoty: Metóda pracuje s kópiou štruktúry. Zmeny vnútri metódy neovplyvňujú originálnu štruktúru.
- Príjemca podľa ukazovateľa: Metóda pracuje s originálnou štruktúrou cez ukazovateľ. Zmeny vnútri metódy ovplyvňujú originálnu štruktúru.
- Rozhrania (Interfaces): Definujú súbor signatúr metód, ktorým musí zodpovedať typ. Zabezpečujú polymorfizmus "podľa kačice" (
duck typing). Typ implicitne implementuje rozhranie, ak implementuje všetky jeho metódy.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Vloženie (Embedding): Umožňuje jednej štruktúre "vložiť" inú štruktúru alebo rozhranie. Nie je to dedičstvo v klasickom zmysle, skôr kompozícia. Vložená štruktúra sa stáva anonymným poľom, ku ktorému sa dá priamo odkazovať cez inštanciu vkladajúcej štruktúry.
type Employee struct { Person // vložená štruktúra Person ID string } // Employee teraz má polia Name a Age, ako aj metódu Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // volanie metódy Greet() štruktúry Person cez Employee
| Koncepcia OO | Implementácia v Go | Poznámky |
|---|---|---|
| Triedy | Štruktúry | Nie je jasné kľúčové slovo class |
| Zapuzdrovanie | Exportovateľné (s veľkým písmenom) / Neexportovateľné (s malým písmenom) polia/metódy | Riadenie viditeľnosti na úrovni balíka |
| Dedičstvo | Vloženie (Embedding) | Kompozícia namiesto hierarchického dedičstva |
| Polymorfizmus | Rozhrania | Duck typing, nejasná implementácia rozhraní |