Datenabstraktion in C++: Interface-Implementierung-Trennung
Datenabstraktion = Bereitstellung wesentlicher Informationen nach außen, Verbergen von Implementierungsdetails. Programmier- und Designtechnik basierend auf Trennung von Interface und Implementierung.
Reale Analogie: Fernseher
Sie bedienen: Ein/Aus, Kanal, Lautstärke, externe Geräte (Lautsprecher, DVD). Aber Sie kennen nicht die Internas: Signalempfang, Dekodierung, Bilddarstellung. TV trennt interne Implementierung von externem Interface.
C++ Klassen & Datenabstraktion
Klassen bieten öffentliche Methoden zur Manipulation von Objektzustand, ohne interne Implementierung offenzulegen.
Beispiel: sort() aufrufen ohne Sortieralgorithmus zu kennen. Implementierung kann sich ändern – Interface bleibt stabil → Ihr Code funktioniert weiter.
cout-Beispiel
#include <iostream>
using namespace std;
int main() {
cout << "Hello C++" << endl;
return 0;
}
Sie nutzen cout (Klasse ostream) ohne zu wissen, wie Text auf den Bildschirm kommt. Nur öffentliches Interface nötig.
Zugriffsspezifizierer erzwingen Abstraktion
- public – Für alle Programmteile zugänglich. Definiert die abstrakte Sicht (Interface).
- private – Nicht für Code außerhalb der Klasse zugänglich. Verbirgt Implementierung.
Keine Beschränkung für Häufigkeit von Zugriffslabels. Jedes Label gilt bis zum nächsten Label oder schließender Klammer der Klasse.
Vorteile der Datenabstraktion
- Klasseninternas geschützt vor versehentlichen Fehlern durch Nutzer (Zustandskorruption).
- Implementierung kann sich entwickeln (neue Requirements, Bugfixes) ohne Änderungen im User-Code.
Datenmember nur in private → Autor frei bei Änderungen. Bei public Daten: Jede Funktion, die direkt zugreift, könnte bei Repräsentationsänderung brechen.
Beispiel: Adder-Klasse
#include <iostream>
using namespace std;
class Adder {
public:
Adder(int i=0) { total = i; }
void addNum(int number) { total += number; }
int getTotal() { return total; }
private:
int total; // versteckt
};
int main() {
Adder a;
a.addNum(10); a.addNum(20); a.addNum(30);
cout << "Total " << a.getTotal() << endl; // 60
return 0;
}
addNum, getTotal = öffentliche Schnittstelle. total = privat, für Nutzer unsichtbar, aber intern nötig.
Designstrategie
Abstraktion trennt Code in Interface und Implementierung. Beim Design: Interface unabhängig von Implementierung halten. Bei Implementierungsänderung: Interface intakt → Nutzerprogramme nur neu kompilieren.
C Sprache
- C++-Datentypen verstehen: Grundlagen, Modifizierer und Best Practices
- C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Klassentemplates meistern: Ein praktischer Leitfaden
- C++ char‑Datentyp meistern: Deklaration, ASCII & Konvertierungstechniken
- Java Abstraktion erklärt: Code vereinfachen & Lesbarkeit steigern
- Java Datenstrukturen: Kernklassen & Collections Framework erkunden
- C++ Speicherklassen: Scope, Lifetime & Verwendung
- C++ Datenstrukturen: Arrays, Structs & mehr für effiziente Programme
- Polymorphie in C++: Praktischer Leitfaden