Maison  >  Article  >  développement back-end  >  Comment implémenter « l'héritage » en utilisant la composition dans Golang

Comment implémenter « l'héritage » en utilisant la composition dans Golang

PHPz
PHPzoriginal
2023-04-06 08:54:38688parcourir

Golang est un langage de programmation puissant et populaire qui possède de nombreuses fonctionnalités uniques, dont l'une est la mise en œuvre de la programmation orientée objet par composition plutôt que par héritage. Bien que Golang ne fournisse pas de méthode d'héritage direct, nous pouvons toujours obtenir des effets de type héritage grâce à la composition.

Dans cet article, nous présenterons comment utiliser la composition dans Golang pour implémenter « l'héritage ».

Qu'est-ce que la programmation orientée objet ?

Avant de commencer à présenter comment la programmation orientée objet est implémentée, nous devons d'abord comprendre ce qu'est la programmation orientée objet. En termes simples, la programmation orientée objet est un paradigme de programmation. Son idée principale est de traiter les objets du programme comme des entités indépendantes et de combiner leurs données et leurs comportements pour obtenir plus de flexibilité et de fiabilité.

Les idées principales de la programmation orientée objet peuvent être simplement résumées dans les trois aspects suivants :

  • Encapsulation : cacher les détails d'implémentation d'une classe à l'intérieur de la classe et fournir une interface publique vers l'extérieur pour protéger la sécurité des données de la classe. classe ;
  • Héritage : en héritant des sous-classes, vous pouvez réutiliser le code de la classe parent et développer sur cette base
  • Polymorphisme : les objets du même type peuvent montrer des comportements différents à différentes occasions ;

Pour Golang, bien qu'il prenne en charge la programmation orientée objet, il ne fournit pas d'héritage traditionnel. En effet, les concepteurs de Golang pensent que l'héritage peut conduire à une hiérarchie de classes étroitement couplée. Ce couplage étroit peut facilement entraîner une surcharge du code et des difficultés de maintenance dans les grands projets. L'alternative à l'héritage consiste à réutiliser le code via la composition.

Implémentation de Composition

La composition signifie que les objets "contiennent" d'autres objets et permettent la réutilisation du code par combinaison. Dans Golang, nous pouvons utiliser Struct pour implémenter Composition.

Voyons comment utiliser la composition pour simuler l'héritage.

Supposons que nous ayons deux structures :

type Animal struct {
    Name string
    Age  int
}

type Dog struct {
    Animal
    Breed string
}

Dans cet exemple, la structure Animal représente un animal et contient deux attributs : Nom et Âge. La structure Chien contient un champ de type Animal, et un attribut Race est ajouté. Cette méthode permet d'obtenir un effet de type héritage grâce à la combinaison.

Nous pouvons initialiser un objet Dog en utilisant la méthode suivante :

dog := Dog{
    Animal: Animal{Name: "大黄", Age: 2},
    Breed:  "拉布拉多",
}

fmt.Println(dog.Name, dog.Age, dog.Breed)

Dans l'exemple ci-dessus, nous avons créé un nouvel objet Dog, qui contient un objet Animal, et défini ses propriétés Name, Age et Breed. Ensuite, nous imprimons ces attributs, et le résultat est le suivant :

大黄 2 拉布拉多

À partir du résultat, nous pouvons voir que les attributs Name et Age de l'objet Dog sont hérités de l'objet Animal, et leur inclusion permet d'obtenir un effet de type héritage. .

Mais il convient de noter que la structure Chien n'hérite pas de la structure Animal, mais est implémentée en combinant la structure Animal.

En d'autres termes, nous pouvons utiliser Composition pour définir des hiérarchies de classes plus complexes. Par exemple, nous pouvons définir une structure pour représenter les humains, qui contient une structure nommée Heartbeat. La structure Heartbeat représente un battement de cœur.

type Heartbeat struct {
    rate int
}

func (h *Heartbeat) SetRate(rate int) {
    h.rate = rate
}

func (h *Heartbeat) GetRate() int {
    return h.rate
}

type Human struct {
    Name     string
    Age      int
    Heartbeat Heartbeat
}

Dans la structure humaine, nous incluons une structure Heartbeat et faisons de Heartbeat un champ de la structure humaine. De cette façon, nous pouvons accéder aux méthodes de la structure Heartbeat à l'intérieur de la structure Human et définir et obtenir la valeur du rythme cardiaque.

Résumé

Bien que Golang ne fournisse pas de méthode d'héritage traditionnelle, nous pouvons obtenir des effets de type héritage en utilisant la composition. Grâce à Composition, nous pouvons créer une hiérarchie de classes plus concise et flexible, facilitant ainsi la maintenance et l'extension du code dans les grands projets. Dans le même temps, la composition, comme d’autres fonctionnalités de la programmation orientée objet, peut également nous aider à écrire du code plus efficace et plus réutilisable.

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!

Déclaration:
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