A Programação Orientada a Objeto é uma técnica muito demandada pelo mercado, extremamente popular, mas extremamente mal compreendida.
Esse problema nasce lá na origem da nossa formação…
As faculdades ensinam o tema de forma errada. A pessoa gasta um semestre inteiro se debatendo com exemplos totalmente desconectados da vida real – ninguém entende o porquê das coisas.
O grande trunfo da Orientação a Objetos é que ela criou uma forma de expressar abstrações que nos ajudam a trabalhar com um maior volume de estados distintos com menos código.
Contudo, na POO, não basta saber criar classes, definir métodos, modos de acesso público ou privado de atributos. Você precisa orquestrar bem a relação entre os objetos. Esse é o verdadeiro desafio.
Saber os comandos é a parte simples. O complexo é sair da parte introdutória para depois mergulhar no universo da engenharia de software, design e boas práticas de sistemas orientados a objetos.
Dito de outra forma, saber os comandos da linguagem é apenas um pré-requisito. É preciso enxergar como aplicar a POO para resolver os problemas do dia a dia.
São tantas coisas para serem estudadas que as pessoas ficam perdidas. Pior, são tantas questões abstratas que as pessoas ficam paralisadas e não conseguem agir na hora de implementar um sistema complexo.
Há quem diga que o problema é que falta estudar Design Patterns, Arquitetura de Software e outras coisas mais.
Eu discordo dessa visão…
Pra mim o que falta é assimilar a essência da orientação a objetos. Falta parar de olhar para os elementos óbvios (classes, métodos, atributos, etc) e aprender a enxergar o invisível que são as relações entre os objetos e como eles interagem entre si.
São essas questões invisíveis que vão determinar se um software é bem escrito ou não, é fácil de manter ou não, é fácil de extender ou não. E é sobre isso que quero falar com você neste artigo.
Uma sacada genial
Antes de avançarmos, é importante entender qual foi a grande transformação que a POO trouxe para o mundo da computação.
Essa forma de programação pode parecer muito moderna, mas, no século 19, Ada Lovalace já tinha entendido a relevância da linguagem simbólica e de trabalhar em alto nível. Essa sacada é uma das bases do que hoje faz diferença na orientação a objetos.
No livro “Inovadores”, é mencionado que ela vislumbrou, já naquela época, que a programação não precisaria ficar presa à computação de valores, mas poderiam realizar computações sobre símbolos abstratos.
Sem ter um computador na frente, só trabalhando com as ideias do que seria um algoritmo e de um programa de computador, ela percebeu que programação poderia ser utilizada para computar qualquer elemento simbólico.
O pensamento da Ada aponta para um campo conceitual que, de certa forma, se reflete na POO. Por meio da orientação a objetos, é possível dar sentido simbólico à um conjunto de bits.
Dessa forma, você consegue transcender a realidade da máquina, aquela realidade crua de zeros e uns, e pode pensar com a linguagem do ser humano – pensar em símbolos, em conceitos, em ideias – e manifestar isso no código.
O próprio Alan Kay, criador do termo “Orientação à Objetos” explica que essa foi a essência que ele vislumbrou na época: “Em vez de dividir um computador em partes mais fracas como procedimentos e estruturas de dados, porque não dividir um computador em milhares de unidades computacionais menores”?
Pode parecer uma frase difícil de entender, mas a gente pode recorrer aos exemplos dos sistemas operacionais modernos para nos ajudar. Cada um dos diversos programas que estão executando agora no seu computador se comportam como se ele tivesse um computador inteiro para si.
Ou seja, quem implementou o programa não precisou se preocupar com o mundo exterior. O sistema operacional oferece toda a infra-estrutura e com isso viabiliza que inúmeros programas sejam executados simultaneamente sem se atropelarem.
A gente vê esse mesmo padrão nas máquinas virtuais, nas infra-estruturas de devops, e é exatamente esse o espírito que encontramos em linguagens orientadas à objetos.
A linguagem orientada a objetos oferece uma infraestrutura que te permite focar nas abstrações do seu projeto.
Ela traz uma forma diferente de modelar e compartimentalizar o seu entendimento sobre o problema. E, enquanto você vai modelando o seu código, você vai inclusive entendendo mais sobre o problema.
Mas DOMINAR isso não é tão simples…
Trata-se de uma forma sofisticada e abstrata de programar e essa é a grande dificuldade: você precisa estar preparado para pensar em abstrações, precisa ser capaz de enxergar o fluxo em vez de só dados e procedimentos.
É disso que vamos falar no próximo tópico.
POO: A foto e o filme
O principal problema na compreensão da POO é que não basta você saber os comandos da linguagem orientada a objeto. Você precisa ser capaz de esculpir as relações entre os objetos, de enxergar os invisíveis.
É por isso que as pessoas não conseguem aprender a coisa direito… O processo de aprendizagem normalmente é focado nos comandos, foca nas classes, não foca na relação e nas interações entre os objetos e em como expressar isso no código.
Você tem que entender como as coisas vão interagir e essas coisas são invisíveis. Pense nos laços sociais. A gente sempre pensa em grupo de amigos, e não nas relações entre amigos. Mas as relações existem. São abstrações, mas são muito reais.
Então, enxergar essas relações invisíveis é enxergar o fluxo: o fluxo de processamento de dados, o fluxo do sistema, o fluxo de como as coisas acontecem ao longo do tempo.
Por isso, eu sempre digo que o código é uma foto de uma ideia ou de um conceito. O desafio é, a partir daquela foto, você enxergar o filme que vai rodar – que é o funcionamento do programa de fato.
Nesse sentido, o que revela a qualidade do programador não é só o domínio da técnica, do código ou da sintaxe. É uma coisa a mais.
É um nível de entendimento e abstração que você pega com fundamentos sólidos e experiência. Essa é a combinação que você precisa para alcançar isso. Você precisa de bagagem e de vivência para pegar as coisa sutis.
A BOA notícia é que…
Você pode aprender tudo isso no meu NOVO treinamento Orientação a Objetos NA PRÁTICA – Um programa COMPLETO que vai te ensinar a usar POO para aumentar sua produtividade e para resolver seus problemas de software com tranquilidade e segurança.
As inscrições já estão abertas. Será um prazer ter você crescendo com a gente!
Clique aqui para conhecer todos os detalhes deste programa!
___________
Imagem originalmente postada em https://medium.com/@laudaz20