
A Programação Orientada a Objetos (POO) nasceu por volta de 1960, e hoje é um dos paradigmas de programação mais amplamente adotados na ciência da computação. Neste artigo, importantes paralelos podem ser traçados entre os conceitos deste paradigma computacional e os princípios fundamentais de Aristóteles sobre Ato e Potência.
Original: Antonello Zanini; Tradução: Tiago Barreira
Embora vários anos tenham se passado desde o meu primeiro contato com a Programação Orientada a Objetos (POO), ainda posso perceber a confusão que ela me causou. Eu tinha 12 anos. Talvez eu nem estivesse preparado para entender a Programação Orientada a Objetos, ou qualquer outro paradigma de programação, para falar a verdade.
O que me lembro claramente é ter experimentado um estado de confusão parecida quando comecei a estudar filosofia no ensino médio. Como você entenderá daqui a pouco, nada disso é mera coincidência.
Depois de passados 10 anos, hoje sou um engenheiro de software freelancer que utiliza a Programação Orientada a Objetos diariamente para projetar e construir softwares. Durante todo esse tempo, eu nunca parei para pensar a respeito das origens da Programação Orientada a Objetos. Até eu ler um livro de filosofia sobre Aristóteles!
Profundamente surpreso, encontrei fortes correlações entre aquilo que o filósofo grego fundador da Escola Peripatética escreveu e os conceitos por trás da Programação Orientada a Objetos.
Agora vamos tentar entender o motivo pelo qual Aristóteles pode ter estabelecido as bases para a Programação Orientada a Objetos, e como isso pode ser explicado.
Aristóteles em poucas palavras
Aristóteles nasceu em 384 a.C. em Estagira, e é o último dos Três Grandes filósofos da filosofia grega antiga. Existem milhares de livros sobre Aristóteles, e entrar nos detalhes sobre a vida de Aristóteles e sobre todas as suas teorias levaria muito tempo. Assim, vamos nos focar apenas em dois elementos-chave na metafísica: Potência e Ato em Aristóteles.
Potência
A Potência representa o que neste momento não é, mas pode se tornar. Em outros termos, você pode pensar em Potência como a possibilidade de algo se tornar outra coisa, evoluir ou passar por qualquer tipo de mudança.
Segundo Aristóteles, a Potência está ligada à natureza de todo ser. Especificamente, a Potência determina limites e características específicas, que especificam a natureza de um ser.
Por exemplo, uma criança não tem a Potência para voar ou para correr mais de 100 km/h, mas tem a Potência para se tornar um adulto.
Ato
O Ato representa o que já é em um determinado momento. Em outras palavras, você pode pensar no Ato como algo que já foi realizado ou como um ser que já existe.
Por exemplo, uma criança em Ato é apenas uma criança e não pode se tornar adulta, porque não pode mudar. Ao mesmo tempo, uma criança é adulta em Potência.
Da Potência para o Ato
Vamos entender melhor a relação entre Potência e Ato com um exemplo.

Uma semente em Ato tem a Potência para se tornar uma árvore. À medida em que a semente cresce, ela se move gradualmente da Potência para o Ato. Quando a semente se transforma em uma árvore, ela se torna uma árvore em Ato. Neste ponto, a semente não está mais em Potência.
Então, a árvore em Ato pode se tornar uma mesa ou qualquer outra peça de mobiliário em Potência, e assim por diante.
Programação Orientada a Objetos em poucas palavras
A Programação Orientada a Objetos (POO) nasceu por volta de 1960, e hoje é um dos paradigmas de programação mais amplamente adotados. Alan Kay cunhou o termo em 1983 e é considerado o pai da POO. Há muito a se dizer sobre a POO, mas vamos nos focar principalmente em dois conceitos-chave: classe e objeto.
Classe
As classes são os blocos de construção da POO. Uma classe define quais serão os objetos dessa classe. Você pode pensar em uma classe como um modelo, plano ou descrição completa dos objetos dessa classe.
Mais detalhadamente, uma classe é um tipo de dados definido pelo usuário que inclui alguns campos de dados e funções-membro. Eles são chamados de “atributos” e “métodos”, respectivamente.
Uma classe mapeia um conceito abstrato. Por exemplo, uma classe de árvore pode ter um nome, uma idade, uma altura e a capacidade de crescer através de uma função-membro Crescer().
Objeto
Objetos são instâncias de uma classe, que determina o seu tipo. Na POO, um tipo define as características e os recursos compartilhados por um conjunto de objetos. Portanto, a estrutura e o comportamento dos objetos do mesmo tipo são definidos em sua classe.
Mais detalhadamente, um objeto é uma entidade de programação composta por métodos e atributos. Os valores atuais de cada atributo representam o estado do objeto, enquanto seus métodos identificam o possível comportamento do objeto.
Um objeto mapeia uma representação concreta de um conceito abstrato. Por exemplo, um cacto de 7 meses e 18 centímetros de altura pode ser uma instância da classe de árvores.
De classe para objeto
Para ir da classe para o objeto, você precisa “instanciar uma classe”. Isso ocorre porque na terminologia da POO, “instanciamento de classe” significa “criar um objeto”. Portanto, quando você cria um objeto, você está inicializando uma “instância” de uma classe.
Para criar um objeto de uma classe, você deve chamar um método especial da classe, chamado “construtor”. No POO, um construtor é um método especial de uma classe que permite criar um novo objeto dessa classe. Quando instanciado, o novo objeto terá um estado padrão, geralmente definido no método do construtor.
É assim que você pode criar um objeto em Java:

Observe que a Árvore – ou Tree() – é o construtor da classe de árvores. Graças a ele, você pode criar um objeto de tipo de árvore referenciado pela variável mytree. Em seguida, você pode usar a referência do MyTree para acessar os atributos e métodos públicos do objeto.
Princípios e POO de Aristóteles
Dizendo de maneira mais clara, há um paralelo entre os princípios fundamentais de Aristóteles e a Programação Orientada a Objetos. Mas vamos ver isso mais a fundo.
Em primeiro lugar, uma classe define certas características que os objetos terão, assim como a Potência molda os aspectos específicos e impõe algumas limitações. Se uma classe humana não tiver o método voar – ou Fly() – , os objetos de seres humanos não terão a possibilidade de voar. Em outras palavras, a definição da classe está determinando algumas das características da natureza dos objetos dessa classe, assim como a Potência.
Em segundo lugar, uma classe em Ato tem a Potência para se tornar um objeto. Novamente, esse objeto em Ato é apenas um objeto. Ao mesmo tempo, o objeto pode mudar através das funções-membro provenientes de sua definição de classe, o que permite que ele se torne outra coisa em Potência.
Assim, uma classe de sementes tem a Potência para ser instanciada como um objeto de semente, que tem a possibilidade de se tornar um objeto de árvore através do método Crescer – ou Grow(). Essa lógica corresponde exatamente à transição do Ato para Potência descrita por Aristóteles.
Agora, você pode estar se perguntando como é possível essa ligação inesperada entre a filosofia e a POO de Aristóteles.
Aristóteles nasceu 2.000 antes da invenção do primeiro computador programável. Portanto, é difícil imaginar que ele tenha em mente a Programação Orientada a Objetos ao teorizar sobre Potência e Ato. Ao mesmo tempo, Alan Kay pode ter baseado o seu paradigma de programação nos princípios de Aristóteles, mas não há menções ou evidências que sugiram isso.
O que deve ter acontecido é que Aristóteles e Alan Kay tinham os mesmos objetivos. Ambos queriam encontrar uma maneira de representar a realidade e a evolução de objetos e seres. Aristóteles adotou o par de termos “Potência e Ato” para explicar os fenômenos naturais ao criar sua metafísica. Da mesma forma, Alan Kay inventou os termos “classe e objeto” para representar a natureza em um mundo digital discreto ao apresentar seu paradigma de programação.
Mas permanece a questão de quantas correlações adicionais ainda poderiam ser encontradas entre programação e filosofia…
Conclusão
Neste artigo, você aprendeu como os universos da ciência da computação e da filosofia não estão tão distantes entre si.
A filosofia de Aristóteles parece basear-se em certos princípios fundamentais que podem estar associados aos blocos de construção do paradigma de Programação Orientada a Objetos. Em particular, os conceitos de Potência e Ato de Aristóteles estão próximos dos conceitos de classe e objeto da POO. Aqui, você viu como a metafísica de Aristóteles e a POO estão ligadas e o motivo possível disso ter acontecido.
Obrigado pela leitura! Espero que você tenha achado este artigo útil. Sinta -se à vontade para deixar qualquer dúvida, comentários ou sugestões.
Artigo publicado originalmente por Antonello Zanini pelo Medium. Ver artigo original