Classe Abstrata X Interface
Note que, tanto a interface como a classe abstrata não implementam os dois métodos. Surge então a pergunta: então qual a diferença?
Podemos citar algumas pequenas diferenças:
| Classe abstrata | Interface |
| Pode ter ou não alguma implementação. Pode também ter variáveis membros, métodos não abstratos ou propriedades. | Não tem implementações ou váriaveis membros. |
| Pode derivar de apenas uma classe base, mesmo que essa classe base seja abstrata, mas pode derivar de quants interfaces for necessario. | Só pode derivar de interfaces. |
| Pode ter métodos e propriedades não publicos, ou seja, private ou protected. | Todos os membros são publicos. |
| Pode ter métodos e membros estaticos (static) e definir constantes. | Não pode ter nenhum desses items. |
Porque essas pequenas diferenças?
Uma comparação bastante utilizada para a definição de interfaces é que elas atuam como um contrato entre o cliente e o provedor do serviço (a classe que implementa a interface) no qual o cliente está interessado. Num contrato, todas as regras tem que estar muito bem definidas, ou seja, tudo tem que ser mostrado publicamente e nada pode ser escondido. Imagine só um contrato onde algumas informações estivessem escondidas ou mesmo escritas com as famosas “letras miudas”. Desse modo, quando se fala em uma interface, ou contrato, o cliente pode seguramente se basear no que está escrito no contrato (interface) porque tudo o que está la escrito será cumprido pelo provedor dos serviços. Pensando dessa maneira, agora fica claro porque todos os membros de uma interface são publicos e muito bem definidos e porque na interface não consta nenhum detalhe da implentação. Mesmo que haja alterações na implementação, isso não afeta o cliente que se baseia numa interface que, por definição, é imutável. Isso também permite ao .Net prover um alto grau de desacoplamento entre o cliente e o provedor uma vez que a interface não tem nenhum conhecimento das implementações que ficam encapsuladas atras da interface, ou seja, no provedor (classes).
O provedor fica ivre para levar a efeito as implementações, contanto que o conteudo do contrato (interface) seja respeitado. Obviamente que o provedor pode fornecer muito mais do que consta no contrato, o que não faz diferença para o cliente pois não afeta a interface, mas nunca menos para que não haja quebra de contrato.
Texto copiado de:
http://www.byteshift.com/Artigos/74.aspx
Autor: Carlos R. Lacerda.
Comments (0)
You don't have permission to comment on this page.