none
interfaces e classes abstratas RRS feed

  • Pergunta

  • Bom Dia Galera

     

    Bom, galera a base que eu tive de oop eu tive no curso que fiz para mcp.net, mas assim ficou algumas coisas que acabei não usando e hoje eu não encontro uma aplicação para isso.

     

    Queria entender um pouco mais sobre interfaces, não é tanto como se cria, mas sim um caso de uso, quando usar, porque usar e se alguém tiver um projetinho de exemplo mostrando o uso de interfaces, já li sobre um caso de uso para interface, abstração do banco de dados, mas não consigo raciocinar pensando em interfaces, esse mal é pq vim do VB6, e eu programava POG (programação orientada e gambiarra) hoje eu estou me esforçando muito para programar 100% OOP, mas ta difícil quem sabe me falta o conhecimento sobre interfaces.

     

    Aproveito para agradecer a ajuda que tive na theed sobre serialização dos objetos, a ajuda de vocês foi bem esclarecedora.

     

    Ate mais galera


    Estudando muito como sempre!
    quinta-feira, 9 de julho de 2009 13:01

Respostas

Todas as Respostas

  • quinta-feira, 9 de julho de 2009 15:28
    Moderador
  • Elisson, tambem tive um problema para entender a diferença de se usar uma classe abstrata e uma interface.

    Não por causa das diferenças... mas na pratica mesmo... aconteceram variaz veses eu começar usando interface e no final passar para classe abstracta...

    Eu particulamente uso Interface para integraçao de sistemas, por exemplo quando vou implementar um framework ou uma ferramenta que vai me automatizar um processo...

    Porque ? Nesses casos eu nao me preocupo com a intancia do objeto e sim com a sua estrutura

    Passando para um exemplo pratico é a criaçao de plug-ins:

    Para cria um plugin existem certas estruturas de dados que eu sei que vou prescisar usar, tais como o Nome do Plugin, uma descriçao, uma classificaçao para ele um metodo para executar o mesmo e um para terminar a execucao

    o que me gera um interface do tipo:

    public interface IPlugin {
          Nome { get; }
          Descricao { get; }
          Run();
          Stop();
    }

    entao toda library que eu crio eu uso essa interface e o no meu aplicativo nao presciso me preocupar com q esse plugin faz, pois seja la qual for eu sei como recuperar seu nome e como inciar e parar seu processo.

    mas pq nao usar uma classe abstrata para isso ? Pq como eu nao sei o que vou fazer com esse plugin ainda, usar uma classe abstrata iria impedir que o mesmo herda-se alguma outra classe, pois eu posso implementar varias interfaces em uma classe, mas apenas posso herdar de uma unica classe.

    entao meu plugin podeia ser algo to tipo

    public class SqlServerMonitor: Monitor, IPlugin { }

    imaginando que eu tenha uma classe monito (abstrata ou nao) que ja implementa algums metodos de gravacao de log por exemplo.... se meu IPlugin fosse uma classe e nao uma interface, eu teria q reimplementar todos esse metods novamente, gerando ai uma duplicaçao de codigo

    Espero ter fica claro...

    No mais os link do Caio ja sao um bom começo para um estudo mais aprofundado U.U
    Se não funciona de um jeito, tente de outro totalmente diferente ^_^
    • Sugerido como Resposta Eduardo Oliveira terça-feira, 26 de julho de 2011 02:35
    quinta-feira, 9 de julho de 2009 16:33
    Moderador
  • Fala Elisson,

    Tudo bem?

    Bom... tem algo q eu escrevi sobre conceitos de oop q podem te ajudar um pouco: http://ericlemes.wikidot.com/dotnet-oop

    Sobre o conceito de classe abstrata x interface é relativamente simples criar uma diferenciação. Na classe abstrata, vc pode ter algum comportamento abstrato implementado. Na interface não (interface não tem código dentro dela, só a definição das assinaturas dos métodos). Teoricamente pensando dessa forma seria sempre melhor usar classes abstratas, porém, como um classe só pode herdar de UMA classe, interface pode ser mais vantajoso. Eu gosto de usar as duas coisas. 

    Qdo tenho algum tipo de abstração que posso ganhar código criando código abstrato, uso uma classe abstrata que implementa uma interface. Assim quem está usando a minha interface ainda tem a opção de herdar de um código algum comportamento (herdando da classe abstrata) ou implementando do zero. Fica a gosto do freguês. ;-)

    Sobre ainda a idéia de abstrações porém, só usando interfaces, o Spring tem um conceito bacana. Dá uma olhada nisso que pode ser interessnate pra vc: http://ericlemes.wikidot.com/dotnet-spring-pt1


    Abraço,

    Eric
    sexta-feira, 10 de julho de 2009 12:05