Héritage vs Composition
L'héritage et la composition sont deux concepts importants de la POO (programmation orientée objet). En termes simples, Composition et Héritage s'occupent de fournir des propriétés ou un comportement supplémentaires à une classe. L'héritage est la capacité d'une classe à hériter des propriétés et du comportement d'une classe parente en l'étendant. D'autre part, la composition est la capacité d'une classe à contenir des objets de différentes classes en tant que données membres.
Qu'est-ce que l'héritage ?
Comme mentionné ci-dessus, l'héritage est la capacité pour une classe d'hériter des propriétés et du comportement d'une classe parent en l'étendant. L'héritage fournit essentiellement la réutilisation du code en permettant d'étendre les propriétés et le comportement d'une classe existante par une classe nouvellement définie. Si la classe A étend B, alors la classe B est appelée la classe parente (ou super classe) et la classe A est appelée la classe enfant (ou classe/sous-classe dérivée). Dans cet exemple de scénario, la classe A héritera de tous les attributs et méthodes publics et protégés de la super classe (B). La sous-classe peut éventuellement remplacer (fournir des fonctionnalités nouvelles ou étendues aux méthodes) le comportement hérité de la classe parent.
L'héritage représente une relation "est-un" en POO. Cela signifie essentiellement que A est également un B. En d'autres termes, B peut être la classe avec une description générale d'une certaine entité du monde réel, mais A spécifie une certaine spécialisation. Dans un problème de programmation réel, la classe Person pourrait être étendue pour créer la classe Employee. C'est ce qu'on appelle la spécialisation. Mais vous pouvez également créer d'abord la classe Employee, puis la généraliser également à une classe Person (c.e. généralisation). Dans cet exemple, l'employé aura toutes les propriétés et le comportement de la personne (c'est-à-dire que l'employé est également une personne) et peut également contenir des fonctionnalités supplémentaires (ainsi, la personne n'est pas un employé).
Qu'est-ce que la composition ?
La composition est la capacité d'une classe à contenir des objets de différentes classes en tant que données membres. Par exemple, la classe A peut contenir un objet de la classe B en tant que membre. Ici, toutes les méthodes (ou fonctions) publiques définies dans B peuvent être exécutées dans la classe A. La classe A devient le conteneur, tandis que la classe B devient la classe contenue. La composition est également appelée porte-conteneurs. Dans cet exemple, on peut dire que la classe A est composée de la classe B. En POO, Composition représente une relation "a-un". Il est important de noter que, même si le conteneur a accès pour exécuter toutes les méthodes publiques de la classe contenue, il n'est pas en mesure de modifier ou de fournir des fonctionnalités supplémentaires. Lorsqu'il s'agit d'un problème de programmation dans le monde réel, un objet de la classe TextBox peut être contenu dans la classe Form, et on peut donc dire qu'un Form contient un TextBox (ou alternativement, un Form est composé d'un TextBox).
Quelle est la différence entre Héritage et Composition ?
Bien que l'héritage et la composition soient deux concepts POO, ils sont assez différents dans ce qu'ils permettent au programmeur de réaliser. L'héritage est la capacité d'une classe à hériter des propriétés et du comportement d'une classe parente en l'étendant, tandis que la composition est la capacité d'une classe à contenir des objets de différentes classes en tant que données membres. Si une classe est étendue, elle hérite de toutes les propriétés/comportements publics et protégés et ces comportements peuvent être remplacés par la sous-classe. Mais si une classe est contenue dans une autre, le conteneur n'a pas la possibilité de modifier ou d'ajouter un comportement au contenu. L'héritage représente une relation "est-un" en POO, tandis que la composition représente une relation "a-un".