Aller (langage de programmation): Comment est encastrer dans Go différent de l’héritage prototypes?

Dans les deux cas, classe de l’objet dépend sur les interfaces qu’elle implémente.

Réponse

Avec enrobage, vous êtes juste redirigeant les méthodes via le type de conteneur à différentes instances des différents types d’incorporé. Avec les prototypes, toutes les méthodes héritées agissent sur le même objet.

Une autre chose à noter est que prototypique héritage ne permet pas de spécifier plus d’un prototype, tout en incorporant permet de vous intégrer plusieurs types (mais lorsque des méthodes/champs se chevauchent, ils doivent être qualifiés avec le nom du type).

Voici un exemple de code pour montrer comment intégrer des types n’est pas comme héritage prototypes :

 package main
 
 import "fmt"
 
 type Foo struct {
     FooThing string
     Shared   string
 }
 
 func (f *Foo) GetFoo() string {
     return f.FooThing
 }
 
 type Bar struct {
     BarThing string
     Shared   string
 }
 
 type FooBar struct {
     *Foo
     *Bar
 }
 
 func NewFooBar() *FooBar {
     // Note how we create three object instances here. With
     // prototypes, this would only be one object.
     return &FooBar{
         &Foo{"Hello", "Foo.NotActuallyShared"},
         &Bar{"World", "Bar.NotActuallyShared"},
     }
 }
 
 func main() {
     foobar := NewFooBar()
     foobar.BarThing = "Universe"
     fmt.Println(foobar.GetFoo(), foobar.BarThing)
     // Not possible because Foo & Bar both have a unique value!
     // fmt.Println(foobar.Shared)
     // Instead we have to do it like this:
     fmt.Println(foobar.Bar.Shared)
 }


Tags: Programmation informatique, Aller (langage de programmation), Programmation orientée objet, Héritage de prototypes