Eu gostaria de mencionar um caso específico em que faria sentido ter menos métodos, mais polivalentes: se houver muito polimorfismo, ou seja, muitas implementações dessa interface ; especialmente se essas implementações estiverem em código desenvolvido separadamente e não puderem ser atualizados em sincronia (a interface é definida por uma biblioteca).
Nesse caso, simplificar o trabalho de escrever cada implementação é muito mais valioso do que a clareza de uso, porque a primeira evita erros de violação de contrato (os dois métodos são inconsistentes entre si), enquanto a última apenas prejudica a legibilidade, o que pode ser recuperado por uma função auxiliar ou método de superclasse que defina getBalance
em termos de charge
.
(Esse é um padrão de design, para o qual não recordo um nome específico: definição de uma interface complexa e amigável para quem chama em termos de uma interface mínima para o implementador. No Classic Mac OS, a interface mínima para operações de desenho era chamada de "gargalo" mas esse parece não ser um termo popular.)
Se esse não for o caso (existem poucas implementações ou exatamente uma) charge()
, faz sentido separar os métodos para maior clareza e permitir a simples adição de comportamentos relevantes a cobranças diferentes de zero .