
A Arte da Abstração na Programação Orientada a Objetos
Por Hugo em 23rd Jan 2023Quando iniciei meus estudos no framework Laravel, me surpreendeu que o seu slogan era “O framework PHP para artesãos da web”. Eu nunca havia percebido a programação como arte e ler isso me causou uma explosão mental.
Refletindo um pouco, eu entendo que de fato, o ofício da programação, assim como nas artes tradicionais, requer criatividade, habilidade técnica e uma certa dose de intuição para criar algo que seja contemplável. E eu não estou falando - apenas - do front end que anda de mãos dadas com o design.
Na real, nesse texto quero focar em um dos pilares da Programação Orientada a Objetos (POO) que mais gosto: a abstração.
Abstração é uma palavra polissêmica, ou seja, pode adotar diversos significados a depender da área de conhecimento. Aqui, eu gostaria de explorar a interseção entre a abstração na arte e a abstração na programação.
A arte pode ser um assunto bastante espinhoso. E especificamente a arte abstrata, é desqualificada e vista com preconceito por muitos. Dito isto, antes de me enveredar pela programação eu quero, humildemente, lhe induzir à uma reflexão.
Moonlight Sonata, concebida originalmente como “Sonata nº 14” foi composta no século 19 por Beethoven. Essa é uma música clássica que já nas primeiras notas te faz cair num abismo de melancolia, a música já foi tema de alguns filmes dramáticos. Mas… você já parou para pensar no porquê de sermos capazes de sentir emoções com músicas sem letra? Como é possível exprimir tanta sofrência sem uma história de traição ou amor não correspondido? Bem… essa é uma forma de abstração! A música instrumental é uma arte abstrata que, valendo-se da sensibilidade humana, consegue despertar sentimentos diversos através de notas musicais.
Beethoven, em sua composição, consegue emular emoções humanas através de notas musicais, assim como o pintor norte-americano Mark Rothko, conseguiu causar um impacto trágico com sua obra Black in Deep Red, usando cores fortes e diferentes texturas. A verdade é que para se abstrair, sendo um compositor, pintor ou apenas para contemplar algo abstrato, é necessário se permitir atravessar por um fio de sensibilidade. Sem sensibilidade não se cria e não se contempla a arte.
Sendo assim, podemos encarar a abstração da POO por uma outra lente, pelo viés artístico.
Abstração, em POO, é um processo utilizado na análise de uma situação a fim de determinar aspectos e fenômenos considerados essenciais, excluindo todos os outros aspectos considerados irrelevantes ou secundários à situação.
Para simplificar, a abstração no mundo da programação é a forma como você cria elementos se baseando na realidade. Por exemplo, um usuário, num banco de dados, tem os seguintes atributos:
- Nome;
- Sexo;
- Idade;
- E-mail;
- Senha.
Essa é uma abstração de uma pessoa, de um ser humano que utiliza o sistema. Um usuário não é literalmente o usuário em carne e osso, é apenas uma redução ao que se é necessário para que aquele sistema funcione. É como se o usuário do sistema fosse uma metáfora do usuário em pessoa.
De um modo generalista, eu definiria a abstração, tanto na POO quanto nas artes, como a ausência de literalidade.
Agora um outro exemplo, suponhamos que você esteja criando um sistema para gerenciamento de cursos em uma faculdade. Para isso você precisa abstrair os atributos daquele curso, vamos lá:
- Nome do curso;
- Carga Horária;
- Quantidade de Vagas;
- Valor;
- Coordenador.
E por aí vai… A programação sempre irá depender da abstração de elementos do mundo real. E por isso, acima de tudo, é importante que o programador tenha a capacidade para abstrair o que se é necessário deste elemento.
Porém, o que não te contam nos cursos da Udemy ou nos bootcamps é que tanto para executar o exercício da abstração em POO, de maneira elegante e performática, bem como para compor uma música ou pintar um quadro, é necessário uma alta dose de sensibilidade!
Sem sensibilidade não se cria um sistema baseado na experiência de outro ser humano. Aqui estou falando tanto da experiência de um usuário do sistema quanto na experiência do colega programador que futuramente irá trabalhar com o seu código. Programar bem é pensar em como o seu código irá impactar o outro, seja ele quem for.
Ter esse estalo me fez perceber que desenvolver um software é muito mais do que lógica, vai além da ciência exata. Programação é uma arte! E escrever bons códigos pode ser algo tão expressivo quanto compor uma música. Fazer um código performático, atendendo aos pilares da POO, sendo de fácil compreensão é uma genuína expressão artística, que inclusive, demanda muita técnica e experiência.
Tendo essa consciência, acredito que devamos nos atentar a nossa sensibilidade. Sentir e entender o mundo e as pessoas ao nosso redor com mais atenção e calma. Estimular a diversidade nas equipes de TI pode ajudar a ampliar a nossa visão. Enfim, devemos entender que toda arte demanda criatividade, leveza e prazer na execução.
Para finalizar o meu texto, eu vou deixar aqui uma citação que gosto muito e acredito que sejam diretrizes para todos os profissionais de tecnologia refletirem. Essas colocações foram ditas pela Audrey Tang, ministra da Tecnologia em Taiwan:
When we see "internet of things", let's make it an internet of beings.
When we see "virtual reality", let's make it a shared reality.
When we see "machine learning", let's make it collaborative learning.
When we see "user experience", let's make it about human experience.
When we hear "the singularity is near", let us remember: the Plurality is here.”