Duvidas sobre Interface e Classe Abstrata

04/03/2009

Olá Pessoal estou eu aqui mais uma, vez a duvida de hoje é a seguinte Eu tenho um sistema de gestão que esta projetada da seguinte forma: Tenho uma Classe abstrata Parceiro e classe filhas como Fornecedor, Cliente, Funcionário e Transportadora. Optei por essa abordagem devido ao pensamento que.  Como tudo é parceiro na minha regra de negocio eu poderia vender para um fornecedor ou funcionário ter contas a pagar com todo esse grupo que herda de parceiro. Tenho duas perguntas vocês concordam com essa minha linha de pensamento?  E quais os pros e contras dessa abordagem? Outra pergunta vocês acham necessário o uso de um a interface para a minha classe parceiro que é abstrata, esse tipo de implementação é legal?(Uma Interface para uma Classe Abstrata?) Justifique sua resposta. Hehehe!!!  Isso esta parecendo um questionário de escola...
Daniel Porfirio

Daniel Porfirio

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

04/03/2009

Olá Daniel,   A seguir um pequeno roteiro para ajudá-lo a tomar a melhor decisão .... O que é uma classe abstrata ? Suponha que vamos criar várias classes que têm métodos em comum e outros métodos funcionam diferente para cada classe. Uma forma de fazer isso é usar as classes abstratas.

- As classes abstratas tem pelo menos um método abstrato, ou seja um método que não tem corpo.
- Se um método tem uma classe abstrata ele deve ser declarado como um método abstrato.
- Não podem ser criadas instâncias de classes abstratas.
- Ao criar uma classe usando uma classe abstrata como herança devem ser criados os corpos para os métodos abstratos.
- Para criar uma classe usando uma classe abstrata como herança basta usar a palavra-chave inherits(java) ou : (no seu caso .net) , como em uma classe normal
- Um método abstrato é identificado pelo modificador - MustOverride - , a classe que possui este modificador não pode ser instanciada através da palavra chave New. Vamos ao exemplo: O que são Interfaces ? Interfaces podem ser entendidas como um tipo de classe abstrata em que todos métodos são abstratos. - Em uma interface nenhum método tem corpo e são implicitamente abstratas e publicas
- Assim como uma classe abstrata , uma interface não pode ser instanciada.
- Uma classe pode implementar mais de uma interface
- Uma interface não pode conter um construtor
- Ao criar uma classe usando uma interface devem ser feitos os corpos de todos os métodos da interface, caso contrario deverá ser criada uma classe abstrata.
- Para implementar uma interface no VB.NET usamos o modificador - Implements . Seguem as comparações de prós e contras de ambas. Interfaces      x     Classes Abstratas Característica Interface Classe Abstrata Herança múltipla Uma classe pode implementar diversas interfaces Uma classe pode herdar  somente uma classe Implementação Padrão Uma interface não pode conter qualquer tipo de código, muito menos código padrão. Uma classe abstrata pode fornecer código completo , código padrão ou ter apenas a declaração de seu esqueleto para ser posteriormente sobrescrita. Constantes Suporte somente constantes do tipo estática. Pode conter constantes estáticas e de instância. Componentes de terceiros Uma implementação de uma interface pode ser incluída a qualquer classe de terceiros. Uma classe de terceiros precisa ser reescrita para estender somente a partir da classe abstrata. Homogeneidade Se todas as diversas implementações compartilham a assinatura do método então a interface funciona melhor. Se as várias implementações são todas do tipo e compartilham um comportamento e status comum , então a classe abstrata funciona melhor. Manutenção Se o código do seu cliente conversa somente em termos de uma interface, você pode facilmente alterar a implementação concreta usando  um método factory. idêntico Velocidade Lento , requer trabalho extra para encontrar o método correspondente na classe atual. Rápido Clareza Todas as declarações de constantes em uma interface são presumidamente publicas ou estáticas. Você pode por código compartilhado em uma classe abstrata. Você pode usar código para computar o valor inicial de suas constantes e variáveis de instância ou estáticas. Funcionalidades Adicionais Se você incluir um novo método em uma interface você precisa ajustar todas as implementações da interface. Se você incluir um novo método em uma classe abstrata você tem a opção de fornecer uma implementação padrão para ele.     Caso ainda alguma dúvida persista, por favor me comunique. Abraços   Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

04/03/2009

E ai Daniel,   Suas dúvidas foram sanadas? Aguardo seu contato.   Abraços Luiz Maia
GOSTEI 0
Daniel Porfirio

Daniel Porfirio

04/03/2009

Na verdade Luiz eu queria mesmo que vc me desse a sua opinião sobre a modelagem que eu fiz e me dizer se essa modelagem tem algum ponto negativo
GOSTEI 0
Luiz Maia

Luiz Maia

04/03/2009

Daniel,   Os pros e contras de se usar esta abordagem estão no quadro comparativo abaixo. Quanto a Interface para sua classe abstrata, vc precisará tratar dela como uma classe comum (mas abstrata nos metodos), nao precisa da Interface, ja que nela vc tera atributos e propriedades que serão necessarias na codificação de suas heranças.   Sua abordagem esta correta!!!   Todas as outras classes herdarão da Parceiros.   Lembrando que todos os seus metodos de Parceiros devem ser abstratos tb, assim vc consegue um override (sobrecarga) e cada classe filha possa ter um comportamento diferente.   Abraços Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

04/03/2009

Daniel,   Suas dúvidas foram sanadas?   Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

04/03/2009

Daniel,   Como não obtivemos mais respostas e contatos, estamos procedendo com a conclusão deste chamado. Estamos a sua disposição para qualquer dúvida. Abraços e até a próxima. Att Luiz Maia
GOSTEI 0
POSTAR