Middle+
Palyginkite objektinio programavimo įgyvendinimą Go ir C#.
sobes.tech AI
Atsakymas iš AI
Go neturi klasikinės objektinio programavimo paveldėjimo ir klasių sampratos tradiciniu būdu. Vietoj to, Go naudoja kompoziciją ir sąsajas.
Pagrindiniai skirtumai:
- Klasės ir objektai: C# remiasi klasėmis, iš kurių kuriami objektai. Go naudoja struktūras (structs), kurios gali turėti metodus.
- Paveldėjimas: C# palaiko viengubo ir daugybinio (per sąsajas) paveldėjimą. Go palaiko kompoziciją (struktūrų įterpimą) ir polimorfizmą per sąsajas.
- Sąsajos: C# sąsajos turi būti aiškiai įgyvendintos klasės. Go sąsajos įgyvendinamos neaiškiai: jei struktūra turi metodus, atitinkančius sąsajos parašą, ji automatiškai ją įgyvendina.
- Matomumas (Access Modifiers): C# naudoja
public,private,protected,internal. Go matomumas nustatomas pagal pirmojo vardo raidės didumą: didžioji raidė - vieša, mažoji - privači (pakuotės ribose). - Geriniai (Generics): C# turi išplėtotą generikų sistemą. Nuo versijos 1.18, Go pridėjo generikų palaikymą.
Pavyzdys su kompozicija Go:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s variklis įjungtas!\n", e.Type)
}
type Car struct {
Model string
Engine // anoniminė įterpimas - kompozicija
}
func main() {
myCar := Car{
Model: "Sedanas",
Engine: Engine{
Type: "Benzinas",
},
}
fmt.Printf("Automobilio modelis: %s\n", myCar.Model)
myCar.Start() // iškvietimas įterptos struktūros metodo
}
Pavyzdys sąsajos įgyvendinimo Go:
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "Au!"
}
type Cat struct{}
func (c Cat) Speak() string {
return "Miau!"
}
func main() {
animals := []Speaker{Dog{}, Cat{}}
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
Lentelėje:
| Bruožas | Go | C# |
|---|---|---|
| Klasės | Nėra (struktūros) | Taip |
| Objektai | Struktūrų pavyzdžiai | Klasės pavyzdžiai |
| Paveldėjimas | Kompozicija, sąsajos | Tradicinis (viengubas), sąsajos |
| Sąsajos | Neaiški įgyvendinimas | Aiški įgyvendinimas |
| Matomumas | Pirmojo raidės didumas | public, private, protected, ir kt. |
| Geriniai | Nuo 1.18 versijos | Taip |
Go požiūris į OOP yra labiau decentralizuotas ir sutelktas į elgesį (per sąsajas) ir duomenų struktūrą (per įterpimą), kas dažnai lemia lankstesnį ir lengviau testuojamą kodą. C# laikosi tradicinės ir hierarchinės modelio.