Middle+
Compara implementarea programării orientate pe obiect în Go și C#.
sobes.tech AI
Răspuns de la AI
În Go nu există moștenire orientată pe obiecte clasică și nici clase în sensul tradițional. În schimb, Go folosește compoziție și interfețe.
Principalele diferențe:
- Clase și obiecte: C# se bazează pe clase, din care se creează obiecte. Go folosește structuri (structs), care pot avea metode.
- Moștenire: C# suportă moștenire simplă și multiplă (prin interfețe). Go suportă compoziție (încorporarea structurilor) și polimorfism prin interfețe.
- Interfețe: În C#, interfețele trebuie implementate explicit de către clasă. În Go, interfețele sunt implementate implicit: dacă o structură are metode care corespund semnăturii interfeței, o implementează automat.
- Vizibilitate (Modificatori de acces): În C# se folosesc
public,private,protected,internal. În Go, vizibilitatea este determinată de prima literă a numelui: majusculă, public; minusculă, privat (în cadrul pachetului). - Generice: C# are un sistem avansat de generice. Go a adăugat suport pentru generice începând cu versiunea 1.18.
Exemplu de compoziție în Go:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s motor pornit!\n", e.Type)
}
type Car struct {
Model string
Engine // Încorporare anonimă - compoziție
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Benzină",
},
}
fmt.Printf("Modelul mașinii: %s\n", myCar.Model)
myCar.Start() // Apelarea metodei structurii încorporate
}
Exemplu de implementare a unei interfețe în Go:
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "Woof!"
}
type Cat struct{}
func (c Cat) Speak() string {
return "Meow!"
}
func main() {
animals := []Speaker{Dog{}, Cat{}} // Lista de tipuri care implementează interfața Speaker
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
În tabel:
| Caracteristică | Go | C# |
|---|---|---|
| Clase | Nu (structuri) | Da |
| Obiecte | Instanțe de structuri | Instanțe de clase |
| Moștenire | Compoziție, interfețe | Clasic (simplu), interfețe |
| Interfețe | Implementare implicită | Implementare explicită |
| Vizibilitate | Prima literă majusculă | public, private, protected, etc. |
| Generice | Din versiunea 1.18 | Da |
Abordarea Go pentru OOP este mai descentralizată și axată pe comportament (prin interfețe) și structură de date (prin încorporare), ceea ce duce adesea la cod mai flexibil și mai ușor de testat. C# urmează un model mai tradițional și ierarhic.