Lors de la conception de logiciels, le principe de « composition sur héritage » conduit souvent à un code plus flexible et maintenable. Go, avec son approche unique de la conception orientée objet, s'appuie fortement sur la composition plutôt que sur l'héritage. Voyons pourquoi.
Dans les langages POO traditionnels, l'héritage permet à une classe d'hériter des comportements et des propriétés d'une autre, mais cela peut conduire à des hiérarchies rigides et difficiles à modifier. Go évite complètement l'héritage et encourage à la place la composition, où les types sont construits en combinant des composants plus petits et ciblés.
Imaginez que nous modélisons une entreprise avec différents types de travailleurs : certains sont des ingénieurs, d'autres des managers et d'autres encore des stagiaires. Au lieu de créer une hiérarchie de classes complexe, nous définirons des comportements spécifiques en tant que types indépendants, puis les composerons.
package main import "fmt" type Worker interface { Work() } type Payable struct { Salary int } func (p Payable) GetSalary() int { return p.Salary } type Manageable struct{} func (m Manageable) Manage() { fmt.Println("Managing team") } type Engineer struct { Payable } func (e Engineer) Work() { fmt.Println("Engineering work being done") } type Manager struct { Payable Manageable } func (m Manager) Work() { fmt.Println("Managerial work being done") }
Ici :
Dans Go, les interfaces et la composition fonctionnent ensemble pour permettre le polymorphisme sans héritage. Voici comment nous pouvons gérer plusieurs types de travailleurs avec une seule fonction :
func DescribeWorker(w Worker) { w.Work() } func main() { engineer := Engineer{Payable{Salary: 80000}} manager := Manager{Payable{Salary: 100000}, Manageable{}} DescribeWorker(engineer) DescribeWorker(manager) }
La préférence de Go pour la composition plutôt que pour l'héritage n'est pas seulement une bizarrerie du langage : elle encourage un code plus propre, plus modulaire et adaptable au changement. Au lieu de hiérarchies rigides, vous obtenez des composants flexibles et réutilisables qui maintiennent votre base de code agile et facile à maintenir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!