Interface Segregation Principle
Princípio da Segregação de Interfaces, em pt-BR.
Este princípio define que:
Uma classe nunca deve ser forçado a implementar uma interface ou método que ele não utiliza
Casos assim, normalmente ocorrem quando criamos classes ou interfaces muito genéricas com o intuito de "abraçar o mundo", ou seja, uma classe que tentar abranger todos os casos de um uso da nossa aplicação.
Como exemplo, vamos retornar a nossa classe Shape.
A classe Shape, é normalmente utilizada como classe base para as classes Square e Circle, figuras geométricas cujas classes implementam o método area.
Agora vamos supor que desejemos tornar nossa classe Shape ainda mais abrangente, fazendo com que ela represente figuras geométricas 3D (cubo, esfera, etc.). Para isso, adicionamos a ela o método volume, responsável por calcular o volume dessas figuras.
Agora repare que com a adição do método volume, todas as nossas subclasses também serão obrigadas a implementar esse método. Entretanto, não faz sentido algum as classes Square e Circle possuírem o método volume, já que elas representam figuras 2D (Quadrado e Círculo, respectivamente). Elas nem mesmo irão utilizar esse método. Ao forçarmos as classes Square e Circle implementarem o método volume, nós estamos desobedecendo ao Princípio da Segregação de Interfaces. O ideal nesse caso, seria criar uma nova classe diferente de Shape e fazer com que as subclasses representando figuras 3D implementem o método volume.
Fontes
https://web.archive.org/web/20150905081110/http://www.objectmentor.com/resources/articles/isp.pdf
Last updated