История изменений
Исправление www_linux_org_ru, (текущая версия) :
Я написал, что отделение деталей реализации от интерфейса это и есть инкапсуляция.
нет, это совершенно разные, хотя возможно и связанные вещи
инкапсуляция это невозможность нарушить инварианты объекта; например, у нас есть объект time_interval и для любого такого объекта всегда
time_interval.start() + time_interval.length() == time_interval.end()
то это инкапсуляция вместе с отделением деталей реализации от интерфейса; а если у нас
time_interval.start + time_interval.length() == time_interval.end
или
time_interval.start + time_interval.length == time_interval.end()
или
...
то это все равно будет инкапсуляция, но уже отделения деталей реализации от интерфейса нет (т.к. при желании сменить реализацию клиентский код придется переписывать, хотя бы и в части добавления-убирания пустых скобочек)
а если же можно так хитро вызвать какие-то методы, чтобы равенство
time_interval.start() + time_interval.length() == time_interval.end()
оказалось нарушено, то это отделение деталей реализации от интерфейса, но без инкапсуляции
Исходная версия www_linux_org_ru, :
Я написал, что отделение деталей реализации от интерфейса это и есть инкапсуляция.
нет, это совершенно разные, хотя возможно и связанные вещи
инкапсуляция это невозможность нарушить инварианты объекта; например, у нас есть объект time_interval и для любого такого объекта всегда
time_interval.start() + time_interval.length() == time_interval.end()
то это инкапсуляция вместе с отделением деталей реализации от интерфейса; а если у нас
time_interval.start + time_interval.length() == time_interval.end
или
time_interval.start + time_interval.length == time_interval.end()
или
...
то это все равно будет инкапсуляция, но уже отделения деталей реализации от интерфейса нет
а если же можно так хитро вызвать какие-то методы, чтобы равенство
time_interval.start() + time_interval.length() == time_interval.end()
оказалось нарушено, то это отделение деталей реализации от интерфейса, но без инкапсуляции