‫Nesta lição, você aprenderá a diferença crítica entre classes de ativos e interfaces ao projetar
‫aplicativos.
‫É essencial saber quando usar uma classe abstrata e quando usar uma interface e quando não usar nenhuma
‫delas.
‫Classes e interfaces abstratas parecem semelhantes em alguns aspectos, mas existem diferenças importantes que determinarão qual é
‫a melhor escolha para o que você está tentando alcançar.
‫Entender a diferença entre uma classe abstrata e uma interface é muito
‫importante, para que possamos projetar aplicativos fracamente acoplados e extensíveis para que possamos modificar e
‫alterar facilmente sem quebrar tudo.
‫Discutiremos essas diferenças e como decidir quando usá-las neste vídeo.
‫Mas antes de fazermos isso, primeiro, vamos refrescar nossa memória sobre classes e interfaces abstratas.
‫Portanto, primeiro, classes abstratas e classe abstrata são uma classe incompleta ou uma classe que não pode ser instanciada, o que significa que não
‫podemos criar objetos a partir dela.
‫O objetivo de uma classe abstrata é fornecer um projeto para classes derivadas e definir algumas regras, como o
‫que as classes derivadas devem implementar.
‫Mas por que precisaríamos que uma classe fosse marcada como uma classe abstrata para começar?
‫O que há de errado com aulas regulares?
‫Imagine que temos uma motocicleta e um carro de classe e eles compartilham algumas funcionalidades para reduzir a redundância
‫de código.
‫Criamos uma classe base chamada Vehicle para evitar a criação de instâncias do tipo veículo e para impor todos os métodos
‫para implementar sua versão dos métodos de veículo.
‫Temos que marcá-lo como uma classe abstrata.
‫Podemos tirar proveito das classes abstratas para projetar componentes e especificar algum nível de funcionalidade comum que
‫deve ser implementado pelas classes certas.
‫Então, vamos fazer este veículo abstrato e isso vai ficar bem.
‫Agora vamos examinar as interfaces mais uma vez.
‫Portanto, uma interface é um contrato e pode conter apenas declarações de métodos.
‫Não pode conter definições de método.
‫Eles definem uma habilidade que uma classe possui.
‫Vamos imaginar que temos três classes.
‫Então temos a classe, bicicleta, moto e carro.
‫E então queremos ter certeza de que todas essas classes herdam deste veículo de classe.
‫E se você deseja adicionar a funcionalidade de direção autônoma ao nosso carro, por exemplo, e queremos
‫criar outras classes, por exemplo, que podem criar algo como um avião, não faz sentido adicionar a funcionalidade de
‫direção autônoma a o melhor veículo da classe porque nem todas as nossas subclasses terão esse
‫recurso.
‫Seria mais conveniente adicioná-lo na forma de uma interface chamada AI self-driving.
‫Então, essas classes que implementam essa interface podem fornecer a lógica para alcançá-la.
‫Agora, vamos falar sobre semelhanças entre interfaces e classes abstratas, ambas as interfaces e classes
‫abstratas podem ser instanciadas.
‫Isso significa que não podemos criar objetos a partir deles.
‫Mas ambos suportam polimorfismo, o que significa que podemos armazenar um objeto do tipo cad em uma variável do tipo,
‫animal de classe abstrata.
‫A mesma coisa vale para interfaces onde podemos armazenar qualquer coleção como uma lista ou uma pilha em uma variável
‫de tipo II enumerável.
‫Portanto, agora vamos examinar as principais diferenças.
‫Uma classe abstrata é projetada para ser herdada por subclasses que implementam ou substituem seus métodos.
‫Em outras palavras, as classes abstratas são parcialmente implementadas ou não são implementadas.
‫Por outro lado, as interfaces não são implementadas.
‫Então, uma classe abstrata não pode ter um construtor oposto a isso.
‫As classes abstratas podem ter construtores e campos, bem como definições de métodos, e a
‫implementação será de responsabilidade da classe que implementou a interface.
‫Por outro lado, uma classe abstrata pode conter métodos, definições e campos e as interfaces não podem
‫ter nenhum construtor, como mencionamos, também não podem ter campos.
‫Portanto, agora as classes podem implementar muitas interfaces, que é uma maneira de obter algum tipo de herança múltipla.
‫Uma vez que teashop é uma linguagem de herança única e não permite isso por padrão.
‫Ainda assim, uma classe só pode herdar estender uma classe.
‫Portanto, se uma classe implementou uma interface, ela deve implementar todos os seus membros, como propriedades, métodos
‫e assim por diante, por outro lado, quando uma classe estende uma classe abstrata,
‫ela deve implementar seus membros abstratos apenas para que eles conheçam a parte não implementada da classe abstrata.
‫Vamos ver uma analogia aqui.
‫Imagine um editorial de instrutor afiado onde o instrutor não pode alcançar nada a menos que ele seja um especialista em
‫um tópico ou ela é uma especialista em um tópico porque não podemos ter instâncias de aulas abstratas.
‫Portanto, um instrutor precisaria se tornar um especialista em um tópico para ensiná-lo.
‫Assim, o instrutor se tornou um especialista em dó sustenido e agora ele pode ensiná-los em algum ponto. O instrutor em
‫dó sustenido teve que editar vídeos, embora nem todos os instrutores precisem fazer a mesma coisa.
‫Então, implementamos a interface do editor de vídeo para que isso funcione.
‫Portanto, nem todos os instrutores precisam ser capazes de editar, mas aqueles que implementam este editor de vídeo terão
‫que fazer isso.
‫Tudo bem.
‫Primeiro, se você escolher herança em vez de uma interface ao projetar uma classe de loja C, as bibliotecas usarão uma
‫classe extra.
‫Se você tem alguma funcionalidade que deseja, é necessário ter subclasses.
‫Por exemplo, se você tem um conjunto de funções, deseja que as subclasses as coloquem em uma classe
‫abstrata.
‫A classe abstrata é usada quando a classe derivada compartilha suas propriedades principais e comportamento da classe abstrata, o
‫tipo de comportamento que realmente define a interface do usuário da classe.
‫Se você deseja um contrato geral sobre um comportamento ou funcionalidade, as interfaces são normalmente frouxas em comparação com
‫as classes abstratas.
‫Você não gostaria de usar interfaces em uma situação em que está constantemente escrevendo o mesmo código para
‫todos os métodos de interface.
‫Use uma classe abstrata e defina cada método uma vez.
‫Portanto, um rápido resumo.
‫Quando falamos sobre classes abstratas, definimos as características de um tipo de objeto especificando o que é
‫um objeto.
‫Quando falamos sobre uma interface e definimos os recursos que prometemos fornecer, estamos falando sobre o estabelecimento
‫de um contrato sobre o que o objeto pode fazer.
‫Então, o que o objeto é uma classe abstrata, o que o objeto pode fazer.
‫E interface.
‫Tudo bem, então espero que você tenha gostado e entendido o resumo e esta visão geral dos
‫dois tipos diferentes de abordagens.
‫E agora vamos seguir em frente e usar esses conceitos e exemplos diferentes ao longo das próximas palestras e ao longo do
‫resto do curso.