Abstração em OOP: Ocultando a Complexidade
Você dirige um carro pressionando pedais e girando um volante. Você não precisa entender de injeção de combustível ou do movimento dos pistões. O carro esconde esses detalhes de você. Você utiliza apenas uma interface simples.
O software funciona da mesma maneira.
Pense em enviar um e-mail. Seu código provavelmente se parece com isto:
emailService.send(email);
Parece simples. Nos bastidores, o sistema realiza muitas tarefas:
- Valida o endereço.
- Conecta-se a um servidor SMTP.
- Autentica o usuário.
- Constrói a mensagem.
- Gerencia retentativas.
- Registra erros.
Você não precisa ver essas etapas. Você só se importa que o e-mail seja enviado.
Se você expuser cada etapa, criará problemas. Imagine se cada desenvolvedor tivesse que chamar manualmente:
connect()authenticate()buildMessage()sendMessage()disconnect()
Isso torna seu código frágil. Se você mudar seu provedor de e-mail, terá que atualizar cada lugar no seu aplicativo. Seu código torna-se fortemente acoplado à implementação.
A abstração resolve isso.
A abstração expõe o que um objeto faz. Ela esconde como ele faz. Você mostra ao usuário apenas o que ele precisa.
O usuário interage com uma interface estável. Ele não se importa com sua lógica de autenticação ou sua estratégia de retentativas. Esses detalhes permanecem ocultos.
Muitas pessoas confundem Abstração com Encapsulamento. Aqui está a diferença:
Encapsulamento pergunta: Quem pode alterar o estado deste objeto? Ele protege os dados.
Abstração pergunta: Quais detalhes o usuário deve ver? Ela esconde a complexidade.
Eles trabalham juntos para construir sistemas melhores.
Em seguida, discutiremos Herança. Veremos como lidar com comportamentos compartilhados sem escrever o mesmo código duas vezes.