Polymorphisme en Java : concepts, types, caractéristiques et exemples

Publié: 2022-04-18

Javascript est l'un des langages de programmation orientés objet les plus populaires et les plus utilisés, avec C#, PHP, Python, C++, etc. Il permet aux utilisateurs d'exposer et d'aborder des concepts réels grâce à la programmation puisque tout est représenté comme un objet. Les fonctionnalités de Java en tant que langage de programmation offrent plusieurs pistes pour simplifier le développement logiciel en dynamisant les codes et en facilitant la maintenance.

Dans cet article, nous allons explorer Java en tant que langage de programmation orienté objet et comprendre les concepts d'héritage, d'abstraction, de polymorphisme et d'encapsulation de données. Nous examinerons également les types de polymorphisme en Java, leurs avantages et leurs inconvénients.

Table des matières

Présentation de la programmation orientée objet

Les langages de programmation orientée objet (POO) font référence aux langages informatiques qui utilisent le concept d '«objets» en temps réel dans le codage. Il vise à implémenter des entités du monde telles que l'héritage, le polymorphisme, les boucles, l'abstraction de données, etc., par le biais de la programmation.

Il existe quelques concepts de base de la programmation orientée objet avec lesquels les programmeurs doivent se familiariser. Ces termes conceptuels sont nécessaires pour en savoir plus sur les caractéristiques spéciales et uniques de la POO telles que l'encapsulation, le polymorphisme, etc.

1. Classe

Une 'classe' représente un ensemble de propriétés et de méthodes qui s'appliquent à tous les 'objets' spécifiés dans la classe. Les objets peuvent être de différents types tels que des entiers, des tableaux ou des chaînes, etc. Une classe est comme un prototype défini par l'utilisateur, à l'aide duquel différents « objets » peuvent être créés.

2. Objet

Un objet est l'unité la plus fondamentale des langages POO, représentant des données réelles dans la vie réelle. Les objets portent les propriétés de la ou des classes dans lesquelles ils sont invoqués.

3. Méthode

Une méthode est un ensemble d'instructions impliquant différentes fonctions qui sont assemblées pour effectuer une tâche spécifique. Il renvoie la sortie après avoir terminé les instructions définies par l'utilisateur. Il peut également effectuer des tâches qui ne fournissent aucune sortie. Les méthodes permettent aux programmeurs de réutiliser les codes sans les retaper. Java exige que toutes les méthodes appartiennent à une classe, contrairement aux langages comme C++, C ou Python.

Concepts POO

Il existe quatre principes fondamentaux de la programmation orientée objet - Java présente toutes ces propriétés :

1. Abstraction

L'abstraction de données est une propriété des langages POO qui présente les détails nécessaires tout en gardant les autres détails non pertinents de l'objet de la visibilité de l'utilisateur, tels que le code d'implémentation. Seuls les détails essentiels et pertinents sont affichés par cette fonctionnalité, ce qui aide les développeurs à apporter rapidement les modifications appropriées aux fonctionnalités d'une classe.

2. Encapsulation

L'encapsulation des données fait référence à l'encapsulation des données dans des unités. Cette propriété des langages POO protège les données encapsulées des autres fonctions et méthodes. Il lie le code et les méthodes spécifiées pour effectuer des opérations dans des unités singulières, empêchant ainsi leur manipulation ou leur accès par des méthodes extérieures. Ceci est également connu sous le nom de masquage de données.

3. Héritage

L'héritage est une autre caractéristique importante des langages POO qui permet à une classe d'hériter des propriétés d'autres classes. Il fonctionne sur le concept de réutilisabilité des codes, réduisant ainsi le besoin de retaper les caractéristiques de classe à plusieurs reprises. La classe qui hérite d'une autre classe est connue sous le nom de sous-classe et la classe héritée est connue sous le nom de superclasse.

4. Polymorphisme

Le polymorphisme permet à un objet de prendre de nombreuses formes et d'effectuer des tâches similaires ou de présenter des comportements similaires dans différentes méthodes.

Polymorphisme en Java

Le polymorphisme permet d'effectuer une même tâche de différentes manières. C'est une propriété qui permet d'identifier et de différencier les entités de code similaires, améliorant ainsi l'efficacité des langages POO.

En Java, le polymorphisme est présenté en déclarant des objets en tant qu'entités distinctes. De cette manière, la même action peut être effectuée de plusieurs manières. Le polymorphisme est activé avec l'héritage, permettant aux objets d'effectuer différentes tâches en utilisant les propriétés héritées de différentes classes. Les différences dans la désignation des méthodes ou des objets distinguent deux entités.

Apprenez des cours de développement de logiciels en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Caractéristiques du polymorphisme

1. Coercition

La conversion implicite des types de données pour éviter les erreurs de type lors de la compilation est une coercition. Il n'inclut pas les conversions de types de données explicites mais suit uniquement la hiérarchie de conversion autorisée par Java. Par exemple, si un opérande est flottant et que l'opérateur est un entier, le résultat sera flottant.

2. Paramètres/variables polymorphes

Un objet ou une variable pouvant contenir des valeurs de différents types pendant le temps d'exécution est appelé variable ou paramètre polymorphe. Il dicte que lors de la déclaration d'une classe, les mêmes noms de variable peuvent contenir différents types de données, et les mêmes noms de méthode peuvent contenir différents paramètres et types de retour.

3. Surcharge de l'opérateur interne

La surcharge d'opérateur utilise un symbole d'opérateur selon les besoins de l'utilisateur. Java prend en charge la surcharge d'opérateur interne. C'est aussi un exemple de polymorphisme statique.

Types de polymorphisme en Java

En Java, le polymorphisme peut être invoqué en utilisant :

1. Surcharge de méthode

La surcharge de méthode est le processus de création de plusieurs objets ou méthodes portant le même nom et appartenant à la même classe. Il fonctionne au sein d'une classe.

2. Remplacer la méthode

Le remplacement de méthode est la façon dont une sous-classe constitue les mêmes méthodes que celles déclarées dans la superclasse. Il fonctionne à travers les classes. Si la sous-classe contient les mêmes méthodes déjà présentes dans la super-classe, la fonction de la sous-classe est remplacée.

Polymorphisme de sous-type en Java

Le polymorphisme des sous-types dépend de l'upcasting et de la liaison tardive.

  • L'upcasting est un processus par lequel un objet ou une méthode peut promouvoir un type de données (float, entier, etc.) d'un sous-type à un supertype en le déplaçant vers le haut de la hiérarchie d'héritage.
  • La liaison tardive est utilisée pour appeler des méthodes qui sont des instances non finales.

Aucun opérateur n'est impliqué car le sous-type lui-même est membre du supertype. Par exemple, si une classe est nommée couleurs, ses sous-types peuvent être rouge, bleu, orange, vert, etc. Le polymorphisme de sous-type inclut les sous-types pour présenter les propriétés du supertype. Cependant, l'accès aux propriétés individuelles de chaque sous-type est perdu.

Polymorphisme d'exécution en Java

En Java, le polymorphisme d'exécution est également connu sous le nom de Dynamic Method Dispatch ou Dynamic Binding. Il est réalisé par le remplacement de la méthode - en appelant une méthode remplacée pour fournir une résolution dynamique au moment de l'exécution. Cela peut être réalisé par des fonctions et non par des objets.

Voici un exemple de polymorphisme d'exécution en Java :

voiture de classe{

void run(){System.out.println("conduite");}

}

la classe Volkswagen étend la voiture{

void run(){System.out.println("Conduire en toute sécurité avec 90km");}

public static void main(String args[]){

Voiture c = nouvelle Volkswagen();//upcasting

b.run();

}

}

Sortie :

Conduire en toute sécurité avec 90 km

Polymorphisme de temps de compilation en Java

Le polymorphisme au moment de la compilation est obtenu par surcharge de méthode. C'est le processus dans lequel l'appel d'une méthode surchargée est effectué et résolu au moment de la compilation. Il est également connu sous le nom de polymorphisme statique. Java est suffisamment flexible pour permettre à l'utilisateur d'utiliser des méthodes ou des objets ayant les mêmes noms tant que ses déclarations et propriétés de signature restent différentes.

Voici un exemple de polymorphisme à la compilation en Java :

classe SimpleCalc

{

entier ajouter(int x, int y)

{

retourner x+y ;

}

entier ajouter(int x, int y, int z)

{

retourner x+y+z ;

}

}

Démo de classe publique

{

public static void main(String args[])

{

SimpleCalc obj = new SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

Sortie :

50

90

Importance du polymorphisme

Le polymorphisme permet d'écrire des méthodes pouvant constituer différents types d'entités portant le même nom. Le polymorphisme est essentiel en Java en raison de ses différents avantages d'utilisation et de la possibilité qu'il offre de dynamiser le code :

  1. Il permet la réutilisation des codes - les mêmes codes n'ont pas besoin d'être écrits plusieurs fois.
  2. Cela permet à une variable de présenter plusieurs comportements - avoir le même nom mais des propriétés différentes peut ouvrir la possibilité de maintenir la cohérence des codes.
  3. Réduction des codes en masse - cela aide au débogage tout en raccourcissant le temps de compilation, en économisant la mémoire, l'énergie et le temps de l'utilisateur.

Problèmes possibles dans l'implémentation du polymorphisme

Le polymorphisme peut être déroutant à utiliser et à mettre en œuvre. Il réduit la lisibilité des codes, posant ainsi des menaces de multiples bogues et erreurs. Cela crée également des problèmes avec l'exécution des fonctions selon les besoins.

Il y a un problème classique à surveiller : le problème de la classe de base fragile. Il fait référence à un assemblage et à un codage incorrects d'une classe héritée qui se traduit par des méthodes affichant des résultats imprévisibles.

conclusion

La nature fragile de l'héritage peut conduire à des codes dysfonctionnels et brisés alors que tous les autres critères restent remplis. Ce problème architectural de base est considéré comme le problème de classe de base fragile. Apprenez-en davantage sur la façon dont Java présente les concepts de POO en rejoignant le programme Executive PG d'upGrad en développement de logiciels - Spécialisation en développement Full Stack . Faites-vous encadrer par des experts de l'industrie et développez des connaissances pratiques en vous engageant dans des projets pratiques et collaboratifs avec des pairs.

Réservez votre place dès aujourd'hui !

Qu'est-ce que la liaison statique et dynamique ?

Les objets qui sont déterminés au moment de la compilation sont connus sous le nom de liaison statique. D'autre part, les types de liaison dynamique des objets sont déterminés au moment de l'exécution. Le premier est utilisé lors de la surcharge de méthode et le second lors du remplacement de méthode.

Quelles sont les deux différences fondamentales entre le remplacement de méthode et la surcharge de méthode ?

En Java, le remplacement de méthode ne remplace pas les méthodes statiques, privées et finales, tandis que la surcharge de méthode surcharge les méthodes statiques, privées et finales en Java. De plus, la substitution des méthodes de sujets à la liaison dynamique et, d'autre part, les méthodes surchargées passent par la liaison statique.

Quelles sont les différences entre le polymorphisme et l'héritage en Java ?

En Java, il existe plusieurs points de différence entre le polymorphisme et l'héritage :

1. L'héritage est une représentation de la relation parent-enfant dans le monde réel dans le codage. Mais le polymorphisme est un catalyseur qui utilise cette relation pour rendre le programme plus dynamique.
2. L'héritage permet la réutilisation des codes de la classe enfant en héritant de la même chose de la classe parent. Le polymorphisme, en revanche, permet à la classe enfant de redéfinir à nouveau son comportement existant à l'intérieur de la classe parent.