Middle+
Võrrelge objektorienteeritud programmeerimise rakendamist Go ja C#-s.
sobes.tech AI
Vastus AI-lt
Go-s ei ole klassikalist objektiivse programmeerimise pärandamise ja klasside mõistet traditsioonilises mõttes. Selle asemel kasutab Go kompositsiooni ja liideseid.
Peamised erinevused:
- Klassid ja objektid: C# põhineb klassidel, millest luuakse objekte. Go kasutab struktuure (structs), millele saab määrata meetodeid.
- Pärandamine: C# toetab ühe- ja mitmepoolset (liideste kaudu) pärandamist. Go toetab kompositsiooni (struktuuride sisestamist) ja polümorfismi liideste kaudu.
- Liideseid: C#-s peavad liidesed olema klassi poolt selgelt rakendatud. Go-s rakendatakse liideseid mittevaikimisi: kui struktuuril on sobivad meetodid, rakendab see automaatselt selle liidese.
- Nähtavus (Access Modifiers): C#-s kasutatakse
public,private,protected,internal. Go-s määrab nähtavuse esimese tähe suurus: suur täht - avalik, väike täht - privaatne (paketi piires). - Genereerimine: C#-l on arenenud generikate süsteem. Alates versioonist 1.18 on Go-l toetatud generikad.
Näide kompositsioonist Go-s:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s mootor käivitus!\n", e.Type)
}
type Car struct {
Model string
Engine // anonüümne sisestus - kompositsioon
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Bensiin",
},
}
fmt.Printf("Auto mudel: %s\n", myCar.Model)
myCar.Start() // kutsuda sisestatud struktuuri meetod
}
Liidese rakendamise näide Go-s:
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 "Miau!"
}
func main() {
animals := []Speaker{Dog{}, Cat{}}
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
Tabelis:
| Omadus | Go | C# |
|---|---|---|
| Klassid | Ei (struktuurid) | Jah |
| Objektid | Struktuuride näited | Klasside näited |
| Pärandamine | Kompositsioon, liidesed | Klassikaline (ühekordne), liidesed |
| Liidesed | Kaudne rakendamine | Otsene rakendamine |
| Nähtavus | Esimese tähe suurus | public, private, protected, jms. |
| Genereerimine | Alates versioonist 1.18 | Jah |
Go lähenemine OOP-ile on rohkem decentraliseeritud ja keskendub käitumisele (liideste kaudu) ning andmestruktuurile (sisestamise kaudu), mis sageli viib paindlikuma ja kergemini testitava koodini. C# järgib traditsioonilisemat ja hierarhilisemat mudelit.