Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Abstraction de données en C++

L'abstraction de données consiste à ne fournir que des informations essentielles au monde extérieur et à masquer leurs détails d'arrière-plan, c'est-à-dire à représenter les informations nécessaires dans le programme sans présenter les détails.

L'abstraction de données est une technique de programmation (et de conception) qui repose sur la séparation de l'interface et de l'implémentation.

Prenons un exemple réel d'un téléviseur, que vous pouvez allumer et éteindre, changer de chaîne, régler le volume et ajouter des composants externes tels que des haut-parleurs, des magnétoscopes et des lecteurs de DVD, MAIS vous ne connaissez pas ses détails internes, qui c'est-à-dire que vous ne savez pas comment il reçoit les signaux par voie hertzienne ou par câble, comment il les traduit et finalement les affiche à l'écran.

Ainsi, nous pouvons dire qu'un téléviseur sépare clairement son implémentation interne de son interface externe et vous pouvez jouer avec ses interfaces comme le bouton d'alimentation, le changeur de chaîne et le contrôle du volume sans avoir aucune connaissance de ses composants internes.

En C++, les classes fournissent un haut niveau d'abstraction de données . Ils fournissent suffisamment de méthodes publiques au monde extérieur pour jouer avec la fonctionnalité de l'objet et manipuler les données de l'objet, c'est-à-dire l'état sans réellement savoir comment la classe a été implémentée en interne.

Par exemple, votre programme peut appeler le sort() fonction sans savoir quel algorithme la fonction utilise réellement pour trier les valeurs données. En fait, l'implémentation sous-jacente de la fonctionnalité de tri peut changer entre les versions de la bibliothèque, et tant que l'interface reste la même, votre appel de fonction fonctionnera toujours.

En C++, nous utilisons des classes pour définir nos propres types de données abstraits (ADT). Vous pouvez utiliser le cout objet de la classe ostream pour diffuser des données vers une sortie standard comme celle-ci −

Démo en direct
#include <iostream>
using namespace std;

int main() {
   cout << "Hello C++" <<endl;
   return 0;
}

Ici, vous n'avez pas besoin de comprendre comment cout affiche le texte sur l'écran de l'utilisateur. Vous n'avez besoin de connaître que l'interface publique et l'implémentation sous-jacente de "cout" est libre de changer.

Les étiquettes d'accès appliquent l'abstraction

En C++, nous utilisons des étiquettes d'accès pour définir l'interface abstraite de la classe. Une classe peut contenir zéro ou plusieurs étiquettes d'accès −

Il n'y a aucune restriction sur la fréquence à laquelle une étiquette d'accès peut apparaître. Chaque étiquette d'accès spécifie le niveau d'accès des définitions de membre suivantes. Le niveau d'accès spécifié reste en vigueur jusqu'à ce que l'étiquette d'accès suivante soit rencontrée ou que l'accolade droite fermante du corps de la classe soit vue.

Avantages de l'abstraction de données

L'abstraction des données offre deux avantages importants −

En définissant les membres de données uniquement dans la section privée de la classe, l'auteur de la classe est libre d'apporter des modifications aux données. Si l'implémentation change, seul le code de classe doit être examiné pour voir quel effet le changement peut avoir. Si les données sont publiques, toute fonction qui accède directement aux données membres de l'ancienne représentation peut être interrompue.

Exemple d'abstraction de données

Tout programme C++ dans lequel vous implémentez une classe avec des membres publics et privés est un exemple d'abstraction de données. Prenons l'exemple suivant −

Démo en direct
#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
      
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −

Total 60

La classe ci-dessus additionne des nombres et renvoie la somme. Les membres publics - addNum et getTotal sont les interfaces avec le monde extérieur et un utilisateur doit les connaître pour utiliser la classe. Le membre privé total est quelque chose que l'utilisateur n'a pas besoin de connaître, mais qui est nécessaire au bon fonctionnement de la classe.

Concevoir une stratégie

L'abstraction sépare le code en interface et implémentation. Ainsi, lors de la conception de votre composant, vous devez garder l'interface indépendante de l'implémentation afin que si vous modifiez l'implémentation sous-jacente, l'interface reste intacte.

Dans ce cas, quels que soient les programmes utilisant ces interfaces, ils ne seraient pas impactés et auraient juste besoin d'une recompilation avec la dernière implémentation.


Langue C

  1. Types de données C++
  2. Opérateurs C++
  3. Classes et objets C++
  4. Modèles de classe C++
  5. Type de données Char C++ avec exemples
  6. Java - Abstraction
  7. Java - Structures de données
  8. Classes de stockage en C++
  9. Structures de données C++