Возьмите этот пример, взятый из этой статьи :
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;
}
В соответствии с той же статьей это хороший пример инкапсуляции, поскольку данные и операции, выполняемые с этими данными, связаны. Обратите внимание, что инкапсуляция здесь не гарантирует скрытие или защиту данных.
Напротив, Стив Макконнелл в Code Complete (2-е изд., Раздел 6.2, Хорошая инкапсуляция) будет утверждать, что инкапсуляция нарушена, потому что данные о членах открыты.
В вашей ситуации, если ваши объекты данных и объекты, управляющие ими, разделены, но не имеют открытых полей, то инкапсуляция нарушается согласно первому определению, но не обязательно во втором случае. Таким образом, у нас есть два противоположных мнения. Один говорит, что скрытие данных не является частью инкапсуляции, другой источник говорит, что скрытие данных является важной частью инкапсуляции.
Сокрытие данных можно рассматривать как часть сокрытия информации, согласно которому вы должны скрывать сложные проектные решения и источники изменений. По общему мнению, инкапсуляция рассматривается как проявление сокрытия информации, в том числе сокрытия данных.
Или, как говорит Википедия :
Часто используется термин инкапсуляция
взаимозаменяемо с информацией
прячется. Не все согласны с
различия между этими двумя хотя;
можно подумать, что информация скрывается как
будучи принципом и инкапсуляцией
быть техникой. Программный модуль
скрывает информацию, инкапсулируя
информация в модуль или другое
конструкция, которая представляет интерфейс.
Но ... ссылка, которая следует за этим параграфом, является той же самой статьей, из которой я взял первый пример, так что даже Википедия смешивает здесь вещи. Кроме того, использование слова «различия» здесь кажется неправильным.
Немного глупо говорить об этом в конце, но терминология для инкапсуляции и сокрытия информации перегружена, поэтому все зависит от источника. В вашем случае я бы придерживался определения инкапсуляции как «скрытия деталей реализации за абстракцией». Поэтому вы не обязательно нарушаете инкапсуляцию.