Abstração em OOP: Ocultando a Complexidade

Você dirige um carro usando algumas ações simples. Você pisa no acelerador. Você vira o volante. Você pisa no freio.

Você não precisa saber como o combustível entra no motor. Você não precisa entender como os pistões se movem ou como as marchas mudam. O carro esconde esses detalhes de você. Você usa uma interface simples para controlar uma máquina complexa.

O software funciona da mesma maneira.

Pense em enviar um e-mail. Você chama um único comando: emailService.send().

Nos bastidores, muitas coisas acontecem:

Você não precisa ver essas etapas. Você só se importa que o e-mail seja enviado.

Se você não usasse abstração, seu código seria assim:

Fazer isso todas as vezes cria problemas. Cada parte do seu código sabe demais. Se você mudar seu provedor de e-mail, terá que atualizar cada linha de código que envia e-mails. Seu sistema torna-se difícil de alterar.

A abstração resolve isso. Ela mostra o que um objeto faz, mas esconde como ele funciona.

Você expõe uma interface simples. Quem chama o método permanece focado na tarefa. A implementação permanece oculta. Isso mantém seu código desacoplado e fácil de manter.

As pessoas costumam confundir Abstração com Encapsulamento.

O Encapsulamento pergunta: Quem pode alterar estes dados? Ele protege o estado interno. A Abstração pergunta: Quais detalhes o usuário precisa ver? Ela oculta a complexidade.

Eles trabalham juntos para construir sistemas melhores.

A seguir, veremos Herança. Responderemos a uma pergunta: Se os objetos compartilham comportamento, você precisa escrever o mesmo código duas vezes?

Fonte: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding-capability-1111