thingol wrote:O que eu costumo fazer:
- Prefiro interfaces
- Só uso herança quando estritamente necessário
- Normalmente é melhor fazer o seguinte:
a) Definir uma interface - exemplo: Canideo
b) Definir uma "implementação padrão" para essa interface (uma classe) - exemplo: CanideoImpl. Essa implementação pode ser usada com casca e tudo (sem herança direta). Exemplo:
c) Se precisar criar uma classe que também implemente essa interface (como Raposa), mas que tem algo um pouco diferente, você faz mais ou menos a mesma coisa que fiz para criar a classe Cao:
Thingol, não leve isso pro lado pessoal, mas vou criticar sua proposta.
É o seguinte: nesse tipo de implementação, é melhor usar herança, porque você está lidando com uma relação do tipo especialização/generalização. Eu vejo intefaces como um recurso útil quando as classes possuem uma relação de associação simples, e não se quer uma dependência em tempo de compilação.
E se repararmos bem, as classes Raposa e Cao ficaram esquisitas, pois elas tanto obedecem a um contrato de Canideo quanto possuem uma implementação de Canideo. Se for pra ser assim, melhor herdar uma classe Canideo logo de uma vez, porque aí as subclasses recebem o contrato e a implementação de uma só vez e com código mais bonito.
Veja como fica:
This message was edited 1 time. Last update was at 14/12/2007 07:05:12
|