none
Classe Abstrata x Interface RRS feed

  • Pergunta

  • Pessoal,

    Antes de fazer esse post, li alguns anteriores, mas nenhum respondeu o que eu quero saber. Falaram que na abstrata tem implementação e na interface não. Tá... Mas eu posso definir uma classe abstrata com métodos abstratos, a qual trabalharia como uma interface.

    Qual a diferença entre usar uma classe abstrata com métodos abstratos para utilizar uma interface.

    Isso já tá dando nó nos neurônios. rsrsrsrs

    Obrigado a todos que puderem ajudar a esclarecer.
    terça-feira, 26 de setembro de 2006 13:37

Respostas

  • LSCampos, sem problemas...

    Uma interface é parecida com uma classe abstrata; a diferença é que uma classe abstrata pode possuir métodos que não estejam implementados e pode possuir métodos que estejam implementados e uma interface somente possui métodos que não possuem implementação.Geralmente a interface é usada para existir um padrão, ou seja todos os programadores que estiverem no projeto faram os metodos com a mesma assinatura...

    Classes Abstratas

    Pode acontecer que ao escrever um método para uma classe você não saiba como ele vai ser implementado. Neste caso, a implementação será feita pela classe que herdar o método (a classe filha).

    Pode acontecer também que você saiba que um determinado método será sobreposto com certeza na classe filha; então por que definir sua implementação se ela não será usada ?.

    Nestes casos você apenas define a assinatura do método e deixa a definição por conta da classe irá herdar a classe pai.

    Estas classes são então chamadas classes Abstratas e o método que você não implementou é chamado de método abstrato.

    Um método abstrato é identificado pelo modificador - MustOverride - , e, a classe que possui este modificadoor não pode ser instanciada através da palavra chave New. Vamos a um exemplo:

    Imports System
    MustInherit Class Formas
        Public x As Integer = 9
        Public y As Integer = 0
    
        MustOverride Sub Desenho()
    
         Public Function Informacao() As String
              Informacao = "Uma classe abstrata"
         End Function
    End Class
    

    Vamos agora criar uma classe que deverá extender a classe abstrata ao fazer isto deveremos fornecer a implementação para todos os métodos que precisam ser sobrepostos.

    O método Desenho não esta implementado , apenas foi declarado , e deverá ser sobreposto na classe que herdar a classe Formas
    . Dizemos então que a classe Formas é uma classe Abstrata e o método Desenho é um método abstrato.
    Interfaces

    Uma interface somente possui métodos que não possuem implementação.

    Uma interface possui somente métodos que não estão implementados e que devem ser implementados pela classe que usar a interface.

    Como o VB.NET não suporta herança múltipla as interfaces permitem que uma classe extenda múltiplas interfaces contornando o problema (se é que isto é um problema ). Para implementar uma interface o VB.NET usamos o modificador - Implements .

    As interfaces são declaradas usando a palavra-chave - Interface. Geralmente o nome dado a uma interface começa com a letra I. Podemos ter duas sintaxes para o uso com interfaces:

    Interface IForma
    End Interface
    
    Class Linha
        Implements IForma 
    End Class
    Interface IForma
    End Interface
    
    Class Linha: Implements IForma
    End Class
     

    - Uma interface no VB.NET não pode conter campos , somente pode ter métodos , propriedades e eventos. Todos os membros de uma interface são públicos e não podem usar um modificador de acesso.

    - Na classe que implementa a interface , cada implementação do método precisa especificar o método da interface que ele implementa usando a palavra Implements seguido pelo nome da interface o nome do método.

    Espero ter ajudado ou respondido;
    terça-feira, 26 de setembro de 2006 15:30

Todas as Respostas

  • LSCampos, bom dia!

    Classes abstratas não são instanciadas, assim como as interfaces também não são.

    Classes abstratas permitem escrever algum método com implementação, as interfaces não permitem.

    As interfaces regem as características de uma determinada classe. E uma classe pode implementar '0-n' interfaces. Diferente das classes abstratas, onde só pode herdar de uma única.

    Coso ainda tenha dúvidas...por favor (http://www.macoratti.net/net_ica1.htm)

    Espero ter respondido ou ajudado vc;

     

     

     

     

    terça-feira, 26 de setembro de 2006 14:59
  • César,

    Isso responde parte da minha pergunta sim, mas esqueci de colocar o pq dessa dúvida. Quando usar um e quando usar outro? Existe alguma limitação em alguns casos onde vc teria como opção apenas uma dessas? Sei lá... Algo que funcionaria apenas com interface ou algo que funcionaria apenas com classe abstrata. Ou talvez que fosse mais indicado...

    Obrigado pela atenção...
    terça-feira, 26 de setembro de 2006 15:13
  • LSCampos, sem problemas...

    Uma interface é parecida com uma classe abstrata; a diferença é que uma classe abstrata pode possuir métodos que não estejam implementados e pode possuir métodos que estejam implementados e uma interface somente possui métodos que não possuem implementação.Geralmente a interface é usada para existir um padrão, ou seja todos os programadores que estiverem no projeto faram os metodos com a mesma assinatura...

    Classes Abstratas

    Pode acontecer que ao escrever um método para uma classe você não saiba como ele vai ser implementado. Neste caso, a implementação será feita pela classe que herdar o método (a classe filha).

    Pode acontecer também que você saiba que um determinado método será sobreposto com certeza na classe filha; então por que definir sua implementação se ela não será usada ?.

    Nestes casos você apenas define a assinatura do método e deixa a definição por conta da classe irá herdar a classe pai.

    Estas classes são então chamadas classes Abstratas e o método que você não implementou é chamado de método abstrato.

    Um método abstrato é identificado pelo modificador - MustOverride - , e, a classe que possui este modificadoor não pode ser instanciada através da palavra chave New. Vamos a um exemplo:

    Imports System
    MustInherit Class Formas
        Public x As Integer = 9
        Public y As Integer = 0
    
        MustOverride Sub Desenho()
    
         Public Function Informacao() As String
              Informacao = "Uma classe abstrata"
         End Function
    End Class
    

    Vamos agora criar uma classe que deverá extender a classe abstrata ao fazer isto deveremos fornecer a implementação para todos os métodos que precisam ser sobrepostos.

    O método Desenho não esta implementado , apenas foi declarado , e deverá ser sobreposto na classe que herdar a classe Formas
    . Dizemos então que a classe Formas é uma classe Abstrata e o método Desenho é um método abstrato.
    Interfaces

    Uma interface somente possui métodos que não possuem implementação.

    Uma interface possui somente métodos que não estão implementados e que devem ser implementados pela classe que usar a interface.

    Como o VB.NET não suporta herança múltipla as interfaces permitem que uma classe extenda múltiplas interfaces contornando o problema (se é que isto é um problema ). Para implementar uma interface o VB.NET usamos o modificador - Implements .

    As interfaces são declaradas usando a palavra-chave - Interface. Geralmente o nome dado a uma interface começa com a letra I. Podemos ter duas sintaxes para o uso com interfaces:

    Interface IForma
    End Interface
    
    Class Linha
        Implements IForma 
    End Class
    Interface IForma
    End Interface
    
    Class Linha: Implements IForma
    End Class
     

    - Uma interface no VB.NET não pode conter campos , somente pode ter métodos , propriedades e eventos. Todos os membros de uma interface são públicos e não podem usar um modificador de acesso.

    - Na classe que implementa a interface , cada implementação do método precisa especificar o método da interface que ele implementa usando a palavra Implements seguido pelo nome da interface o nome do método.

    Espero ter ajudado ou respondido;
    terça-feira, 26 de setembro de 2006 15:30
  • Vou botar a mão na massa pra ver o que sai. Aí que vou ver as limitações e necessidades.

    Obrigado, César!
    terça-feira, 26 de setembro de 2006 17:27
  • Por nada LsCampos, boa sorte cara...

    [  ]s
    terça-feira, 26 de setembro de 2006 19:10