Quase tudo isso mostra um mal-entendido fundamental do encapsulamento e como ele se aplica.
A resposta inicial de que você estava quebrando o encapsulamento está errada. Talvez seu aplicativo precise definir o valor do queijo na geladeira em vez de aumentar / diminuir ou adicionar / remover. Além disso, não é semântica, não importa como você a chama, se você precisar acessar e / ou alterar atributos, não quebrará o encapsulamento, fornecendo-os. Finalmente, o encapsulamento não se trata realmente de "ocultar", trata-se de controlar o acesso ao estado e aos valores que não precisam ser públicos ou manipulados fora da classe, ao mesmo tempo em que é concedido àqueles que deveriam e executando a tarefa disponibilizada internamente.
Um getter ou setter não quebra o encapsulamento quando há uma necessidade legítima de obter ou definir um valor. É por isso que os métodos podem ser tornados públicos.
Encapsulamento é manter os dados e os métodos que modificam esses dados diretamente juntos em um local lógico, a classe.
Neste caso em particular, é claramente necessário alterar o valor do queijo na aplicação. Independentemente de como isso é feito, via get / set ou add / remove, desde que os métodos estejam encapsulados na classe, você está seguindo o estilo orientado a objetos.
Para esclarecimento, darei um exemplo de como o encapsulamento é quebrado, fornecendo acesso, independentemente do nome do método ou da execução lógica.
Digamos que sua geladeira tenha uma "vida útil", apenas alguns carrapatos antes que a geladeira não esteja mais operacional (por uma questão de argumento, a geladeira não pode ser reparada). Logicamente, não há como um usuário (ou o restante do seu aplicativo) conseguir alterar esse valor. Deve ser privado. Seria visível apenas através, digamos, de um atributo público diferente conhecido como "isWorking". Quando a vida útil expirar, internamente, a geladeira estará funcionando como falsa.
A execução da contagem regressiva da vida útil e o acionamento do interruptor isWorking são todos internos à geladeira, nada fora poderia / deveria ser capaz de afetar o processo. O isWorking deve estar visível apenas, portanto, um getter não quebra o encapsulamento. No entanto, a adição de acessadores para elementos do processo de vida útil quebraria seu encapsulamento.
Como a maioria das coisas, a definição de encapsulamento não é literal, é relativa. Você deve conseguir ver o X fora da classe? Você deveria poder mudar Y? Tudo o que se aplica ao seu objeto está nesta classe ou a funcionalidade está espalhada por várias classes?
putCheese
adicionaria queijo ao refrigerador etakeCheese
o removeria - essas são abstrações orientadas a domínios (de nível superior), em vez de getters e setters de campos de objetos (que são abstrações de programação de computador (de baixo nível)).