Me gustaría mencionar un caso particular en el que tendría sentido tener menos métodos, más multipropósito: si hay mucho polimorfismo, es decir, muchas implementaciones de esta interfaz ; especialmente si esas implementaciones están en código desarrollado por separado que no puede actualizarse en sincronización (la interfaz está definida por una biblioteca).
En ese caso, simplificar el trabajo de escribir cada implementación es mucho más valioso que la claridad del uso de la misma, porque la primera evita errores de violación de contrato (los dos métodos son inconsistentes entre sí), mientras que la segunda solo perjudica la legibilidad, lo que puede ser recuperado por una función auxiliar o método de superclase que define getBalance
en términos decharge
.
(Este es un patrón de diseño, para el cual no recuerdo un nombre específico: definir una interfaz compleja amigable para las personas que llaman en términos de una interfaz mínima amigable para el implementador. En Mac OS clásico, la interfaz mínima para operaciones de dibujo se llamaba "cuello de botella" pero este no parece ser un término popular).
Si este no es el caso (hay pocas implementaciones o exactamente una), entonces tiene sentido separar los métodos para mayor claridad y permitir la simple adición de comportamiento relevante para cargas distintas de cero charge()
.