Nehmen Sie dieses Beispiel, das aus dieser Artikel :
public class Position
{
public double distance( Position position )
{
// calculate and return distance...
}
public double heading( Position position )
{
// calculate and return heading...
}
public double latitude;
public double longitude;
}
Demselben Artikel zufolge ist dies ein gutes Beispiel für eine Kapselung, da Daten und Operationen, die mit diesen Daten durchgeführt werden, gebündelt werden. Beachten Sie, dass die Verkapselung hier keine Garantie für das Verstecken oder den Schutz von Daten bietet.
Im Gegensatz dazu würde Steve McConnell in Code Complete (2. Aufl., Abschnitt 6.2, Good Encapsulation) argumentieren, dass die Kapselung gebrochen ist, weil die Mitgliedsdaten offen liegen.
In Ihrem Fall, wenn Ihre Datenobjekte und die Objekte, die sie bearbeiten, getrennt sind, aber keine öffentlichen Felder haben, dann ist die Kapselung gemäß der ersten Definition gebrochen, aber nicht unbedingt im zweiten Fall. Wir haben also zwei gegensätzliche Ansichten. Die eine besagt, dass Data Hiding kein Bestandteil der Kapselung ist, die andere, dass Data Hiding ein wesentlicher Bestandteil der Kapselung ist.
Data Hiding kann als Teil des Information Hiding gesehen werden, das besagt, dass man komplexe Designentscheidungen und Quellen von Veränderungen verbergen sollte. Der allgemeine Konsens scheint zu sein, dass die Kapselung als eine Manifestation des Information Hiding, einschließlich des Data Hiding, angesehen wird.
Oder, wie Wikipedia drückt es aus:
Der Begriff Verkapselung wird oft verwendet austauschbar mit Information Hiding verstecken. Nicht alle sind sich über die Unterscheidungen zwischen den beiden Begriffen; Man kann das Verstecken von Informationen als das Prinzip und Verkapselung die Technik ist. Ein Softwaremodul verbirgt Informationen, indem es sie in einem Informationen in ein Modul oder ein anderes Konstrukt, das eine Schnittstelle darstellt.
Aber... der Verweis, der auf diesen Absatz folgt, ist derselbe Artikel, dem ich das erste Beispiel entnommen habe, so dass sogar Wikipedia hier etwas durcheinander bringt. Auch die Verwendung des Wortes "Unterscheidungen" scheint hier falsch zu sein.
Es ist ein bisschen lahm, das am Ende sagen zu müssen, aber die Terminologie für Kapselung und Informationsverschleierung ist überladen, so dass es auf die Quelle ankommt. In Ihrem Fall würde ich mich an die Definition von Kapselung als "Verbergen von Implementierungsdetails hinter einer Abstraktion" halten. Sie brechen also nicht unbedingt die Kapselung.