Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Gegevensabstractie in C++

Gegevensabstractie verwijst naar het verstrekken van alleen essentiële informatie aan de buitenwereld en het verbergen van hun achtergronddetails, d.w.z. om de benodigde informatie in het programma weer te geven zonder de details te presenteren.

Data-abstractie is een programmeer- (en ontwerp)techniek die berust op de scheiding van interface en implementatie.

Laten we een voorbeeld uit de praktijk nemen van een tv, die u kunt in- en uitschakelen, het kanaal kunt wijzigen, het volume kunt aanpassen en externe componenten kunt toevoegen, zoals luidsprekers, videorecorders en dvd-spelers, MAAR u kent de interne details niet, die is, je weet niet hoe het signalen ontvangt via de ether of via een kabel, hoe het ze vertaalt en ze uiteindelijk op het scherm weergeeft.

We kunnen dus zeggen dat een televisie zijn interne implementatie duidelijk scheidt van zijn externe interface en dat je kunt spelen met zijn interfaces zoals de aan / uit-knop, kanaalwisselaar en volumeregeling zonder enige kennis van de binnenkant.

In C++ bieden klassen een hoog niveau van gegevensabstractie . Ze bieden de buitenwereld voldoende openbare methoden om met de functionaliteit van het object te spelen en objectgegevens te manipuleren, d.w.z. te vermelden zonder daadwerkelijk te weten hoe de klasse intern is geïmplementeerd.

Uw programma kan bijvoorbeeld een aanroep doen naar de sort() functie zonder te weten welk algoritme de functie daadwerkelijk gebruikt om de gegeven waarden te sorteren. In feite kan de onderliggende implementatie van de sorteerfunctionaliteit veranderen tussen releases van de bibliotheek, en zolang de interface hetzelfde blijft, zal je functieaanroep nog steeds werken.

In C++ gebruiken we klassen om onze eigen abstracte datatypes (ADT) te definiëren. U kunt de cout . gebruiken object van klasse ostream om gegevens op deze manier naar standaarduitvoer te streamen −

Live demo
#include <iostream>
using namespace std;

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

Hier hoef je niet te begrijpen hoe cout geeft de tekst weer op het scherm van de gebruiker. U hoeft alleen de openbare interface te kennen en de onderliggende implementatie van 'cout' is vrij te wijzigen.

Toegangslabels dwingen abstractie af

In C++ gebruiken we toegangslabels om de abstracte interface naar de klasse te definiëren. Een klasse kan nul of meer toegangslabels bevatten −

  • Leden gedefinieerd met een openbaar label zijn toegankelijk voor alle onderdelen van het programma. De data-abstractieweergave van een type wordt gedefinieerd door zijn openbare leden.

  • Leden die zijn gedefinieerd met een privélabel, zijn niet toegankelijk voor code die de klasse gebruikt. De privésecties verbergen de implementatie van code die het type gebruikt.

Er zijn geen beperkingen voor hoe vaak een toegangslabel mag verschijnen. Elk toegangslabel specificeert het toegangsniveau van de volgende liddefinities. Het opgegeven toegangsniveau blijft van kracht totdat het volgende toegangslabel wordt gevonden of de accolade rechts van de klasse wordt gezien.

Voordelen van data-abstractie

Gegevensabstractie biedt twee belangrijke voordelen −

  • Interne klassen zijn beschermd tegen onbedoelde fouten op gebruikersniveau, die de status van het object kunnen beschadigen.

  • De klasse-implementatie kan in de loop van de tijd evolueren als reactie op veranderende vereisten of bugrapporten zonder dat de code op gebruikersniveau moet worden gewijzigd.

Door alleen gegevensleden in het privégedeelte van de klas te definiëren, staat het de auteur van de klas vrij om wijzigingen in de gegevens aan te brengen. Als de implementatie verandert, hoeft alleen de klassecode te worden onderzocht om te zien wat voor invloed de wijziging kan hebben. Als gegevens openbaar zijn, kan elke functie die rechtstreeks toegang heeft tot de gegevensleden van de oude weergave worden verbroken.

Voorbeeld van gegevensabstractie

Elk C++-programma waarin u een klasse met openbare en privéleden implementeert, is een voorbeeld van gegevensabstractie. Beschouw het volgende voorbeeld −

Live demo
#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;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

Total 60

Bovenstaande klasse telt getallen bij elkaar op en geeft de som terug. De openbare leden - addNum en getTotal zijn de interfaces naar de buitenwereld en een gebruiker moet ze kennen om de klasse te gebruiken. Het privélid totaal is iets dat de gebruiker niet hoeft te weten, maar dat nodig is om de klas goed te laten werken.

Strategie ontwerpen

Abstractie scheidt code in interface en implementatie. Dus tijdens het ontwerpen van uw component moet u de interface onafhankelijk houden van de implementatie, zodat als u de onderliggende implementatie wijzigt, de interface intact blijft.

In dit geval zouden welke programma's deze interfaces ook gebruiken, ze niet worden beïnvloed en zouden ze alleen opnieuw moeten worden gecompileerd met de nieuwste implementatie.


C Taal

  1. C++-gegevenstypen
  2. C++-operators
  3. C++ klassen en objecten
  4. C++-klassesjablonen
  5. C++ Char-gegevenstype met voorbeelden
  6. Java - Abstractie
  7. Java - Gegevensstructuren
  8. Opslagklassen in C++
  9. C++-gegevensstructuren
  10. Polymorfisme in C++
  11. Gegevensinkapseling in C++