Quando você come um burrito, cada um dos seus receptores gustativos canta com alegria. Cada mordida traz uma combinação de diferentes tipos de sabor, como salgado, doce, picante e umami. Cada mordida depois disso tem um sabor ligeiramente diferente, pois uma nova coleção de ingredientes junta seus sabores.
Você pode ter lido os ingredientes do menu, mas não sabe exatamente como a salsa é feita. O tempero que eles usam em seus vegetais pode ser uma mistura secreta. Você não precisa saber todos os ingredientes exatos, no entanto. É o suficiente para saber que é delicioso.
Os ingredientes que você conhece, como arroz branco simples, são concretos. Os outros elementos são abstratos. Você sabe que é salsa, mas que tipo? Ou, se alguém lhe entrega um burrito do nada, então todo o burrito é abstrato.
Abstração no Resumo
Junto com a herança, a abstração é um conceito importante na programação orientada a objetos. A teoria é que cada objeto deve fornecer resultados simples e previsíveis. Os objetos também devem compartilhar apenas o que precisa ser compartilhado.
Você pode pensar em um burrito como um objeto. Dentro do burrito, você tem vários outros objetos, como feijão, arroz, queijo e molho picante. O feijão pode ter sido temperado. O queijo pode ser uma mistura. E o molho picante pode ser uma combinação de pimentas envelhecidas em vinagre.
Você não precisa saber como todos os ingredientes de um burrito foram feitos. E no caso de cachorros-quentes, você provavelmente não quer saber. O que importa é que não se desfaça ao comer e que seja super saboroso.
A abstração está intimamente ligada ao encapsulamento
É a mesma coisa com objetos de programação. Quando você instancia um objeto (cria-o a partir de uma classe), é como pedir um burrito no balcão do food truck. Você tem acesso a alguns dados, mas não a todos. Você não precisa saber como o objeto funciona, desde que as funções retornem os dados corretos. Aqui está um burrito em JavaScript/Typescript:
O idioma especificado: tsx não existe'Falha na geração de código!!
'
Você pode brinque com este código na sandbox TypeScript.
No exemplo acima, os ingredientes da salsa e do queijo são abstraídos. Primeiro, eles são encapsulados, para esconder os ingredientes especiais. Em seguida, os getters são adicionados para acessar os ingredientes. Mas os ingredientes apenas retornam uma representação abstrata do que eles realmente são.
Abstração no Concreto
A abstração é mais do que um conceito, no entanto. As classes também podem ser abstratas. Isso significa que eles podem definir outras classes. Mas eles não podem ser instanciados.
Por que as aulas às vezes devem ser abstratas
Imagine que você vai a um restaurante e se senta. O garçom lhe entrega um cardápio. Você o abre para descobrir que há apenas um item: comida.
Isso é bem abstrato. Você encomendaria? Você comeria? Você provavelmente não faria. Dizer que algo é comida não é suficiente. Ele precisa se decompor em algo mais concreto.
E as massas? Bem, esse é um tipo mais específico de comida. E sabemos que provavelmente tem macarrão e molho. Mas existem muitos tipos diferentes de massas por aí, então ainda é abstrato.
O que é abstrato e o que é concreto?
O Fettuccine Alfredo é um exemplo concreto de comida e massa. A mesma coisa se aplica às aulas. Nem toda classe deve ser instanciada. Algumas classes devem apenas definir a estrutura de outras classes.
Aqui está um exemplo com um resumo Comida classe e uma criança Macadâmia aula:
O idioma especificado: tsx não existe'Falha na geração de código!!
'
Aqui está o código.
Classes abstratas dizem a outras classes como elas devem se comportar. No exemplo acima, se você vai ser uma classe de comida, você deve ter funções que permitam acesso ao seu nome, sabor, descrição e calorias.
Observe que o Macadâmia aula estendeComida. Isso é dizer que Macadâmia concorda em seguir as regras de Comida. Além disso, observe que o construtor chama super. Esse comando instancia a classe pai antes que o construtor instancia Macadâmia.
Se você está aprendendo a programar, você pode divirta-se mais com esses jogos de programação.
Prática de abstração
- Visite o link acima e use o sandbox para criar uma classe abstrata chamada Sopa.
- Crie um filho concreto do Sopa classe, chamada Cereal.
- Usar console.log para testar seu código. O que acontece se o seu Cereal classe está faltando uma das funções definidas em Sopa?
Mas qual é o objetivo de uma classe que você não pode instanciar?
A princípio, classes abstratas podem parecer desnecessárias. Afinal, você não pode realmente usá-los para fazer um objeto. E não é como se eles passassem suas funções. As funções precisam ser reescritas em cada classe filha.
Existem duas razões principais pelas quais você precisa de classes abstratas. Eles mantêm seu código consistente e garantem que outros desenvolvedores também escrevam código consistente. Você nem sempre estará trabalhando sozinho. Toda a equipe precisa seguir as mesmas regras. Você pode aprender mais com a documentação do TypeScript sobre classes abstratas.
Como organizar seu código orientado a objetos com herança
Leia a seguir
Tópicos relacionados
- Programação
- Programação
- Programação Orientada a Objetos
Sobre o autor
Lee é um nômade em tempo integral e um polímata com muitas paixões e interesses. Algumas dessas paixões giram em torno de produtividade, desenvolvimento pessoal e escrita.
Assine a nossa newsletter
Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!
Clique aqui para assinar