Почему это нарушает инкапсуляцию? Внутреннее представление ваших объектов все еще скрыто:
private :
List<SubSchedule*> mSubScheduleList;
Если SubSchedule
также не считается внутренним представлением , здесь нет проблем.
В хорошо инкапсулированном классе только его функции-члены могут манипулировать его внутренними деталями. В этом случае тот факт, что используется List
, кажется подробным, потому что все, что беспокоит пользователя открытого интерфейса, - это то, что класс позволяет ему добавлять подпрограммы. Как хранятся эти подпрограммы, является внутренней деталью. Позже вы можете изменить эту деталь (скажем, вместо этого, сохранив их в SortedList
), не затрагивая пользователей общедоступного интерфейса. Таким образом, создание переменной List<...>
private способствует хорошей инкапсуляции.
Если пользователь интерфейса ожидает, что сможет манипулировать SubSchedule
объектами напрямую, тогда нет проблем с раскрытием этого. Но если нет причин делать это, то использование SubSchedule
s, вероятно, также является внутренней деталью, и поэтому не должно отображаться в общедоступном интерфейсе.