Différence entre la composition et l'héritage

Différence entre la composition et l'héritage

En programmation, le code réutilisable est l'utilisation de logiciels existants pour créer de nouveaux logiciels en utilisant les principes de réutilisabilité. La réutilisabilité du code est considérée comme une fonctionnalité productive fondamentale dans les entreprises intensives en technologie de l'information. Il est promu dans des systèmes orientés objet en établissant des relations entre les classes. Il existe deux façons fondamentales d'établir ces relations dans la programmation orientée objet - l'héritage et la composition. La mise en œuvre de l'héritage est une façon de relier les classes, mais la POO fournit un nouveau type de relation entre les classes appelées composition. En établissant une relation entre les classes nouvelles et existantes, une nouvelle classe peut hériter ou intégrer le code d'une ou plusieurs classes existantes.

Dans la POO, l'héritage est la méthodologie par laquelle un objet acquiert les caractéristiques d'un ou plusieurs autres objets. C'est l'un des outils les plus puissants pour implémenter la réutilisabilité du code dans OOP. Lorsque vous utilisez l'héritage, une nouvelle classe peut être créée en établissant des relations parent-enfant avec les classes existantes. La composition des objets est une alternative à l'héritage des classes. L'utilisation d'un objet dans un autre objet est connue sous le nom de composition. À plusieurs reprises, vous souhaitez utiliser un objet comme champ dans une autre classe car il est facile de créer des classes complexes en utilisant des classes bien conçues précédemment comme composants. C'est ce qu'on appelle la composition. Eh bien, à la fois l'héritage et la composition fournissent une fonctionnalité équivalente dans de nombreux cas, la composition des objets est un meilleur modèle de réutilisation que l'héritage de classe. Cet article compare les deux approches.

Qu'est-ce que l'héritage?

L'héritage est l'un des outils les plus puissants pour implémenter la réutilisation du code dans la programmation orientée objet. Il se réfère à la fonctionnalité par laquelle un objet acquiert les caractéristiques d'un ou plusieurs autres objets. L'héritage en C ++ signifie que vous pouvez créer des classes qui dérivent leurs attributs des classes existantes. Cela signifie que vous spécialisez une classe pour créer une relation IS-A entre les classes qui se traduit par un couplage solide entre la base et les classes dérivées. La mise en œuvre de l'héritage favorise la réutilisabilité du code car les nouvelles classes sont créées à partir de classes existantes. L'héritage de classe facilite également la modification de la réutilisation de l'implémentation. Mais l'héritage de la classe a aussi des inconvénients. Tout d'abord, parce que l'héritage est défini au moment de la compilation, vous ne pouvez pas modifier les implémentations héritées des classes de parents au moment de l'exécution.

Qu'est-ce que la composition?

OOP fournit encore une autre relation entre les classes appelées composition, qui est également connue sous le nom de relation Has-A. Si les caractéristiques d'un objet doivent faire partie d'un autre objet, la relation appelle à la composition. Pour composer une classe des classes existantes, un objet de chaque classe doit être déclaré membre de la nouvelle classe. En mots simples, l'utilisation d'un objet dans un autre objet est connue sous le nom de composition. Plusieurs fois, vous voudrez peut-être utiliser un objet comme champ dans une autre classe. Vous utilisez un objet à l'intérieur d'une classe en composition. Contrairement à l'héritage de la classe, la composition des objets est définie dynamiquement au moment de l'exécution à travers des objets acquérant des références à d'autres objets. De plus, la composition offre un meilleur moyen d'utiliser un objet sans compromettre les détails internes de l'objet, c'est-à-dire que la composition est utile.

Différence entre la composition et l'héritage

Approche

Bien que l'héritage et la composition favorisent la réutilisabilité du code dans le système orienté objet en établissant des relations entre les classes et fournissent des fonctionnalités équivalentes à bien des égards, ils utilisent différentes approches. Avec l'héritage, vous pouvez créer des classes qui dérivent leurs attributs des classes existantes, donc tout en utilisant l'héritage pour créer une classe, vous pouvez développer une classe existante. Au contraire, l'utilisation d'un objet dans un autre objet est connue sous le nom de composition. La composition des objets est une alternative à l'héritage des classes. Si les caractéristiques d'un objet doivent faire partie d'un autre objet, la relation appelle à la composition.

Relation

Dans l'héritage, vous spécialisez une classe pour créer une relation «IS-A» entre les classes qui se traduit par un couplage fort entre la base et les classes dérivées. Il permet de concevoir une hiérarchie de classes et la hiérarchie commence par la classe la plus générale et passe à des classes plus spécifiques. En mettant en œuvre un héritage, les fonctions des membres d'une classe deviennent des propriétés d'une autre classe sans les coder explicitement dans la classe. En composition, vous utilisez un objet à l'intérieur d'une classe et toutes les demandes de l'objet sont transmises à l'objet. Les détails internes ne sont pas exposés les uns aux autres en composition, il s'agit donc d'une relation «has-a».

Mise en œuvre

L'héritage des classes est défini au moment de la compilation, vous ne pouvez donc pas modifier les implémentations héritées des classes de parents au moment de l'exécution. Parce que l'héritage expose une sous-classe aux détails de la mise en œuvre de ses parents, il casse souvent l'encapsulation. Tout changement dans la classe parent se reflétera dans la sous-classe qui peut créer des problèmes lorsque vous essayez de réutiliser une sous-classe. La composition des objets, au contraire, est définie dynamiquement au moment de l'exécution à travers des objets acquérant des références à d'autres objets. Et parce que les objets sont accessibles uniquement via leurs interfaces, cela ne cassera pas l'encapsulation. Tout objet peut être remplacé au moment de l'exécution par un autre objet tant qu'il a le même type.

Composition vs. Héritage: graphique de comparaison

Résumé de la composition vs. Héritage

À plusieurs reprises, vous souhaitez utiliser un objet comme champ dans une autre classe car les classes complexes sont plus faciles à créer en utilisant des classes précédemment écrites et bien conçues. C'est là que vous utilisez la composition. L'héritage fournit un moyen de réutiliser le code en étendant une classe avec un minimum d'effort, c'est pourquoi l'héritage est un outil précieux pour établir des relations entre les classes. En général, il est préférable d'utiliser la composition car elle fournit un moyen d'utiliser un objet sans compromettre les détails internes de l'objet qui est l'endroit où la composition est utile. L'héritage n'est pas sans problèmes, mais comme l'héritage, la composition des objets soulève des problèmes de performance similaires en ce qui concerne la création et la destruction d'objets.