Майже все це свідчить про принципове непорозуміння інкапсуляції та те, як воно застосовується.
Початкова відповідь, що ви порушили інкапсуляцію, - просто неправильна. У вашій програмі може виникнути потреба просто встановити значення сиру в холодильнику замість збільшення / зменшення або додавання / видалення. Крім того, це не семантика, незалежно від того, як ви її називали, якщо у вас є необхідність доступу та / або зміни атрибутів, ви не порушуєте інкапсуляцію, надаючи їх. Нарешті, інкапсуляція насправді не є "приховуванням", це контролем доступу до стану та цінностей, які не повинні бути публічними або маніпулювати поза класом, надаючи його тим, хто повинен та виконує завдання, доступні всередині країни.
Геттер або сетер не порушує інкапсуляцію, коли є законна потреба отримати або встановити значення. Ось чому методи можуть бути оприлюднені.
Інкапсуляція стосується збереження даних та методів, що змінюють ці дані безпосередньо разом в одному логічному місці, класі.
У цьому конкретному випадку явно є необхідність змінити значення сиру в додатку. Незалежно від того, як це робиться, за допомогою get / set або add / remove, якщо методи інкапсульовані у класі, який ви дотримуєтесь об'єктно-орієнтованого стилю.
Для уточнення я наведу приклад того, як інкапсуляція порушена шляхом надання доступу незалежно від назви методу чи логічного виконання.
Скажімо, ваш холодильник має "термін експлуатації", лише кількість кліщів до того, як холодильник більше не працює (заради аргументу, холодильник не може бути відремонтований). Логічно немає можливості користувачеві (або решті вашої програми) мати можливість змінити це значення. Це має бути приватним. Це було б видно лише через інший атрибут, відомий як "isWorking". Коли термін експлуатації закінчується, внутрішньо холодильник встановлює функцію "Налаштування".
Виконання відліку часу життя та його перемикання перемикача isWorking - все внутрішнє для холодильника, нічого зовнішнього не могло / не могло би вплинути на процес. isWorking має бути видно лише, таким чином геттер не порушує інкапсуляцію. Однак додавання аксесуарів до елементів життєвого процесу порушить вашу інкапсуляцію.
Як і більшість речей, визначення інкапсуляції не є буквальним, воно є відносним. Чи маєте ви змогу побачити X поза класом? Чи зможете ви змінити Y? Чи є все, що стосується вашого об'єкта тут, у цьому класі або функціонал розподілений у кількох класах?
putCheese
додав би сир у холодильник іtakeCheese
видалив би його - це (більш високі рівні) доменно-орієнтовані абстракції, а не об’єкти гетерів та сеттерів (які є (абстракції низького рівня) комп'ютерного програмування).