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; 
    } 
}
Différence entre Héritage et PolymorphismeDifférence entre Héritage et PolymorphismeQ uelle est la différence entre Héritage et Polymorphisme ? – L’héritage permet, la ré-utilisabilité du code et le polymorphisme permet à une fonction d’avoir…Lire plus  
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(); 
    } 
  
}
QCM-JavaQCM Java – Programmation Orientée ObjetQCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus  
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.
Différence entre généralisation, héritage et spécialisationDifférence entre généralisation, héritage et spécialisationQuelle est la différence entre généralisation, héritage et spécialisation ? – Des termes tels que super-classe, sub-classe ou héritage apparaissent quand on pense à l’approche…Lire plus
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.
 
 

Partagez cet article

Laisser un commentaire

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