Héritage vs composition
L'héritage et la composition sont deux concepts importants que l'on retrouve dans la programmation orientée objet (Object Oriented Programming). En termes simples, la composition et l'héritage traitent tous deux de fournir des propriétés ou un comportement supplémentaires à une classe. 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. 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 parente 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» dans la POO. Cela signifie essentiellement que A est aussi 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 peut ê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 à une classe Person (c'est-à-dire la 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 contenir des fonctionnalités supplémentaires (donc, 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 pourrait contenir un objet de 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 Containership. Dans cet exemple, on peut dire que la classe A est composée de la classe B. En POO, la composition représente une relation «has-a». 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 réel, un objet de la classe TextBox peut être contenu dans la classe Form,et on peut donc dire qu'un formulaire contient un TextBox (ou alternativement, un formulaire est composé d'un TextBox).
Quelle est la différence entre l'héritage et la composition?
Bien que l'héritage et la composition soient deux concepts de POO, ils sont assez différents dans ce qu'ils permettent au programmeur de réaliser. L'héritage est la capacité pour une classe d'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» dans la POO, tandis que la composition représente une relation «a un».