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

Le modèle de composition de Go atténue-t-il le problème de la classe de base fragile ?

Barbara Streisand
Libérer: 2024-10-28 14:16:02
original
115 Les gens l'ont consulté

 Does Go's Composition Model Mitigate the Fragile Base Class Issue?

Le problème de la classe de base fragile existe-t-il à Go ?

Malgré l'adoption de la composition plutôt que de l'héritage, le problème de la classe de base fragile peut toujours se poser à Go, bien que de manière moins grave. form.

Problème de classe de base fragile

Le problème se produit lorsque des modifications apportées à une classe de base brisent ses sous-classes. Dans les langages avec des méthodes virtuelles (comme Java), le remplacement des méthodes dans les sous-classes peut conduire à un comportement inattendu si la classe de base est modifiée.

Dans Go, cependant, il n'y a pas de polymorphisme (remplaçable méthodes). Lors de l'intégration d'un type, les méthodes intégrées sont promues dans la structure wrapper mais ne peuvent pas être remplacées. Cela atténue le problème de la classe de base fragile, car les méthodes promues ne peuvent pas être modifiées par les sous-classes.

Exemple

En Java :

<code class="java">class Counter {
  int value;
  void inc() { value++; }
  void incBy(int n) { value += n; }
}
class MyCounter extends Counter {
  void inc() { incBy(1); }
}</code>
Copier après la connexion

Si Counter.incBy() est modifié plusieurs fois en inc(), MyCounter entrera dans une boucle infinie.

In Go :

<code class="go">type Counter struct {
  value int
}
func (c *Counter) Inc() { c.value++ }
func (c *Counter) IncBy(n int) { c.value += n }
type MyCounter struct {
  Counter
}
func (m *MyCounter) Inc() { m.IncBy(1) }</code>
Copier après la connexion

Même avec la même modification à Counter.incBy() comme dans l'exemple Java, MyCounter fonctionnera toujours correctement, car il appelle directement Counter.Inc(). Les méthodes de la classe de base ne sont affectées par aucun changement dans la sous-classe.

Conclusion

Bien que le problème de la classe de base fragile soit moins répandu dans Go en raison de l'absence de polymorphisme, il est important de considérer le implications potentielles des changements de classe de base lors de l'intégration de types dans des structures.

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:php.cn
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!