Contenu du cours
Java POO
Java POO
Principes de la POO : Abstraction
Abstraction
Nous arrivons au dernier, mais très important principe de la POO : l'abstraction. Le mot « abstraction » semble assez abstrait, et en résumé, ce principe nous indique que nous devons dépendre de l'abstraction plutôt que d'une implémentation spécifique. Cependant, cela peut sembler complexe pour l’instant. Commençons par examiner la définition :
Par exemple, nous avons une classe appelée Person,
, et de nombreuses classes différentes en dérivent. Person
possède divers champs et méthodes communs à toutes les classes. Cependant, lorsqu'il s'agit d'une classe appelée BasketballPlayer,
, la caractéristique height
devient cruciale, tandis que pour une classe comme Driver
, height
est hors de propos et sans importance. C'est là que l'abstraction intervient. En héritant d'une abstraction, nous pouvons rendre le paramètre height
optionnel, afin de ne pas avoir à l'utiliser là où il n'est pas nécessaire.
Cela peut sembler complexe, alors passons à un exemple :
Car.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
La classe Car
ne représente rien de spécifique. Il n'existe pas simplement de Car
; il y a des berlines, des camions, des tracteurs. Ainsi, nous dépendrons de l'abstraction appelée Car
. Pour simplifier davantage :
Car
est un modèle sur lequel nous créons des classes de voitures spécifiques.
Faites attention à la syntaxe :
Ceci est la syntaxe pour déclarer une classe abstraite. Notez également la syntaxe pour déclarer une méthode abstraite :
Une méthode abstraite n'a pas de corps ; c'est sa caractéristique principale. Les sous-classes d'une classe abstraite vont redéfinir cette méthode abstraite pour définir leur propre implémentation, en utilisant le polymorphisme.
Examinons de plus près ce qu'est une classe abstraite :
Notez que nous ne pouvons pas créer un objet à partir d'une classe abstraite ; cela entraînera une erreur :
Les classes abstraites nous libèrent de la gestion de simples « objets » ; elles nous fournissent un état de base et un comportement. Prenons l'exemple des voitures : chaque voiture devrait avoir un modèle, une année de production, une vitesse maximale et une couleur. Elles devraient également pouvoir se déplacer et s'arrêter. C'est tout ; à partir de là, vous concevrez vos classes spécifiques en vous basant sur ce modèle abstrait.
Règles pour créer une classe abstraite
Une classe abstraite est une classe qui contient au moins une méthode abstraite. Vous pouvez créer une classe abstraite sans aucune méthode abstraite, mais cela n'aurait alors aucun intérêt. Vous ne pourrez pas instancier d'objets à partir d'une classe abstraite ;
Les méthodes abstraites ne peuvent exister qu'à l'intérieur d'une classe abstraite ; vous ne pouvez pas créer de méthodes abstraites en dehors d'une classe abstraite ;
Les méthodes dans une classe abstraite peuvent être soit des méthodes abstraites, soit des méthodes avec implémentation ;
Une classe qui hérite d'une classe abstraite doit redéfinir toutes les méthodes abstraites ;
Vous pouvez hériter d'au maximum une seule classe (abstraite ou non abstraite) ;
Une classe abstraite doit représenter les propriétés et comportements communs de ses classes dérivées. Nous aborderons cela plus en détail lorsque nous étudierons les principes SOLID.
Prenons un exemple pour comprendre comment les sous-classes doivent redéfinir les méthodes abstraites en héritant d'une classe abstraite, en utilisant l'exemple de la classe enfant Truck
:
Voici le code de la capture d'écran, réécrit pour une meilleure lisibilité et clarté :
Car.java
Truck.java
Main.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Examinons plus en détail ce qui est écrit ci-dessus :
Première diapositive : Création d'une sous-classe
Truck
qui hérite de la classe abstraiteCar
. L'EDI indique qu'il est nécessaire d'implémenter les méthodes requises ;Deuxième diapositive : Redéfinition des méthodes nécessaires. Par exemple, il est indiqué que le
Truck
commence à se déplacer puis s'arrête ;Troisième diapositive : Création d'un objet dans la méthode
main
. Attention à la syntaxe utilisée :Car name = new Truck();
. L'objet est créé via l'abstraction et se termine par une implémentation spécifique. Ceci est appelé composition. Ensuite, affectation des valeurs aux champs selon les besoins et appel des méthodes redéfinies.
Voilà ! Si tout est compris, l'utilisation d'une classe abstraite est acquise !
Résumé
L'abstraction est probablement le principe le plus difficile de la POO à comprendre, et il est fort probable que vous n'ayez pas tout assimilé pour le moment. Mais ne pensez pas être seul dans ce cas. L'abstraction est un concept qui s'avère difficile à saisir pour la plupart des développeurs au début. Avec le temps, vous comprendrez mieux comment travailler efficacement avec l'abstraction et les classes abstraites. L'abstraction est un principe fondamental car elle permet de rendre nos programmes extensibles et très flexibles.
1. Qu'est-ce que l'abstraction en Programmation Orientée Objet ?
2. Lesquelles des affirmations suivantes sont vraies concernant l'abstraction ?
3. Quel est le but d'une classe abstraite en Java ?
4. Comment l'abstraction contribue-t-elle à la maintenabilité du code ?
Merci pour vos commentaires !