Was versteht man unter Datenkapselung?

Bei der Datenkapselung wird ein direkter Zugriff auf die Daten einer Datenstruktur unterbunden. Der Zugriff ist nur über definierte Schnittstellen möglich. Dadurch können Fehler beim Datenzugriff vermieden werden.

Beispiel:
In einer Klasse Konto gibt es eine private Instanzvariable kontostand. Ein direkter Zugriff auf private Variablen aus einer anderen Klasse ist nicht möglich. Könnte auf den Kontostand direkt zugegriffen werden, wären beliebige Manipulationen am Kontostand möglich. Erfolgt der Zugriff ausschließlich über Schnittstellenmethoden, kann überprüft werden, ob beispielsweise beim Abbuchen der Überziehungsrahmen überschritten wird.

Beispiel in Java:

public class Konto {
    private double kontostand;
    private double kredit = 2000.0;

    public boolean einzahlen(double betrag) {
        if (betrag > 0.0) {
            kontostand += betrag;
            return true;
        } else {
            return false;
        }
    }

    public boolean abbuchen(double betrag) {
        if (betrag > 0.0 && kontostand - betrag >= -kredit) {
            kontostand -= betrag;
            return true;
        } else {
            return false;
        }
    }

    public double abfragen() {
        return kontostand;
    }
}

Neben der Fehlervermeidung können Datenkapselungen auch verwendet werden, um Implementierungsdetails zu verbergen und zu abstrahieren.
Im obigen Beispiel könnte die Methode einzahlen() so modifiziert werden, dass der Kontostand in einer Datei oder in einer Datenbank gespeichert wird. Veränderungen solcher Details würden keine Änderung der Signatur der Schnittstellenmethode bewirken.