Qu’est-ce que l’abstraction de données dans la POO?
L’abstraction est l’un des concepts clés dans les langages de programmation orientée objet (POO). Son objectif principal est de gérer la complexité en masquant les détails inutiles à l’utilisateur. Cela permet à l’utilisateur d’implémenter une logique plus complexe sans comprendre ni même penser à toute la complexité cachée.
Exemple d’abstraction en Java
Pour donner un exemple d’abstraction, nous allons créer une super-classe appelée « Forme » et deux sous-classes – « Rectangle » et « Cercle ». Les deux sous-classes ont des propriétés communes à partager, comme la couleur. Il existe une différence majeure entre le rectangle et le cercle à savoir: la surface, la largeur, la taille et le rayon …
Commençons par créer la superclasse Forme. Notez l’utilisation du mot clé « abstract » dans la définition de la classe. Ceci marque la classe comme abstraite, ce qui signifie qu’elle ne peut pas être instanciée directement. Nous définissons deux méthodes appelées surface() et toString() en tant que méthode abstraite. De cette façon, vous laissez l’implémentation de ces méthodes aux sous-classe de la classe Forme.
abstract class Forme { String coleur; // Méthodes abstraites abstract double surface(); public abstract String toString(); // Classe abstraite peut avoir un constructeur public Forme(String coleur) { System.out.println("Constructeur de la classe Forme est appelé"); this.coleur = coleur; } // Méthode concrète public String getColeur() { return coleur; } }
La classe « Cercle » hérite toutes les propriétés de la classe mére « Forme », mais doit fournir sa propre implémentation pour la méthode surface() et toString(). Dans ce cas, nous multiplions la valeur de π par le carré de son rayon, et on défini un message spécifique dans la classe Cercle avec la méthode toString().
class Cercle extends Forme { double rayon; public Cercle(String coleur, double rayon) { // appel du constructeur de la classe Forme super(coleur); System.out.println("Constructeur de la classe Cercle est appelé"); this.rayon = rayon; } @Override double surface() { return Math.PI * Math.pow(rayon, 2); } @Override public String toString() { return "La couleur de la cercle est " + super.coleur + " et la surface est : " + surface(); } }
La classe « Rectangle » a également sa propre implémentation de la méthode surface() et toString(). Dans ce cas, il suffit de multiplier longueur par largeur. Ainsi un message spécifique dans la classe Rectangle avec la méthode toString().
class Rectangle extends Forme{ double longueur; double largeur; public Rectangle(String coleur, double longueur, double largeur) { // appel du constructeur de la classe Forme super(coleur); System.out.println("Constructeur de la classe Rectangle est appelé"); this.longueur = longueur; this.largeur = largeur; } @Override double surface() { return longueur * largeur; } @Override public String toString() { return "La couleur de la rectangle est " + super.coleur + " et la surface est : " + surface(); } }
Voici une classe de test qui contient la méthode main() pour tester tous les parties de notre programme:
public class Test { public static void main(String[] args) { Forme f1 = new Cercle("Bleu", 3.2); Forme f2 = new Rectangle("Rouge", 3, 6); System.out.println(f1.toString()); System.out.println(f2.toString()); } }
La sortie est comme suite:
Constructeur de la classe Forme est appelé Constructeur de la classe Cercle est appelé Constructeur de la classe Forme est appelé Constructeur de la classe Rectangle est appelé La couleur de la cercle est Bleu et la surface est : 32.169908772759484 La couleur de la rectangle est Rouge et la surface est : 18.0
Les avantages de l’abstraction:
- Réduire la complexité.
- Évite la duplication de code et augmente la possibilité de réutilisation.
- Aide à renforcer la sécurité d’une application ou d’un programme car seuls les détails importants sont fournis à l’utilisateur.
Conclusion
L’abstraction est un concept général que vous pouvez trouver dans le monde réel ainsi que dans les langages POO. Tous les objets du monde réel, comme votre voiture, ou votre maison, masquant les détails internes fournissent une abstraction.
Ces abstractions facilitent beaucoup la gestion du complexité en les divisant en petites parties. Dans le meilleur des cas, vous pouvez les utiliser sans comprendre comment ils fournissent les fonctionnalités. Et cela vous aide à diviser la complexité de votre logiciel en parties contrôlable.