Orientação a objetos: Classe Abstrata VS Interface | por André Baltieri

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

Комментарии • 112

  • @haynersan
    @haynersan 4 года назад +102

    Vamos ver se entendi:
    Interface é do tipo: ajoelhou tem que rezar. Ou seja, herdou TEM QUE implementar.
    Classes abstratas: se herdar nem precisa ajoelhar. As orações já estão prontas e você ainda PODE ou NÃO customizar suas orações.
    Faz sentido estas analogias?

    • @baltaio
      @baltaio  4 года назад +3

      Sim!

    • @robsonsilva9490
      @robsonsilva9490 3 года назад +5

      Cara, isso foi sensacional!

    • @marcionp
      @marcionp 3 года назад +7

      Na realidade, não se herda uma interface, mas sim, implementa-se certo?

    • @diadetediotedio6918
      @diadetediotedio6918 2 года назад +2

      Na verdade classes abstratas são usadas pra definir contratos de abstração, se você herdar e não for uma classe abstrata então você tem de implementar.

    • @matheusfhillypoliveiramatt2090
      @matheusfhillypoliveiramatt2090 Год назад

      adorei kkkkk

  • @marcionp
    @marcionp 3 года назад +14

    Gosto de pensar em termos de "É" ou "Sabe fazer". Sempre que algo É, uso classe abstrata. Já se algo Sabe fazer, uso interface. Não é regra mas ajuda

  • @lucasalcantara6044
    @lucasalcantara6044 Год назад +4

    Cara, esse é o 4o vídeo que assisto sobre o assunto, fora os do curso de C# que fiz, e o seu foi o único que me fez entender. Muito obrigado e parabéns pelo trabalho!

    • @baltaio
      @baltaio  Год назад

      Que bom que ajudou 💜

  • @danilocalixto
    @danilocalixto Год назад +1

    Sensacional esclareceu muito bem a diferença e os exemplos práticos tornam o entendimento extremamente facilitado. Estou curtindo muito o C# cada vem mais entendendo o motivo de ser a linguagem queridinha de muitos Devs.

    • @baltaio
      @baltaio  Год назад

      🚀🚀🚀🚀

  • @mcmxcivviixxiii
    @mcmxcivviixxiii 4 года назад +28

    Balta, faz uma série explicando sobre o DDD e como utilizar corretamente essa estrutura.

    • @baltaio
      @baltaio  4 года назад +6

      DDD não está ligado a código diretamente, isto é OOP!
      Mas temos curso disso já => balta.io/cursos/modelando-dominios-ricos

    • @robsonsilva9490
      @robsonsilva9490 3 года назад

      Opa cara, tenta descolar o livro da capa vermelha que é sucesso!

  • @dani9153blue
    @dani9153blue Год назад +1

    muito massa suas aulas ,ensina de maneira clara e objetiva ,muito Obrigado

  • @pabloleite8604
    @pabloleite8604 2 года назад +1

    Muito obrigado por essa didática incrível das aulas!

  • @muriloteixeira5541
    @muriloteixeira5541 3 года назад +4

    Seus vídeos ensinando e programando me ajudam muito. Tenho 15 anos e adoro estudar programação... Muito obg pelos seus vídeos,
    Abraço.

  • @danillopinheironeto
    @danillopinheironeto 4 года назад +5

    Balta, excelente vídeo. Senti falta dos métodos abstratos, que servem também como "contratos" a serem implementados pelos filhos que herdarem da classe abstrata.

  • @Leanst.
    @Leanst. 4 года назад +3

    Bom vídeo! No caso de interfaces eu definiria como uma ótima ferramenta para objetos falaram com outros objetos com o mínimo de acoplamento. Uma outra vantagem dela é definir contratos para terceiros usarem determinados serviços de forma fácil sem você precisar expor profundezas da sua biblioteca, basta criar o objeto seguindo o contrato/doc e enviar este objeto para o usuário ( classes, objetos, APIs, etc). Outra coisa muito útil da Interface também é orientar como implementar/navegar determinados métodos e possibilidades seguindo uma 'receita de bolo' que está na definição da interface, muitas vezes, usando centenas de serviços de bibliotecas, eu não preciso conhecer tudo dela, mas uma interface me guia pelo grafo de classes até conseguir usar o serviço que preciso sem que eu necessite fazer um hack mais profundo no código alheio, claro , o programador que criou a interface tem que ter isto em mente. A interface permite manter muito mais simples a navegação pelos objetos do grafo de classes, simplificando o entendimento de regras de negócios onde (menos é mais...). Fica aí meus 50 centavos sobre Interfaces.

  • @matheusmgp1
    @matheusmgp1 Год назад +1

    Show ,como sempre muito didático.

  • @americobila6741
    @americobila6741 Год назад +1

    Bem explicado👌, parabéns!

  • @albertolotz
    @albertolotz 3 года назад

    Que legal boa explicação, bom ver informações de quem tem experiência.

  • @marcioalexandremarcondes557
    @marcioalexandremarcondes557 Год назад +1

    Muito boa explicação!

  • @Cyrus_Michael
    @Cyrus_Michael 2 года назад +1

    Muito obrigado pelo vídeo

  • @juliocesarrodrigues9039
    @juliocesarrodrigues9039 2 года назад +1

    Muito bom, abraço!

    • @baltaio
      @baltaio  2 года назад

      Não tem não :) 💜

  • @rvleustaquio
    @rvleustaquio 4 года назад +1

    Sensacional! Obrigado Balta! Abri mais ainda minha mente.

  • @leo3030100
    @leo3030100 Год назад +1

    Top, parabéns pelo conteudo!

  • @VictorGabriel-hw2gr
    @VictorGabriel-hw2gr 2 года назад +1

    Genial professor, muito obrigado pelo conhecimento

  • @DiogoSilva-mz2pe
    @DiogoSilva-mz2pe 4 года назад +1

    Vídeo muito bem objetivo, e de fácil entendimento. Muito boa suas iniciativas em disponibilizar conteúdo gratuito e de qualidade. Parabéns, e que Deus te dê forças para continuar a ajudar ao próximo.

  • @AlexandreSpreaficoNovaes
    @AlexandreSpreaficoNovaes 4 года назад +2

    Top demais, agora que vi q no começo vc fala das implementacoes em interfaces 👏👏👏

    • @baltaio
      @baltaio  4 года назад +2

      hahahaha quase deu spoiler né! hahahaha

  • @EdJastre
    @EdJastre 4 года назад +2

    Muito bom Balta, continua que tá top

  • @canalstartinside
    @canalstartinside 2 года назад +1

    Perfeito como sempre. Balta, fala sobre Contructs e quem sabe um dia fala um pouco sobre o C# para Games como na GE Unity. Conteúdo Top!

    • @baltaio
      @baltaio  2 года назад

      💜💜💜💜

  • @caiocarneiro1817
    @caiocarneiro1817 4 года назад +1

    Parabéns Balta! Sempre conteúdo com muita qualidade.

  • @doctor-hook
    @doctor-hook 9 месяцев назад +2

    O pior que a forma que ele explicou é bem simplista, porque os conceitos são um pouco mais complicado. Interfaces são responsáveis por implementar "qualidade" ou "capacidade" por exemplo IRunnable obriga as classes filhas implementar o método Run. Já classes abstratas, são responsáveis por exigir que uma determinada classe tenha um comportamento preferindo ou a definir, em no caso dos métodos abstratos. Como eu disse, o buraco é mais embaixo.

  • @joaocarlossousafe4364
    @joaocarlossousafe4364 4 года назад +2

    Excelente vídeo

  • @GoriRJ
    @GoriRJ 4 года назад +1

    Direto! Muito bom!

  • @lmormilho
    @lmormilho 2 года назад +1

    Top...show...

    • @baltaio
      @baltaio  2 года назад

      💜💜💜💜

  • @marcelocorreadossantos1243
    @marcelocorreadossantos1243 4 года назад +1

    Muito obrigado me ajudou muito a distinguir os dóis conceitos

  • @romirantonio3736
    @romirantonio3736 3 года назад

    Parabéns André bem esclarecedor.

  • @nathanfarias591
    @nathanfarias591 2 года назад +1

    Excelente vídeo!!!

  • @brunotdantas
    @brunotdantas 4 года назад +1

    Muito Legal Balta esse vídeo. Terminei recentemente teu curso sobre fundamentos do C# e achei bem completo. Seria interessante se você tivesse um curso como o de fundamentos porém mais avançado, que ensinasse conceitos como este agora que você explicou.
    Valeu!

    • @baltaio
      @baltaio  4 года назад +1

      Show demais Bruno, fico feliz que curtiu!
      Estou produzindo o de OOP/SOLID/Clean Code e depois quero sim colocar um de C# avançado

  • @SamuellRalph
    @SamuellRalph 4 года назад +1

    Parabéns, o vídeo ficou muito bom e bem didático.

  • @priscilareboucas4348
    @priscilareboucas4348 4 года назад +1

    Muito bom !!!!

  • @josuealves7929
    @josuealves7929 8 месяцев назад +1

    Show

  • @fleal07
    @fleal07 4 года назад +2

    Muito bom...

    • @baltaio
      @baltaio  4 года назад

      Obrigado Felipe!

  • @anderrsondiiego
    @anderrsondiiego Год назад +1

  • @murilogouvea5817
    @murilogouvea5817 4 года назад +1

    topissimo cara

  • @augustohaselein9623
    @augustohaselein9623 4 года назад +1

    Muito boa a explicação, gostaria muito de uma explicação sobre o DDD.

    • @baltaio
      @baltaio  4 года назад

      Boas Augusto, temos cursos e vídeos sobre o assunto aqui no canal!

  • @williamgomes3730
    @williamgomes3730 3 года назад

    CANAL BOM DEMAIS, PARABÉNS. Há um video explicando "virtual" e tbm a divisão de um projeto dentro de dotNet? Tipo, controller, infra, application..

  • @diadetediotedio6918
    @diadetediotedio6918 2 года назад +1

    Balta, uma coisa importante, classes abstratas podem literalmente definir contratos como as interfaces, bastando marcar o método ou propriedade com 'abstract' ao invés de virtual. Desse modo, ele não permite implementação.
    A diferença de um contrato abstract pra um de interface é que o de um abstract vai agir como um contrato para um método virtual, então se você tivesse:
    public abstract void Pagar();
    E tivesse uma classe que herda Pagamento, como uma PagamentoViaReal, você poderia fazer:
    public override void Pagar() {... código aqui ...}
    E se você depois viesse a ter uma outra classe que herda desse tipo PagamentoViaReal, como uma PagamentoViaPix, você teria as mesmas vantagens dos métodos virtuais, podendo fazer isso:
    public override void Pagar()
    {
    base.Pagar();
    ... mais código aqui ...
    }

    • @baltaio
      @baltaio  2 года назад +1

      Bom dia, @DiadeTedio Tedio, muito obrigado pelo feedback 💜
      Na verdade não podem... há uma similaridade entre e até uma confusão em relação a isto... Toda classe é uma implementação concreta, você tem comportamento nela, então para mockar um simples teste por exemplo, teria que ser uma interface (DIP do SOLID por exemplo).
      Outro ponto é que podemos implementar várias interfaces no C#, mas só podemos herdar uma classe, então não daria para seguir por exemplo o ISP do SOLID.
      Tem mais detalhes, mas não dá pra comentar tudo aqui....
      Mas realmente, causa confusão... principalmente por que as interfaces a partir do C# 9 permitem comportamento padrão 😋... e ai? hahahahah

    • @diadetediotedio6918
      @diadetediotedio6918 2 года назад

      @@baltaio
      Boa noite! Eu fico muito feliz em poder contribuir para as discussões.
      No caso, isso é um pouco problemático, classes abstratas não podem ser tipos concretos por definição, elas podem fornecer implementações (mesmo interfaces podem hoje em dia) e podem não ser as mais adequadas ao ISP (por não serem interfaces, de fato), assim como podem não ser adequadas ao DIP (algo que eu não sustentei), mas elas definitivamente podem definir contratos (no sentido de métodos e propriedades que precisam ser implementados por quaisquer classes filho que herdem destes). Dito isso, as interfaces são definitivamente as mais adequadas para haver decoupling.

  • @jrodrigo887
    @jrodrigo887 4 года назад +1

    Top demais, Balta!
    Parabéns pelos conteúdos, estou revisitando assuntos bases que estudei na faculdade.
    Poderia trazer também conteúdos sobre Arquitetura Limpa. Um abraço!

  • @cafeteoricotv5330
    @cafeteoricotv5330 3 года назад +1

    Ótimos exemplos. Interfaces sempre foram uma pedra no meu sapato. Só fui entender mesmo quando enxerguei o porquê de usá-las. Tem um autor que diz que "interface é um ponto de variação, é por onde o software cresce". É bem complicado de entender no início. 😭

  • @ThiagoNPE
    @ThiagoNPE 4 года назад +1

    Balta, se possível, poderia tirar duas dúvidas ?
    Primeiro: O que acha dessa possibilidade de implementar código na interface, indo para além do que falou no início do vídeo ?
    Segundo: Levando em consideração o exemplo que deu nesse vídeo, caberia o Pattern Facade para trabalhar com os diversos tipos de pagamentos ou estou pensando errado ?
    Obrigado pelos vídeos, muito esclarecedores.

    • @baltaio
      @baltaio  4 года назад

      Bom dia Thiago, como vai?
      Primeiro: Acho que é isto mesmo... algo mais pontual...
      Segundo: O padrão fachada serve para abstrair situações mais complexas. No caso você poideria ter uma fachada que esconde qual pagamento vai implementar, tomando apenas como base os dados da requisição. Agora substituir o pagamento neste cenário acho que não.

  • @marcosxavier641
    @marcosxavier641 4 года назад +1

    Balta, excelente vídeo. Na minha concepção você poderia ter trazido a explicação da palavra chave new em um método das classes derivadas. E também o que acontece se eu não usar a palavra virtual no método da classe base e override no método da classe derivada, o compilador coloca alguma palavra automaticamente? Ele define automaticamente a palavra new?
    Obrigado pela explanação.

    • @baltaio
      @baltaio  4 года назад

      Obrigado pelo feedback Marcos, mas acho que neste caso seria algo bem mais básico... para estudar o assunto Classes Abstratas VS Interfaces você já precisa ter esta base.

  • @hemersonmilano9791
    @hemersonmilano9791 4 года назад +1

    balta, faz uma promoção do acesso anual para eu conseguir assinar seus cursos...seus cursos são muito top...parabens

    • @baltaio
      @baltaio  4 года назад

      Só na Black Friday agora :D

  • @moacir8663
    @moacir8663 4 года назад +2

    Resumindo: interface é quando você quer definir um modelo a ser adotado por todas as classes que a implementam, e classe abstrata é a implementação de um comportamento.

  • @rochagasdiniz
    @rochagasdiniz 4 года назад +1

    Já vi fazerem muito essa pergunta em entrevistas de emprego

    • @baltaio
      @baltaio  4 года назад

      hahahaha imagino!

  • @erickmaia
    @erickmaia 4 года назад +2

    Excelente tema. Me pego confuso com isso às vezes.
    Só tem algo do vídeo que não entendi muito bem:
    Aos 1:49 você diz que não podemos implementar métodos em interfaces.
    No entanto, aos 13:44 você implementa um método em uma interface.
    Simulei a segunda situação no Visual Studio, o IDE não acusou qualquer problema e compilei o código com sucesso.

    • @iuryferreira8132
      @iuryferreira8132 4 года назад +3

      Não sou o Balta, mas... o Suporte a Implementação foi adicionado recentemente a partir do C# 8, e só deve ser usado em cenários que é pertinente o uso. Normalmente (Leia-se na maioria dos casos), a interface não deve conter implementações.

    • @baltaio
      @baltaio  4 года назад +1

      Isso aí

  • @ARMAlexMello
    @ARMAlexMello 3 года назад +1

    Balta, olá! Sou novo aqui em seu canal e também novo em C#. Programava em PHP quando minha área era web. Mas, se me permite, gostaria de passar uma dica sobre como explicar código para a gente, pois meu pensamento pode ser pensamento de muitos. Na orientação a objetos, a minha maior relutância foi, pra quê fazer isso se eu estou programando sozinho!? Ou seja, aquela sensação de fez e rodou o cliente não irá nem ver (então para quê eu vou criar regras para eu mesmo seguir?). Ok, forma super errada de pensar, mas, eu acrescentaria nessa explicação trechos de código que outros programadores da equipe iria fazer. Entende? Ou seja, em uma equipe grande, pelo menos na minha cabeça, o desenvolvedor sênior -que é o que mais entende das regras de negócio- que iria criar parte principal do código, como as Interfaces... os plenos e júniores é que iriam terminar de implementar. Então, quando se acrescenta hierarquia no desenvolvimento em equipe faz mais sentido a orientação a objetos. Ou, pode ser que as empresas realmente não trabalhe assim e trabalhe cada um fazendo o seu, mas, fazendo o certo. Mas quero deixar aqui que vc explica muito gostei e já gostei muito do seu canal. Parabéns!

  • @matheusvilela1637
    @matheusvilela1637 3 года назад +1

    Qual tema vc usa Balta?

    • @baltaio
      @baltaio  3 года назад +1

      balta.io/blog/visual-studio-code-instalacao-customizacao

  • @eng.wandeson
    @eng.wandeson 2 года назад +1

    Professor, no caso eu posso criar um método de instância de uma classe e retornar isso e injetar com a interface? Ou seria melhor usar uma classe abstrata?

    • @baltaio
      @baltaio  2 года назад

      Consegue dar um exemplo?

    • @eng.wandeson
      @eng.wandeson 2 года назад

      @@baltaio Sim! Uma classe conexão e gostaria de injetá-la dentro das outras camadas da minha aplicação de forma abstrata, ou seja, depender de uma abstração ao invés de uma instância direta. Minha ideia é criar uma classe abstrata Conection e dentro por um método que instância e retorna uma instância da classe de Conexão. A minha dúvida é: Você disse que a partir do C# 8, 9 (uso o 9) é possível usar métodos dentro das interfaces. Eu posso fazer isso dentro de uma interface ou apenas dentro de uma classe abstrata mesmo? Porque em todas as vezes que eu for usar a classe conexão, eu uso a abstração que não precisa ser instanciada e deixo tudo centralizado em um lugar só. Conseguiu compreender a ideia? Não quero depender dos container, porque posso reaproveitar o código com mais facilidade.

  • @melband6720
    @melband6720 Год назад +1

    to penando pra aprender estes dois conceitos!

  • @joaocarlossousafe4364
    @joaocarlossousafe4364 4 года назад +1

    Interface me parece bastante como prototipos de funções em linguagem C.
    void cadastrar();
    void alterar();
    Int main()
    {
    return 0;
    }
    // implementação
    void cadastrar()
    {
    //restante do codigo aqui
    }
    void alterar()
    {
    //restante do codigo aqui
    }

    • @baltaio
      @baltaio  4 года назад

      Faz tempo que não trabalho com C, mas imagino que sejam algo assim!

  • @odevperovano
    @odevperovano 3 года назад

    Muito bom o vídeo, só não entendi qual o sentido de colocar Vencimento e Valor na interface, ela não deveria tratar de comportamentos(pagar, cancelar, cobrar etc) ?

  • @nossabrunao
    @nossabrunao 3 года назад

    Como assim a partir do C# 8.0 é possível ter implementação na Interface? Isso não interfere principalmente o S e o D do SOLID? Como vou segregar responsabilidades tendo Contrato + Implementação inclusive na mesma estrutura? Como vou depender de abstrações e não de implementações se a minha "abstração" tem implementação?

  • @nacasadobeirinha1524
    @nacasadobeirinha1524 4 года назад +1

    Herança é tipo legião urbana, Pais e Filhos!
    Ignora minha piada, achei zuado tb deixar implementar nas interfaces a partir do C#8 mas fazer o que.
    A intenção da classe abstrata não seria alem de deixar abstrato fazer algo Default, para que assim fizéssemos nossas subclasses.
    Outro ponto seria marcar o que pode ou não ser sobrescrito e acessado na classe abstrata, coisas que não nos preocupamos nas interfaces já que estamos definindo contrato correto?

    • @baltaio
      @baltaio  4 года назад +1

      hahahahah bom dia!
      Sobre suas pontuações, correto! São as principais diferenças!

  • @thiagobasu2172
    @thiagobasu2172 Год назад +1

    Eu nunca entendo quando falam de interfaces no sentidos: "Elas agem como um contrato". Todo ser humano sabe o que é um contrato de serviço, contrato de alocação e etc ... mas quando se trata de programação esse termo é muito estranho!