Middle+
Porovnajte implementáciu objektovo orientovaného programovania v Go a C#.
sobes.tech AI
Odpoveď od AI
V Go neexistuje klasické objektovo orientované dedičstvo a triedy v tradičnom zmysle. Namiesto toho Go používa kompozíciu a rozhrania.
Hlavné rozdiely:
- Triedy a objekty: C# je založený na triedach, z ktorých sa vytvárajú objekty. Go používa štruktúry (structs), ktoré môžu mať metódy.
- Dedičstvo: C# podporuje jednoduché a viacnásobné (cez rozhrania) dedičstvo. Go podporuje kompozíciu (vkladanie štruktúr) a polymorfizmus cez rozhrania.
- Rozhrania: V C# musia byť rozhrania explicitne implementované triedou. V Go sú rozhrania implementované neexplicitne: ak štruktúra má metódy zodpovedajúce signatúre rozhrania, automaticky ho implementuje.
- Viditeľnosť (Access Modifiers): V C# sa používajú
public,private,protected,internal. V Go je viditeľnosť určená veľkosťou prvého písmena názvu: veľké písmeno - verejné, malé písmeno - súkromné (v rámci balíka). - Generiká: C# má rozvinutý systém generík. Go pridalo podporu generík od verzie 1.18.
Príklad kompozície v Go:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s motor štartoval!\n", e.Type)
}
type Car struct {
Model string
Engine // anonymné vkladanie - kompozícia
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Benzín",
},
}
fmt.Printf("Model auta: %s\n", myCar.Model)
myCar.Start() // volanie metódy vnútornej štruktúry
}
Príklad implementácie rozhrania v Go:
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "Vau!"
}
type Cat struct{}
func (c Cat) Speak() string {
return "Mňau!"
}
func main() {
animals := []Speaker{Dog{}, Cat{}} // zoznam typov implementujúcich rozhranie Speaker
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
V tabuľke:
| Prvok | Go | C# |
|---|---|---|
| Triedy | Nie (štruktúry) | Áno |
| Objekty | Inštancie štruktúr | Inštancie tried |
| Dedičstvo | Kompozícia, rozhrania | Klasické (jednoduché), rozhrania |
| Rozhrania | Nepriame implementácie | Priame implementácie |
| Viditeľnosť | Veľkosť prvého písmena | public, private, protected, atď. |
| Generiká | Od verzie 1.18 | Áno |
Prístup k OOP v Go je viac decentralizovaný a zameraný na správanie (cez rozhrania) a dátové štruktúry (cez vkladanie), čo často vedie k flexibilnejšiemu a ľahšie testovateľnému kódu. C# sa drží tradičnejšieho a hierarchického modelu.