Orientação a Objetos Amigável 🧶[2/2]
Tags: beginners, programming, oop, productivity
Published: 2023-05-08 21:44:40

`Na publicação Programação Orientada a Objetos amigável [1/2], pudemos entender a proposta do paradigma e conhecer uma breve história sobre ele. Além disso, foi possível compreender como ele se comporta e um simples exemplo de usabilidade no contexto do desenvolvimento de software. Agora apresentarei os fundamentos da Orientação a Objetos. `

Antes de apresentar os conceitos que compõem a Orientação a Objetos, é importante discutir sobre os pilares porque são com eles que conseguimos compreender de forma clara todos os assuntos que formam o paradigma. Compreender os conceitos facilita a aplicabilidades na hora de programar. 

**Abstração:** Em resumo, a abstração consiste em focar no que é essencial, deixando de lado o que não é. No mundo real, frequentemente utilizamos abstração sem perceber e um exemplo disso pode ser o seu smartphone quando estraga; você leva para o concerto e o recebe funcionando novamente. Isso é abstração, você não precisa saber o que foi feito para que ele voltasse a funcionar, o que importa é que o problema fora resolvido. Voltando ao ponto de vista do software, quando programamos, buscamos automatizar processos do nosso dia a dia através de programas, e na orientação a objetos utilizamos abstração para automatizar a forma de resolver os problemas. A abstração é incompleta, pois só foca no resultado final e é assim que ela deve ser. A vantagem disso é que com um ponto de partida conseguimos moldá-las conforme nossas necessidades. Já que na orientação a objetos programamos com o intuito de representar coisas do mundo real em forma de código, vamos pegar um exemplo de uma fábrica de caixas. Podemos imaginar uma caixa de forma super básica (de forma mais abstrata possível). A partir disso, caixas personalizadas de diferentes cores e tipos seriam criadas e em cada modelo algo seria acrescentado ou modificado. Dessa forma pudemos perceber que a partir de um ponto inicial pudemos adaptar outros tipos personalizados. Abstrações de baixo nível são mais específicas e apresentam mais detalhes enquanto abstrações de alto nível são as mais simples possível. Por fim, não importa o molde em que a caixa foi feita, mas sim a variedade de caixas prontas para serem vendidas. 

**Reuso:**  Uma má prática de programação é o ato de repetir códigos diversas vezes. Isso leva  múltiplas falhas e vulnerabilidades a um sistema, além de dificultar a manutenção e deixar tudo uma bagunça. Codificar pensando em reaproveitamento exige que a própria pessoa que está programando pense nisso e não espere que a orientação a objetos faça isso milagrosamente. Dentro do reuso temos outros conceitos como herança e polimorfismo que serão explicados em outra ocasião. Um exemplo de reuso seria uma fórmula matemática, que pode ser utilizada para realizar a mesma operação diversas vezes com números diferentes. Não seria necessário escrever toda uma fórmula a cada vez que os valores atribuídos a ela fossem alterados. 

**Encapsulamento:** Quando tomamos um remédio para melhorar algo que não está bem, geralmente não nos preocupamos com a complexidade da fórmula do medicamento. Essa ideia aplicada a orientação a objetos é a mesma. Quando temos trechos de código muito importantes e críticos ao sistema, esperamos que eles estejam protegidos e incapazes de serem manipulados por qualquer pessoa, então escondemos a lógica de alguma forma. Essa forma é o encapsulamento, que traz vantagens de ocultação de informações sensíveis, proteção dessas informações e a transparência de mudanças. Ele protege o objeto do mundo exterior. Se pegarmos o exemplo de um videogame, podemos assumir que você não precisa abrir e deixar exposto os componentes internos dele, como fios e peças. Essas partes críticas vem encapsuladas justamente por proteção e e a única coisa que nos interessa são os jogos rodando em nossa tela. Isso é o encapsulamento.  

Saber estes assuntos facilita a programação e torna mais claro quais as melhores alternativas na hora de resolver um problema. Com isso, conseguimos assimilar melhor os pilares da orientação a objetos e compreender a devida importância desses conceitos.