Maison  >  Article  >  développement back-end  >  Comment parvenir au polymorphisme sans héritage traditionnel ?

Comment parvenir au polymorphisme sans héritage traditionnel ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 17:36:02903parcourir

How Can Polymorphism be Achieved in Go Without Traditional Inheritance?

Polymorphisme en langage Go : réussir grâce aux interfaces et à la composition

Le polymorphisme, un concept fondamental de la programmation orientée objet, permet aux objets de se comporter différemment en fonction de leur classe ou de leur type. Dans Go, contrairement aux langages OO traditionnels, le polymorphisme est obtenu via les interfaces et la composition.

Problème :

Une tentative d'implémentation du polymorphisme dans Go en utilisant l'héritage structurel comme le code suivant l'extrait entraînerait une erreur :

<code class="go">type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}</code>

Solution :

Dans Go, le polymorphisme est obtenu via les interfaces et la composition. Une interface définit un ensemble de méthodes qu'un type doit implémenter, permettant au type d'être utilisé de manière polymorphe partout où l'interface est attendue.

Le code ci-dessous montre comment le polymorphisme peut être obtenu dans Go à l'aide d'interfaces et de composition :

<code class="go">package main

import "fmt"

type Foo interface {
   printFoo()
}

type FooImpl struct {

}

type Bar struct {
   FooImpl
}

type Bar2 struct {
   FooImpl
}

func (f FooImpl) printFoo() {
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
   return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}</code>

Dans cet extrait de code :

  • Foo est une interface qui définit une méthode printFoo.
  • FooImpl est une implémentation concrète de l'interface Foo.
  • Bar et Bar2 sont des structures qui intègrent le type FooImpl et implémentent indirectement l'interface Foo.
  • getFoo() renvoie une instance de Bar en tant que type Foo, démontrant le polymorphisme.

En utilisant des interfaces et une composition, Go propose une approche flexible et efficace pour réaliser le polymorphisme sans avoir recours à l'héritage traditionnel.

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