Middle+
Comparez l'implémentation de la programmation orientée objet en Go et C#.
sobes.tech IA
Réponse de l'IA
En Go, il n'y a pas d'héritage orienté objet classique ni de classes au sens traditionnel. À la place, Go utilise la composition et les interfaces.
Principales différences:
- Classes et objets : C# est basé sur des classes, à partir desquelles on crée des objets. Go utilise des structures (structs), qui peuvent avoir des méthodes.
- Héritage : C# supporte l'héritage simple et multiple (via interfaces). Go supporte la composition (inclusion de structures) et le polymorphisme via les interfaces.
- Interfaces : En C#, les interfaces doivent être implémentées explicitement par la classe. En Go, les interfaces sont implémentées implicitement : si une structure possède des méthodes correspondant à la signature de l'interface, elle l'implémente automatiquement.
- Visibilité (Modificateurs d'accès) : En C#, on utilise
public,private,protected,internal. En Go, la visibilité est déterminée par la première lettre du nom : majuscule, public ; minuscule, privé (dans le paquet). - Génériques : C# dispose d'un système avancé de génériques. Go a ajouté le support des génériques à partir de la version 1.18.
Exemple de composition en Go:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s engine started!\n", e.Type)
}
type Car struct {
Model string
Engine // Inclusion anonyme - composition
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Petrol",
},
}
fmt.Printf("Car model: %s\n", myCar.Model)
myCar.Start() // Appel de la méthode de la structure intégrée
}
Exemple d'implémentation d'une interface en 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{}} // Slice de types implémentant l'interface Speaker
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
Dans le tableau:
| Caractéristique | Go | C# |
|---|---|---|
| Classes | Non (structures) | Oui |
| Objets | Instances de structures | Instances de classes |
| Héritage | Composition, interfaces | Héritage classique (simple), interfaces |
| Interfaces | Implémentation implicite | Implémentation explicite |
| Visibilité | Première lettre en majuscule | public, private, protected, etc. |
| Génériques | Depuis la version 1.18 | Oui |
L'approche de Go pour la POO est plus décentralisée et axée sur le comportement (via interfaces) et la structure de données (via l'inclusion), ce qui conduit souvent à un code plus flexible et plus facile à tester. C# suit un modèle plus traditionnel et hiérarchique.