OOPs : Héritage et polymorphisme

Parlons ensemble en profondeur de l’héritage et du polymorphisme

Dans ce blog, Je vais écrire un peu de profondeur à l’intérieur du concept le plus important de la programmation orientée objet appelé l’héritage. Vous pouvez trouver des articles partout sur ce sujet. Mais j’ai trouvé quelque chose qui manquait ensemble. Cela signifie que de nombreux articles ne définissent que l’héritage et les exemples, ils n’expliquent pas comment mettre en œuvre dans les projets de la vie réelle. Même, dans l’héritage, un autre concept vient aussi avec. Il est appelé polymorphisme. Donc je dis que si vous voulez comprendre complètement l’héritage, nous devons comprendre le concept de polymorphisme ensemble. Cela nous donne une meilleure clarté sur la façon de mettre en œuvre sur les projets. J’essaie également de décrire quand nous avons besoin d’hériter et pourquoi. Ici , je prends tous les exemples dans le langage de programmation java parce que je pense qu’il donne mieux exemple clair pour comprendre. Commençons par la définition:

Définition:

  1. Héritage : C’est un mécanisme dans lequel un objet acquiert toutes les propriétés et les comportements d’un objet parent. C’est une partie importante des POO (système de programmation orienté objet).
  • sous-classe (enfant) – la classe qui hérite d’une autre classe. On l’appelle aussi classe dérivée, classe étendue ou classe enfant.
  • superclasse (parent) – la classe dont on hérite.On l’appelle aussi classe de base ou classe parent.

Exemple:

class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}
class Pig extends Animal {
public void animalSound() {
System.out.println("The pig says: wee wee");
}
}
class Dog extends Animal {
public void animalSound() {
System.out.println("The dog says: bow wow");
}
}

1.1. Pourquoi utiliser l’héritage en java

  • Pour le recouvrement des méthodes (afin de pouvoir réaliser le polymorphisme à l’exécution).
  • Pour la réutilisabilité du code.

1.2. Types d’héritage en java :

a. Héritage simple

b. Héritage multi-niveaux

c. Héritage hiérarchique

d. Héritage multiple

e. Héritage hybride

Des images de tous les types donnent plus de clarté . Ce sont

.

2. Polymorphisme:

Le polymorphisme est la capacité pour certaines structures de code dans un langage POO d’être traitées comme des structures différentes au moment de l’exécution.

2.1 Polymorphisme d’objet :

Lorsque l’on discute de l’héritage, on explique que lorsque la classe B hérite de la classe A, un objet de la classe B est également considéré comme un objet de la classe A. C’est le polymorphisme d’objet.

2.2 Polymorphisme des méthodes

Dans la plupart des langages POE, les méthodes se différencient les unes des autres par leur signature, qui est une combinaison du nom de la méthode, et des types, du nombre et de l’ordre des paramètres qui sont passés. Ce système de différenciation nous permet de surcharger et de surcharger les méthodes.

2.3 Type de polymorphisme

2.3.1 Polymorphisme à la compilation

2.3.2 Polymorphisme à l’exécution

L’exemple ci-dessus , public void animalSound() est un polymorphisme à l’exécution. La surcharge de méthodes est appelée polymorphisme de compilation, car ces méthodes sont différenciées par le compilateur en fonction des paramètres qui leur sont donnés.

Mise en œuvre:

Tout ce qui précède est une définition de l’héritage et du polymorphisme . Nous pouvons le trouver n’importe où, et nous devrions le savoir aussi. Mais, ici, je veux discuter de la mise en œuvre de ce concept au niveau du projet. Je veux aussi parler de la relation entre deux ou plusieurs classes lorsqu’une classe hérite d’une autre classe. En fait, l’héritage signifie qu’il établit une relation entre elles. Il existe deux types de relations. L’héritage présente la relation « IS-A » et l’autre est la relation de composition. Voyons un exemple avant d’aller plus loin.

class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}
class Vehicle extends Animal {
public void vehicleSound() {
System.out.println("Vehicle Sound !!");
}
}

Dans l’exemple ci-dessus, nous avons deux classes Animal et Véhicule où la classe Véhicule hérite de la classe Animal. Est-il créer un sens logique par l’héritage même s’il n’y a pas d’erreur techniquement. De toute évidence, il n’y a pas de sens. Nous devrions donc toujours hériter de la manière appropriée à partir de laquelle nous pouvons établir une relation appropriée. Voici un autre exemple

class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}class Dog extends Animal {
public void animalSound() {
System.out.println("Dog Sound !!");
}
}

Maintenant la classe chien hérite de la classe animal . Alors l’objet de la classe chien hérite aussi de toutes les propriétés et du comportement de la classe animal qui donnent aussi un sens logique. C’est ce qu’on appelle la relation  » IS-A « . Mais Quand nous créons un objet de n’importe quelle classe sur une autre classe , alors la relation entre l’objet créé et la classe est appelée  » HAS-A » ( composition) .

Exemple:

class Dog {
public void animalSound() {
System.out.println("Dog sound");
}
}class Person {
public static void main(String args) { Dog dogObj = new Dog(); // "HAS-A" relationship dogObj.animalSound();
}
}

Points importants en java :

Ici , j’ai utilisé tous les exemples en langage de programmation java . Donc, nous devons nous rappeler quelques points importants en java pendant le concept d’héritage.

  • Java ne permet pas à l’héritage multiple et hybride dans les classes comme C++ parce que Java deviennent confus à la méthode override (run -time Polymorphism) alors que le même nom de méthode apparaissent dans les deux classes. Exemple
class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}class Mammal {
public void animalSound() {
System.out.println("The mammal makes a sound");
}}// error , multiple class inheritanceclass Dog extends Animal,Mammal {
public void animalSound() {
System.out.println("Dog Sound !!");
}
}
  • Mais Java peut hériter de plusieurs interfaces.

Conclusion:

L’héritage et le polymorphisme sont des concepts très importants qui sont utilisés à chaque étape des projets. Nous avons besoin d’hériter d’autres classes définies par l’utilisateur ou de classes intégrées pour gagner du temps et gérer correctement le code. Sans ces concepts, nous ne pouvons rien faire dans les projets de langage de programmation orienté objet. Et je me suis également concentré sur l’implémentation, le sujet de la relation que la définition. Nous devrions être capables de distinguer les classes, les objets, les entités, les comportements, les propriétés et les relations entre eux lors de la collecte des exigences des utilisateurs. Ensuite, nous pouvons organiser le codage de manière appropriée et les projets.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *