Maison > développement back-end > Golang > le corps du texte

Composition sur héritage dans Go

Mary-Kate Olsen
Libérer: 2024-10-30 12:24:02
original
366 Les gens l'ont consulté

Composition Over Inheritance in Go

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.

Pourquoi Go préfère la composition

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.

Composition en action

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.

Exemple : Comportements des travailleurs dans Go

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")
}
Copier après la connexion

Ici :

  • L'ingénieur et le gestionnaire intègrent Payable, leur donnant un salaire.
  • Manager intègre également Manageable, leur donnant des capacités de gestion d'équipe.
  • Chaque type implémente Work() individuellement, satisfaisant l'interface Worker.

Avantages de la composition

  • Simplicité : chaque comportement est encapsulé dans sa structure, ce qui facilite son extension.
  • Flexibilité : de nouveaux types ou comportements peuvent être ajoutés sans casser le code existant.
  • Réutilisabilité : les comportements sont modulaires, nous pouvons donc facilement les combiner de différentes manières.

Utiliser des interfaces avec la composition

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)
}
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!