Conectando a Programação Orientada a Objetos (Java) à Filosofia de Aristóteles e Porfírio

Nicolas

Sumário 1

1. Introdução 2

2. Fundamentos da Metafísica e Lógica Aristotélico-Porfiriana 3

3. Pilares da Programação Orientada a Objetos (com exemplos em Java) 7

4. Tecendo a Conexão: Mapeando Conceitos Filosóficos na POO (Java) 17

5. Conclusão: A Relevância Perene das Estruturas Fundamentais do Pensamento 22

Sumário

Que a filosofia aristotélica está objetivamente presente em tudo o que podemos compreender pela razão1 — e até mesmo naquilo que nos escapa à plena inteligibilidade — é algo inegável. Sendo as aulas de Programação Orientada a Objetos um campo acessível à nossa razão, segue-se, por consequência lógica, que nelas há traços dessa filosofia. É precisamente essa conexão que, de modo informal, proponho-me a explorar neste texto2 — se é que assim o posso denominar. Não pretendo, evidentemente, elaborar um tratado3, mas apenas apresentar reflexões e relações que pude estabelecer entre o conteúdo abordado em sala de aula e a filosofia de Aristóteles e Porfírio, ainda que esta última de maneira auxiliar.

Este artigo4 propõe uma investigação acerca das correspondências entre os conceitos fundamentais da Programação Orientada a Objetos (POO), exemplificada pela linguagem Java, e os princípios estruturantes da metafísica e da lógica aristotélicas, bem como da sistematização de Porfírio. Argumentar-se-á que a maneira pela qual a POO modela entidades, suas propriedades, comportamentos e relações hierárquicas ecoa, em larga medida, a análise aristotélica da realidade em termos de substâncias, acidentes, essência, forma, matéria, ato e potência, além de refletir a estrutura classificatória da Árvore de Porfírio, pautada em gênero, espécie e diferença específica.

Neste estudo, buscar-se-á demonstrar como Classes podem ser vistas como análogas às Substâncias Secundárias (espécies e gêneros) ou às Formas; Objetos, às Substâncias Primárias (indivíduos concretos); Atributos, aos Acidentes; Métodos, às Potencialidades e Atos (ações e paixões); e Herança, à própria estrutura hierárquica de gêneros e espécies delineada por Porfírio.

O propósito desta investigação é evidenciar que a POO, longe de constituir mera convenção técnica5, reflete profundas estruturas ontológicas e lógicas clássicas6 (pela sua natureza; pois, como dito, de intencional não há nada), permitindo, assim, um enriquecimento mútuo na compreensão de ambos os domínios7. Se tal intento logrará êxito, contudo, dependerá sempre de ti, dileto leitor8.

Introdução

À primeira vista, os domínios da filosofia metafísica clássica, ancorada nas investigações ontológicas de Aristóteles e na lógica classificatória de Porfírio, e da engenharia de software contemporânea, particularmente no paradigma da Programação Orientada a Objetos (POO) exemplificado pela linguagem Java em nosso artigo, parecem habitar esferas intelectuais radicalmente distintas910. Uma lida com as questões mais fundamentais do ser, da substância, da essência e da categorização do real; a outra, com a construção pragmática de sistemas computacionais abstratos, porém funcionais. Contudo, sob a superfície da aparente disparidade disciplinar, proponho-me a desafiar essa percepção inicial, argumentando e demonstrando a existência de paralelos estruturais e conceptuais profundos e significativos entre os princípios fundamentais da POO e os pilares da metafísica e da lógica desenvolvidos por Aristóteles e sistematizados por Porfírio.

A Programação Orientada a Objetos consolidou-se, desde as últimas décadas do século XX, como um paradigma dominante na engenharia de software moderna. Seu sucesso reside na sua capacidade de fornecer um poderoso arsenal conceptual para modelar sistemas complexos de forma mais intuitiva e gerenciável. Através da organização do código em torno de "objetos" – entidades que encapsulam dados (atributos) e comportamentos (métodos) – a POO permite aos desenvolvedores espelhar, com maior fidelidade, as entidades do mundo real ou conceptual11 que se pretende representar e manipular computacionalmente. Linguagens como Java oferecem um conjunto robusto de mecanismos – classes, herança, polimorfismo, encapsulamento – que facilitam essa abordagem, promovendo a reutilização de código, a modularidade e a manutenibilidade dos sistemas.12

Por outro lado, o legado de Aristóteles (384-322 a.C.), particularmente a sua Metafísica e as suas Categorias, juntamente com a clarificação lógica providenciada por Porfírio (c. 234-c. 305 d.C.) na sua Isagoge (Introdução às Categorias de Aristóteles), constitui a pedra angular da ontologia e da lógica ocidentais13. Aristóteles empreendeu a monumental tarefa de analisar a estrutura fundamental da realidade, distinguindo entre substância (aquilo que é em si mesmo14) e acidentes (as propriedades que inerem na substância), explorando os conceitos de matéria e forma, ato e potência, e estabelecendo as categorias do ser – os modos fundamentais de predicação. Porfírio, por sua vez, sistematizou a lógica da classificação através dos cinco predicáveis (gênero, espécie, diferença específica, próprio, acidente) e da célebre "Árvore de Porfírio", um modelo hierárquico para organizar o conhecimento e definir entidades através de divisões sucessivas. Estas ferramentas conceptuais estabeleceram um quadro rigoroso para a análise do ser, da predicação e da classificação hierárquica que influenciou indelevelmente o pensamento subsequente ao longo de mais de dois milênios.15

Dar-se-á o objetivo primordial deste trabalho, portanto, duplamente: primeiramente, aprofundar a compreensão da própria natureza da POO, revelando as suas fundações conceptuais não como meras convenções técnicas arbitrárias, mas como ecos, possivelmente inconscientes porém notavelmente precisos16, de estruturas lógicas e ontológicas clássicas que visam apreender e organizar a realidade17 (ao menos esta é a minha percepção); secundariamente, ilustrar a aplicabilidade e a perene relevância dos conceitos filosóficos aristotélicos e porfirianos em domínios aparentemente distantes e eminentemente práticos (melhor dito, também, “aplicados” para alguns certos alguéns não dizerem que cedi um ponto numa certa argumentação/debate) como a ciência da computação18. Argumentaremos que a forma como modelamos "objetos" em software reflete, de maneira consistente, a análise aristotélica da substância individual e suas propriedades, e que as hierarquias de classes espelham a lógica classificatória porfiriana.

Nesta investigação, procederemos a um mapeamento sistemático onde conceitos centrais da POO em Java serão cuidadosamente correlacionados com suas contrapartes filosóficas. Analisaremos como a `Classe` pode ser interpretada à luz da Substância Secundária (espécie, gênero) ou da Forma aristotélica; como o `Objeto` (instância) corresponde à Substância Primária (o indivíduo concreto); como os `Atributos` (campos) se assemelham aos Acidentes que qualificam a substância, enquadrando-se nas Categorias; como os `Métodos` refletem as noções de Potência (a capacidade definida) e Ato (a execução da ação); e, de forma particularmente notável, como o mecanismo da `Herança` em Java replica a estrutura taxonômica da Árvore de Porfírio, articulando Gênero, Espécie e Diferença Específica na criação de hierarquias de tipos. Outros conceitos como Abstração, Encapsulamento e Polimorfismo serão igualmente examinados sob esta ótica filosófica19.

Ao tecer estas conexões, aspiro não apenas a iluminar meus estudos (e, espero, o teu), mas também a suscitar uma reflexão mais ampla sobre a natureza da modelagem computacional como uma forma contemporânea de ontologia aplicada20, onde as estruturas fundamentais do pensamento humano, identificadas milênios atrás, encontram nova e poderosa expressão no silício. Esta introdução estabelece, assim, o palco pra bobo dançar21 para uma exploração detalhada destas correspondências.

2. Fundamentos da Metafísica e Lógica Aristotélico-Porfiriana

Para estabelecer solidamente as pontes conceituais22 entre a filosofia clássica23 e a programação orientada a objetos, é imprescindível uma exposição detalhada dos elementos centrais do pensamento de Aristóteles sobre o ser e a realidade24, bem como da sistematização lógica proposta por Porfírio25. Estes sistemas, embora desenvolvidos há mais de dois milênios, oferecem um arcabouço de análise da estrutura do mundo e do pensamento26 que, como argumentaremos, encontra ecos notáveis na modelagem computacional moderna.

2.1 Aristóteles: A Arquitetura do Ser27

A filosofia de Aristóteles, particularmente sua metafísica (ou "filosofia primeira"28), representa uma investigação radical sobre os princípios e causas fundamentais do ser enquanto ser (on hê on29). Nela, Aristóteles busca desvendar as estruturas mais básicas da realidade, estabelecendo categorias e distinções que se tornaram canônicas no pensamento ocidental.

2.2 Porfírio: A Lógica da Classificação

Porfírio de Tiro50, um filósofo neoplatônico51, escreveu a Isagoge (Introdução), um breve tratado destinado a facilitar a compreensão das Categorias de Aristóteles. A Isagoge tornou-se um texto fundamental na lógica medieval e renascentista52, principalmente por sua clarificação dos modos como os predicados universais se relacionam com os sujeitos.

Com estes fundamentos da metafísica aristotélica e da lógica porfiriana expostos em detalhe, possuímos agora o instrumental conceitual necessário para proceder à análise comparativa com os pilares da Programação Orientada a Objetos, explorando as surpreendentes ressonâncias57 entre estas antigas estruturas de pensamento e as práticas contemporâneas de modelagem de software58. A próxima seção se debruçará sobre os conceitos chave da POO, preparando o terreno para o mapeamento direto entre os dois domínios.

3. Pilares da Programação Orientada a Objetos (com exemplos em Java59)

A Programação Orientada a Objetos (POO) é um paradigma de programação que utiliza "objetos" – instâncias de classes – para projetar e desenvolver aplicações de software. Baseia-se na ideia de que o mundo (ou o domínio do problema a ser modelado) pode ser representado como uma coleção de objetos que interagem entre si. Java é uma linguagem de programação proeminente que implementa integralmente os princípios da POO. Compreender estes princípios é fundamental para apreciar as analogias com a filosofia aristotélica e porfiriana.

// Exemplo de definição de Classe em Java

public class Cachorro60 {

// Atributos (dados/estado) - serão detalhados em 3.3

String nome;

int idade;

String raca;

// Métodos (comportamentos) - serão detalhados em 3.4

public void latir() {

System.out.println("Au au!");

}

public void buscarOsso() {

System.out.println(nome + " está buscando o osso.");

}

// Construtor (método especial para criar objetos) - será implícito em 3.2

public Cachorro(String nomeInicial, int idadeInicial, String racaInicial) {

this.nome = nomeInicial;

this.idade = idadeInicial;

this.raca = racaInicial;

}

}

// Exemplo de criação (instanciação) de Objetos em Java

public class Main {

public static void main(String[] args) {

// Criando dois objetos da classe Cachorro

Cachorro rex = new Cachorro("Rex", 5, "Pastor Alemão"); // rex é uma instância de Cachorro

Cachorro bela = new Cachorro("Bela", 2, "Poodle"); // bela é outra instância de Cachorro

// Cada objeto tem seu próprio estado

System.out.println("Nome do primeiro cachorro: " + rex.nome); // Saída: Rex

System.out.println("Idade do segundo cachorro: " + bela.idade); // Saída: 2

// Objetos podem executar os comportamentos de sua classe

rex.latir(); // Saída: Au au!

bela.buscarOsso(); // Saída: Bela está buscando o osso.

}

}

public class ContaBancaria {

// Atributos que definem o estado de uma ContaBancaria

private String numeroConta; // Exemplo de atributo privado

private String nomeTitular;

private double saldo; // O valor deste atributo varia, mudando o estado do objeto

// Construtor para inicializar os atributos

public ContaBancaria(String numero, String titular) {

this.numeroConta = numero;

this.nomeTitular = titular;

this.saldo = 0.0; // Saldo inicial

}

// Métodos para interagir com os atributos (ver 3.4 e 3.6)

// ... (depositar, sacar, getSaldo, etc.) ...

}

public class ContaBancaria {

// Atributos ...

private String numeroConta;

private String nomeTitular;

private double saldo;

// Construtor ...

public ContaBancaria(String numero, String titular) { /*...*/ }

// Métodos que definem o comportamento

public void depositar(double valor) {

if (valor > 0) {

this.saldo += valor; // Modifica o estado (saldo)

System.out.println("Depósito realizado. Novo saldo: " + this.saldo);

}

}

public boolean sacar(double valor) {

if (valor > 0 && valor <= this.saldo) {

this.saldo -= valor; // Modifica o estado (saldo)

System.out.println("Saque realizado. Novo saldo: " + this.saldo);

return true;

} else {

System.out.println("Saque não permitido. Saldo insuficiente ou valor inválido.");

return false;

}

}

public double getSaldo() {

return this.saldo; // Acessa o estado (saldo)

}

}

// Uso dos métodos:

// ContaBancaria minhaConta = new ContaBancaria("123", "João");

// minhaConta.depositar(100.0);

// minhaConta.sacar(50.0);

// double saldoAtual = minhaConta.getSaldo();

// Exemplo: A classe 'Veiculo' abstrai características comuns

// a diferentes tipos de veículos, sem detalhar como cada um funciona internamente.

public abstract class Veiculo { // Classe abstrata: não pode ser instanciada diretamente

protected String marca;

protected String modelo;

protected int ano;

public abstract void ligar(); // Método abstrato: define o 'o quê', não o 'como'

public abstract void desligar();

public abstract void acelerar(int incremento);

public String getDescricao() {

return marca + " " + modelo + " (" + ano + ")";

}

// Detalhes complexos do motor, transmissão, etc., são abstraídos.

}

public class ContaBancaria {

private String numeroConta; // Atributo privado (encapsulado)

private double saldo; // Atributo privado (encapsulado)

// Métodos públicos que fornecem acesso controlado ao estado

public String getNumeroConta() {

return numeroConta;

}

public double getSaldo() {

return saldo;

}

public void depositar(double valor) {

if (valor > 0) { // Lógica de validação dentro do método

this.saldo += valor;

}

}

// O acesso direto 'minhaConta.saldo = -1000;' é impedido,

// garantindo a integridade do saldo através do método 'depositar'.

}

// Superclasse (Geral)

public class Animal {

protected String nome; // protected: acessível na classe e subclasses

public Animal(String nome) {

this.nome = nome;

}

public void comer() {

System.out.println(nome + " está comendo.");

}

public void fazerSom() {

System.out.println(nome + " faz um som genérico.");

}

}

// Subclasse (Especializada) - Herda de Animal

public class Cachorro extends Animal {

private String raca;

public Cachorro(String nome, String raca) {

super(nome); // Chama o construtor da superclasse (Animal)

this.raca = raca;

}

// Método específico da subclasse

public void latir() {

System.out.println(nome + " (" + raca + ") está latindo: Au au!");

}

// Sobrescrita (Override) de método herdado (ver 3.8 Polimorfismo)

@Override // Anotação opcional, mas recomendada

public void fazerSom() {

System.out.println(nome + " late.");

}

}

// Uso:

// Cachorro rex = new Cachorro("Rex", "Labrador");

// rex.comer(); // Método herdado de Animal

// rex.latir(); // Método específico de Cachorro

// rex.fazerSom(); // Método sobrescrito em Cachorro

public class TestePolimorfismo {

public static void main(String[] args) {

// Criando objetos de diferentes subclasses de Animal

Animal animal1 = new Cachorro("Rex", "Labrador"); // Objeto Cachorro referenciado por variável Animal

Animal animal2 = new Gato("Mimi", "Siamês"); // Objeto Gato referenciado por variável Animal (Gato também herda de Animal)

// Chamando o mesmo método 'fazerSom()' em objetos diferentes

fazerBarulho(animal1); // Executará o fazerSom() de Cachorro -> "Rex late."

fazerBarulho(animal2); // Executará o fazerSom() de Gato -> "Mimi mia."

}

// Método genérico que opera sobre qualquer Animal

public static void fazerBarulho(Animal animal) {

System.out.print("O animal faz: ");

animal.fazerSom(); // Polimorfismo em ação: a versão correta é chamada

}

}

// Supondo que exista a classe Gato:

/*

public class Gato extends Animal {

// ... construtor ...

@Override

public void fazerSom() {

System.out.println(nome + " mia.");

}

public void arranharSofa() { // Método específico

System.out.println(nome + " está arranhando o sofá.");

}

}

*/

// Definição da Interface

public interface Voavel {

int ALTITUDE_MAXIMA = 10000; // Constante (public static final implicitamente)

void decolar(); // Método abstrato (public abstract implicitamente)

void voar();

void aterrar();

// Método default (com implementação, desde Java 8)

default void checarAsas() {

System.out.println("Checando as asas...");

}

}

// Classe que implementa a interface

public class Aviao implements Voavel {

private String modelo;

public Aviao(String modelo) { this.modelo = modelo; }

@Override

public void decolar() { System.out.println("Avião " + modelo + " decolando."); }

@Override

public void voar() { System.out.println("Avião " + modelo + " voando na altitude."); }

@Override

public void aterrar() { System.out.println("Avião " + modelo + " aterrando."); }

// Não precisa implementar checarAsas(), pode usar a default ou sobrescrever.

}

// Outra classe, não relacionada com Aviao na herança, pode implementar Voavel

public class Passaro implements Voavel {

private String especie;

public Passaro(String especie) { this.especie = especie; }

@Override

public void decolar() { System.out.println(especie + " levanta voo."); }

@Override

public void voar() { System.out.println(especie + " está voando."); }

@Override

public void aterrar() { System.out.println(especie + " pousa."); }

}

// Uso polimórfico via interface:

// Voavel meuVoador = new Aviao("Boeing 747");

// meuVoador.decolar();

// meuVoador = new Passaro("Canário");

// meuVoador.voar();

Estes pilares – Classe, Objeto, Atributos, Métodos, Abstração, Encapsulamento, Herança e Polimorfismo, juntamente com o conceito de Interface – formam o núcleo da Programação Orientada a Objetos e fornecem as ferramentas conceituais e práticas utilizadas em linguagens como Java para modelar e construir sistemas de software complexos. Com esta base técnica estabelecida, estamos prontos para, no próximo capítulo, traçar as conexões diretas com os conceitos filosóficos de Aristóteles e Porfírio.

4. Tecendo a Conexão: Mapeando Conceitos Filosóficos na POO (Java)

Com os fundamentos da metafísica aristotélico-porfiriana e os pilares da Programação Orientada a Objetos (POO) devidamente estabelecidos nos capítulos anteriores, estamos agora posicionados para empreender a tarefa central deste artigo: o mapeamento sistemático e a análise comparativa entre estes dois domínios61. Este capítulo demonstrará, ponto por ponto, como as estruturas e mecanismos da POO, exemplificados em Java, espelham de forma notavelmente precisa os conceitos ontológicos e lógicos clássicos. Revelaremos que a maneira como concebemos e implementamos classes, objetos, atributos, métodos e hierarquias em software não é arbitrária, mas ecoa profundamente as tentativas de Aristóteles e Porfírio de compreender e categorizar a própria estrutura da realidade e do pensamento.

Este mapeamento detalhado revela que os conceitos fundamentais da POO, longe de serem meras invenções técnicas, ressoam com uma longa tradição filosófica de análise da realidade e do conhecimento. As estruturas que usamos para organizar o código parecem refletir estruturas que filósofos identificaram na própria tessitura do ser e da lógica. O próximo capítulo explorará as implicações e os limites desta FASCINANTE analogia.

5. Conclusão: A Relevância Perene das Estruturas Fundamentais do Pensamento

Alcançamos o ápice da presente investigação, a qual se propôs desvelar e perscrutar os liames entre os preceitos da Programação Orientada a Objetos (POO), com particular enfoque na linguagem Java, e os alicerces da metafísica e da lógica legadas por Aristóteles e Porfírio. O itinerário intelectual percorrido, que se estendeu da exposição dos fundamentos filosóficos clássicos à análise dos mecanismos inerentes à POO e ao subsequente mapeamento conceitual, facultou-nos a transcendência da aparente incomensurabilidade que pairava sobre estes domínios do saber. A tese fulcral, que advoga a existência de significativos paralelismos estruturais e conceituais, não somente logrou certa sustentação, mas outrossim revelou uma notável ressonância entre o modo pelo qual concebemos a arquitetura do ser e a maneira pela qual erigimos a arquitetura do software.

Recapitulando as correspondências fundamentais identificadas no Capítulo 4, constatamos que:

  1. A Classe na POO encontra um análogo robusto na Substância Secundária (espécie e gênero), na Forma e na Essência aristotélicas, servindo como o molde definidor universal que estabelece o "quê" de uma entidade computacional.

  2. O Objeto, enquanto instância concreta de uma classe, corresponde diretamente à Substância Primária, o indivíduo existente e sujeito de propriedades, podendo ser compreendido como um composto hilemórfico computacional (a "matéria" da memória informada pela estrutura da classe).

  3. Os Atributos de um objeto espelham os Acidentes que inerem na substância, representando seu estado mutável ou propriedades, e seus tipos frequentemente se alinham com as Categorias aristotélicas (quantidade, qualidade, relação, etc.).

  4. Os Métodos refletem a dinâmica aristotélica de Potência (a definição do método na classe, representando a capacidade) e Ato (a invocação do método no objeto, representando a atualização dessa capacidade), bem como as categorias de Ação e Paixão.

  5. O mecanismo de Herança replica, de maneira surpreendentemente fiel, a estrutura taxonômica da Árvore de Porfírio, articulando as relações lógicas de Gênero, Espécie e Diferença Específica na construção de hierarquias de classes.

  6. A Abstração na POO se assemelha ao processo filosófico de identificar a Essência ou de considerar um Gênero, focando nos aspectos definidores e comuns, abstraindo dos detalhes particulares.

  7. O Encapsulamento, ao agrupar dados e comportamentos e proteger o estado interno, ecoa a noção de Substância como uma unidade íntegra e coesa.

  8. O Polimorfismo corresponde à manifestação variada de uma ação ou capacidade genérica (definida no Gênero/Superclasse) de acordo com a natureza específica de cada Espécie (Subclasse), governada por sua Diferença Específica (método sobrescrito).

  9. Mesmo conceitos como Interface podem ser interpretados filosoficamente como representações de contratos de Potencialidades ou formas comportamentais abstratas, aplicáveis a diferentes tipos de substâncias (classes).

A elucidação destas correspondências encerra implicações de monta para ambas as disciplinas. No que tange à Ciência da Computação e à Engenharia de Software, a presente análise propicia uma perspectiva sobremaneira enriquecedora acerca dos fundamentos conceituais da POO. Distantes de se afigurarem meras convenções técnicas ou artifícios pragmáticos da programação, os pilares da POO manifestam-se ancorados em estruturas lógicas e ontológicas que o pensamento filosófico ocidental laboriosamente desenvolveu com o fito de apreender a realidade. Apreender a herança qual taxonomia rigorosa, nos moldes porfirianos, ou vislumbrar o encapsulamento como a salvaguarda da integridade substancial, pode facultar aos cultores da arte da programação um arcabouço conceitual mais profundo para a reflexão sobre modelagem, desígnio e arquitetura de software. A propalada "intuitividade" amiúde atribuída à POO quiçá resida, em parte, nesta sua intrínseca capacidade de espelhar categorias basilares do nosso próprio aparelho cognitivo acerca do mundo.

Para a Filosofia, esta incursão constitui um testemunho da notável perenidade e ampla aplicabilidade dos constructos aristotélicos e porfirianos. Constatar que estruturas como a distinção substância/acidente, matéria/forma, ato/potência, e a lógica classificatória de gênero/espécie, afloram espontaneamente (conquanto talvez não conscientemente invocadas pelos pioneiros da POO) em um domínio tão hodierno e tecnológico quão a programação, sublinha a universalidade e a firmeza destas ferramentas analíticas. Ademais, a POO pode propiciar um modelo concreto e dinâmico para ilustrar e veicular pedagogicamente conceitos metafísicos e lógicos que, diversamente, poderiam afigurar-se sobremodo abstratos. O objeto computacional, enquanto instância tangível da substância primária hilemórfica, erige-se em exemplo pedagógico de invulgar potência.

Embora reconhecendo, consoante previamente discutido (no hipotético Capítulo 5), os limites e as zonas onde a analogia demanda nuance – tais como a natureza fluida do estado do objeto em contraponto à relativa estabilidade da essência, a existência de conceitos como métodos `static`, os quais não se coadunam perfeitamente à estrutura, ou a índole por vezes puramente funcional e não "substancial" de certas classes e métodos –, a vitalicidade das correlações identificadas permanece incontrovertível. A paralelização não sugere identidade cabal, mas antes uma homologia estrutural profunda.

Em suma, o presente ensaio advogou que a Programação Orientada a Objetos, mormente exemplificada por Java, não se restringe a um paradigma de engenharia de software, senão que representa outrossim uma manifestação contemporânea de estruturas de pensamento ontológico e lógico profundamente radicadas na tradição filosófica ocidental, com raízes que remontam a Aristóteles e Porfírio. O modo pelo qual organizamos o código para modelar o mundo espelha, em grande medida, a maneira pela qual os filósofos se esforçaram por organizar o próprio pensamento acerca do mundo e de sua estrutura fundamental. Esta constatação incita a uma reflexão mais abrangente sobre a "metafísica implícita" no desígnio de software e na tecnologia em geral – as cosmovisões e as estruturas categoriais que, cônscia ou inconscientemente, plasmamos nas ferramentas que engendramos.

O diálogo interdisciplinar entre a Filosofia e a Ciência da Computação, tal como procuramos exemplificar aqui, desvela-se, portanto, não qual exercício de erudição esotérica, mas sim como uma via profícua para a mútua iluminação. Ao perscrutarmos as fundações filosóficas subjacentes às nossas práticas de programação, logramos não apenas exaltar nossa apreciação histórica e conceitual, mas potencialmente aprimorar nossa destreza na modelagem de sistemas complexos com acrescida clareza e rigor. A lógica perene de Aristóteles e Porfírio continua, destarte, a informar, ainda que tacitamente, a vanguarda da tecnologia digital, demonstrando que as interrogações fundamentais acerca do ser, da definição e da classificação remanescem no cerne do esforço humano por compreender e interagir com a realidade, quer seja ela física, quer virtual.

E assim, dileto leitor, concluímos esta nossa peregrinação intelectual, que ousou buscar os vestígios da Sabedoria perene de Aristóteles e Porfírio nas estruturas lógicas da moderna Programação Orientada a Objetos. Rogo que, ao término desta leitura, não a encerres com a frieza de quem apenas percorreu linhas de código ou páginas de lógica antiga76, mas sim com o assombro renovado diante da ordem e da inteligibilidade que permeiam toda a Criação, desde o ser mais profundo até as estruturas que o engenho humano concebe, muitas vezes sem se dar conta da Mão que o guia.

Se, porventura, em meio a estas reflexões que buscaram traçar pontes entre mundos, incorri em alguma imprecisão ou falha de juízo – e suplico a Deus por Sua misericórdia, pois a mente humana, mesmo buscando a luz, é propensa a tropeços – , confio que tua caridade e discernimento saberão relevar. Lembra-te: não se pretendeu aqui esgotar as profundezas nem da técnica nem da filosofia, mas antes acender uma centelha, sugerir uma harmonia, um testemunho da Razão divina que se reflete mesmo nas ferramentas que forjamos para ordenar nosso mundo.

Se algum vislumbre de verdade ou beleza pôde transparecer nestas páginas, que toda a glória seja dada Àquele que é a própria Verdade e Beleza, Fonte de toda ordem e inteligência, o Logos Eterno pelo qual "todas as coisas foram feitas" (Jo 1, 3), e sem o qual nada do que foi feito se fez.

Que o Espírito Santo, Doador de todo o entendimento, ilumine agora a tua própria mente e coração, para que possas discernir as pegadas do Criador não apenas nos céus estrelados ou na profundidade da alma, mas também na lógica que estrutura o silício. Que Ele te fortaleça na busca incessante pelo verdadeiro, pelo bom e pelo belo, onde quer que se manifestem, conduzindo teus passos na jornada rumo àquela Luz que não conhece ocaso. E que a Virgem Santíssima, Sedes Sapientiae, Trono da Sabedoria, te ampare e guie sempre.

Itinera cum Deo, et vale!


  1. Pois a razão humana, em seu operar correto, move-se segundo princípios lógicos e ontológicos universais, primeiramente articulados por Aristóteles. Como comenta Santo Tomás, "o modo de proceder em todas as ciências é adquirido através do conhecimento da Lógica" (Santo Tomás de Aquino, Comentário aos Analíticos Posteriores, Livro I, Lição 1), a qual se funda na apreensão da estrutura do ser.↩︎

  2. Que não se espere, pois, a demonstração apodíctica, mas antes um exercício que busca analogias e correspondências prováveis, mais afim à dialética que à ciência estrita, à semelhança do que se advertiu no opúsculo de estudos.↩︎

  3. Não serão traduzidas nenhuma citação que eu já não encontrar traduzida. Livros e sites foram usados, com as obras originais dos autores, ou traduções confiáveis; em não se tratando de um sério artigo, mas antes uma certa “paródia frutífera”, não manterei este rigor. No entanto, certamente colocarei as citações.↩︎

  4. Adotarei, no presente escrito, o método de exposição por tópicos, a exemplo do que se encontra nos lavores menores do preceptor Guilherme.↩︎

  5. Isto, naturalmente, considerando-se um cenário ideal, no qual se deveria contar com profissionais que compreendessem a realidade antes de ingressarem na chamada “vida acadêmica”; o que se observa, contudo, na atualidade, são “acadêmicos” cujo conhecimento é inversamente proporcional àquilo que “dominam”.↩︎

  6. A convergência não denota, necessariamente, uma influência histórica direta, mas antes sugere que a tentativa de modelar computacionalmente a realidade reencontra, por exigência da própria inteligibilidade do real, as estruturas ontológicas e lógicas que a filosofia perene já havia identificado. A razão, ao buscar ordem, tende a espelhar a ordem do ser.↩︎

  7. Assim espero.↩︎

  8. Pois, como adverte Santo Tomás, a compreensão requer não apenas a verdade do que é dito, mas também a adequada disposição do intelecto que ouve ou lê. Que estas linhas sirvam de estímulo à tua própria reflexão.↩︎

  9. De antemão, peço desculpas pela escrita labiríntica.↩︎

  10. Distinção aparente, pois, como ensina Aristóteles, todas as ciências e artes, enquanto produtos da razão humana que busca conhecer ou fazer algo, compartilham princípios lógicos e ontológicos fundamentais, ainda que seus objetos formais difiram. A Metafísica considera o ser enquanto ser (Metafísica, IV, 1), fundamento último de toda inteligibilidade, inclusive a das artes práticas ou poiéticas.↩︎

  11. Sugere uma intenção mimética ou representacional da POO, buscando uma adequatio rei et intellectus, ainda que a "coisa" aqui seja um modelo computacional e o "intelecto" o do programador que busca capturar a estrutura do domínio modelado.↩︎

  12. PROGRAMAÇÃO ORIENTADA A OBJETOS. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2024. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Programa%C3%A7%C3%A3o_orientada_a_objetos&oldid=68176672>. Acesso em: 28 mar. 2025.↩︎

  13. A centralidade de Aristóteles é inegável. Santo Tomás afirma que ele "alcançou o cume do engenho humano" na filosofia (De unitate intellectus, cap. 1). Porfírio, por sua vez, tornou acessível e sistemática a porta de entrada para a lógica aristotélica, sendo sua Isagoge leitura fundamental por séculos.↩︎

  14. O que aqui fora dito não se pode entender de forma absoluta, pois a mesma definição é respondida em “ST: De potentia q. 7, a. 3 arg. 4”; Santo Tomás, para responder a “Praeterea, cuicumque convenit ratio generis substantiae, est in genere. Sed ratio substantiae est per se existere, quod maxime convenit Deo. Ergo Deus est in genere substantiae.” diz “Ad quartum dicendum, quod ens per se non est definitio substantiae, ut Avicenna dicit. Ens enim non potest esse alicuius genus, ut probat philosophus, cum nihil possit addi ad ens quod non participet ipsum; differentia vero non debet participare genus. Sed si substantia possit habere definitionem, non obstante quod est genus generalissimum, erit eius definitio: quod substantia est res cuius quidditati debetur esse non in aliquo. Et sic non conveniet definitio substantiae Deo, qui non habet quidditatem suam praeter suum esse. Unde Deus non est in genere substantiae, sed est supra omnem substantiam.” (Thomas de Aquino, Quaestiones disputatae de potentia, q. 7)↩︎

  15. Giovanni Reale (2001). Metafísica de Aristóteles I. [S.l.]: Loyola. p. sup. 250-278. ISBN 978-85-15-02361-5↩︎

  16. Reitera-se que a precisão da correspondência não implica necessariamente conhecimento filosófico por parte dos criadores da POO, mas pode indicar que a estrutura lógica da realidade impõe-se à razão quando esta busca modelá-la eficazmente. A verdade pode ser encontrada mesmo por quem não a busca diretamente sob o nome de filosofia. Como já foi dito na nota 4.↩︎

  17. A finalidade da lógica e da metafísica aristotélicas não é meramente especulativa, mas busca fornecer as ferramentas para um conhecimento verdadeiro e ordenado do real. "O fim da ciência especulativa é a verdade", diz Aristóteles (Metafísica, II, 1, 993b20).↩︎

  18. A distinção pode remeter à classificação aristotélica das ciências em especulativas (conhecimento pelo conhecimento), práticas (conhecimento para a ação moral/política) e poiéticas ou produtivas (conhecimento para fazer/produzir algo). A engenharia de software seria uma ciência poiética ou aplicada, mas que, argumenta-se aqui, utiliza instrumentalmente estruturas descobertas pela ciência especulativa (metafísica, lógica).↩︎

  19. Com o perdão da minha falta de conhecimento em Java, basear-me-ei em informações das documentações e mais propriamente no já observado em sala de aula. Isso pois não é necessário saber muito de Java para montar a correlação.↩︎

  20. Entenda-se aqui como o uso prático, na construção de sistemas computacionais, de princípios e estruturas que originalmente pertencem à investigação filosófica sobre a natureza e a organização do ser.↩︎

  21. Sinto a necessidade disso explicar. Expressão de humildade (ou ironia) perante a tarefa proposta, reconhecendo a possibilidade de erro ou insuficiência na análise, à semelhança do tom encontrado em outros de meus escritos; para que, destoando-se da linguagem comum, não, por conseguinte, confunda-se e creia se tratar de um artigo..↩︎

  22. Tais pontes se fundam na analogia, não na univocidade. Como ensina Santo Tomás, o ente se diz de múltiplos modos (analogia entis), permitindo que estruturas descobertas em um domínio (metafísico) encontrem correspondentes, guardadas as devidas proporções, em outro (computacional).↩︎

  23. Entenda-se aqui, primordialmente, o realismo filosófico de Aristóteles e seus comentadores medievais, notadamente Santo Tomás de Aquino, que tomaram o Estagirita como mestre no que concerne ao conhecimento natural da realidade.↩︎

  24. Refere-se ao núcleo da ontologia aristotélica exposta principalmente em sua Metafísica (a ciência do ser enquanto ser) e nas Categorias (os gêneros supremos do ser predicamental), onde se tratam conceitos como substância, acidente, ato, potência, matéria e forma.↩︎

  25. Alusão direta à Isagoge de Porfírio, obra introdutória às Categorias aristotélicas, que organiza os cinco predicáveis (gênero, espécie, diferença, próprio, acidente) e delineia a estrutura hierárquica da classificação lógica (a "Árvore de Porfírio"), essencial para a definição e divisão conceitual.↩︎

  26. "A ordem das partes da lógica é tomada da ordem dos atos da razão."↩︎

  27. Ou “ente”. Não proponho aqui um tratado, então não entrarei em discussões sobre “ente” e “ser”. Os mais acalorados que me corrijam.↩︎

  28. Denominação utilizada pelo próprio Aristóteles (prôtê philosophia), por versar sobre os princípios primeiros e as causas mais elevadas de todas as coisas, fundamento das demais ciências. Cf. Aristóteles, Metafísica, Livro VI (Epsilon), 1, 1026a29-31.↩︎

  29. É este o objeto formal e próprio da Metafísica, distinto das ciências particulares que recortam uma parcela do ser (e.g., os números, as figuras, os viventes). A Filosofia Primeira investiga o ser em sua universalidade e os atributos que lhe são inerentes por sua própria natureza. Cf. Aristóteles, Metafísica, Livro IV (Gamma), 1, 1003a21-22.↩︎

  30. Conceito nuclear. Ousia, frequentemente traduzida como substância ou essência, significa literalmente 'entidade' ou 'ser-idade'. É aquilo que possui o ser de modo primário e fundamental, o suporte dos acidentes. Como adverte Santo Tomás, "substância significa essência à qual compete ser por si, e não em outro" (Santo Tomás de Aquino, Summa Theologiae, I, q. 3, a. 5, ad 1).↩︎

  31. Esta é a definição lógica primordial da substância nas Categorias: aquilo que não se predica de outro nem inere em outro como em seu sujeito. Cf. Aristóteles, Categorias, 2a11-13.↩︎

  32. Diz Edward Feser, em seu livro “Aristotle on Methods and Metaphysics”: “Aristotle, in the Categories, seems to have been the first to propose explicitly an independence criterion for substances.2 Those entities which are classified as primary substances in the Categories (e.g., individual organisms and artifacts) are, in Aristotle’s view, ontologically independent, since they are neither “said of” nor “in” anything else as a subject.”↩︎

  33. Literalmente, 'o que jaz sob'. A substância é o substrato último que recebe as determinações acidentais e, na análise hilemórfica, a forma substancial.↩︎

  34. Assim denominada por ser a substância no sentido mais forte, mais próprio e primeiro (kyriôtata kai prôtôs kai malista), fundamento de toda predicação e existência concreta. Cf. Aristóteles, Categorias, 2a11.↩︎

  35. A substância primeira é sempre singular (tode ti, 'este algo'), numericamente una. Sua existência concreta é o pressuposto para a existência (derivada) das substâncias secundárias e dos acidentes.↩︎

  36. Pode-se predicar "homem" de Sócrates, mas não se pode predicar "Sócrates" (este indivíduo) de outra coisa como sua essência. Ele é o limite da predicação essencial.↩︎

  37. São as naturezas universais (espécies e gêneros) abstraídas dos indivíduos. Seu modo de ser é no intelecto (como conceito) e nas substâncias primeiras (como sua forma ou natureza). Cf. Aristóteles, Categorias, 2a14-19.↩︎

  38. Aristóteles justifica esta hierarquia pelo grau de proximidade e determinação em relação à substância primeira: "a espécie é mais substância que o gênero porque está mais perto da substância primeira" (Aristóteles, Categorias, 2b7-8). Dizer "Sócrates é homem" informa mais sobre sua entidade do que dizer "Sócrates é animal".↩︎

  39. São as substâncias compostas de matéria e forma, sujeitas à geração, corrupção e mudança, que constituem o objeto de estudo da Física (no sentido aristotélico de ciência da natureza). Cf. Aristóteles, Física, Livro II, 1.↩︎

  40. Termo posterior (do grego hyle, matéria, e morphe, forma) que designa a teoria central de Aristóteles para explicar a constituição das substâncias corpóreas como um composto de matéria e forma. É desenvolvida principalmente na Física e na Metafísica (Livros VII-IX).↩︎

  41. Embora distinguíveis pela análise intelectual, matéria e forma, nas substâncias sensíveis, constituem uma unidade ontológica indissociável. A substância concreta não é matéria mais forma, mas matéria informada. Como diz Santo Tomás: "A forma e a matéria estão compreendidas na essência do composto como suas partes" (Santo Tomás de Aquino, De Ente et Essentia, cap. 2).↩︎

  42. A matéria, em si, não é 'algo' em ato, mas a capacidade de 'tornar-se algo'. É o princípio de receptividade e mutabilidade nas substâncias. "Chamo matéria o que em si não é nem um 'quê', nem uma quantidade, nem nenhuma outra das coisas pelas quais o ser é determinado." (Aristóteles, Metafísica, Livro VII, 3, 1029a20-21).↩︎

  43. Na mudança substancial (e.g., a madeira que queima e vira cinza), algo deve permanecer para garantir a continuidade do processo: este algo é a matéria primeira, que perde uma forma (madeira) e adquire outra (cinza). Cf. Aristóteles, Física, Livro I, 7.↩︎

  44. Na tradição tomista, é a matéria assinalada pela quantidade (materia signata quantitate) o princípio que individua a forma específica, explicando como podem existir múltiplos indivíduos da mesma espécie (e.g., muitos homens, todos com a mesma forma 'alma racional'). Cf. Santo Tomás de Aquino, Summa Theologiae, I, q. 50, a. 2, ad 3.↩︎

  45. A forma é ato (energeia ou entelecheia - enteléquia, perfeição possuída) porque realiza a potencialidade da matéria, conferindo-lhe existência determinada e específica. "O ato é quando a coisa existe, não da maneira como dizemos que existe em potência." (Aristóteles, Metafísica, Livro IX, 6, 1048a30-31).↩︎

  46. A definição expressa o 'o quê é' da coisa, sua essência (to ti ên einai), que é dada primariamente pela forma substancial. Por exemplo, a definição de homem (animal racional) expressa sua forma/alma. Cf. Aristóteles, Metafísica, Livro VII, 4-6.↩︎

  47. Para Aristóteles, a alma (psychê) é a forma substancial dos corpos naturais que têm vida em potência, o princípio primeiro pelo qual vivemos, sentimos e pensamos. Cf. Aristóteles, De Anima, Livro II, 1, 412a27-28.↩︎

  48. A existência separada da matéria ou da forma é uma abstração mental. A realidade concreta é o composto (synolon). A crítica à separação das Formas platônicas é um ponto central da metafísica aristotélica.↩︎

  49. Esta é a natureza da substância sensível: um substrato material determinado por uma estrutura formal específica que lhe confere seu ser e sua inteligibilidade.↩︎

  50. Filósofo nascido na Fenícia (c. 234–c. 305 d.C.), discípulo de Plotino e figura central na sistematização e divulgação do Neoplatonismo, além de importante comentador de Aristóteles.↩︎

  51. O Neoplatonismo, escola filosófica iniciada por Plotino no século III d.C., buscava reinterpretar e desenvolver a filosofia de Platão, integrando elementos aristotélicos e de outras tradições. A obra de Porfírio reflete essa síntese, buscando harmonizar Platão e Aristóteles onde possível, especialmente no campo da lógica.↩︎

  52. A tradução latina de Boécio da Isagoge tornou-a, juntamente com as Categorias e Sobre a Interpretação de Aristóteles (também traduzidos e comentados por Boécio), a base da chamada Logica Vetus (Lógica Antiga), currículo padrão de lógica nas universidades europeias por séculos.↩︎

  53. Notas - Isagoge & Categorias; Opúsculo de Lógica aos Novatos; Explicação da Definição Clássica das Quinque Voces.↩︎

  54. Esta estrutura hierárquica não é mera convenção, mas visa espelhar as relações de inclusão essencial que se dão entre as naturezas das coisas, desde o mais universal até o mais específico.↩︎

  55. Reitera-se a importância capital da definição essencial (definitio essentialis) para o conhecimento distinto. Sem ela, vagueia-se na penumbra da opinião, incapaz de apreender a natureza mesma do objeto estudado. Cf. Aristóteles, Analíticos Posteriores, Livro II, 3-10.↩︎

  56. Também conhecidos como denotação e conotação. Quanto mais universal um conceito (maior extensão, e.g., 'ser vivo'), menos notas definidoras ele possui (menor intensão); inversamente, quanto mais específico (menor extensão, e.g., 'Sócrates'), mais determinações o constituem (maior intensão). Esta relação inversa é um pilar da lógica clássica.↩︎

  57. A surpresa advém, talvez, do preconceito moderno que tende a ver o pensamento antigo como superado. Contudo, as estruturas fundamentais do ser e do pensar, uma vez corretamente identificadas, manifestam sua perenidade nos mais diversos domínios da atividade humana, inclusive naqueles mediados pela técnica.↩︎

  58. Que sirva de lição: a verdade não envelhece. As categorias do ser e os modos de predicar, desvelados por Aristóteles e Porfírio, continuam a informar, ainda que implicitamente, as tentativas humanas de organizar e representar a realidade, mesmo sob a veste da computação. E isto, pois, escrevo, por se dar aqui a finalização destas notas — ao menos por ora. É que, evidentemente, não detenho em Java o mesmo domínio que possuo em Lógica Básica; por isso, abstenho-me de tecer comentários que extrapolem o que se encontra no site tomado por referência.↩︎

  59. Introduction to Java↩︎

  60. Talvez te interrogues, como eu, por que razão o cão serve tão amiúde de exemplo nas explanações sobre os Predicáveis (vide Nougué). Pois bem, para não destoar do costume, hás de ver que me valerei do mesmo arquétipo canino.↩︎

  61. A tarefa não é de mera justaposição, mas de busca por analogias estruturais, como já dito. Recorde-se, caro leitor, que tal mapeamento procede por via de analogia, buscando as correspondências estruturais e não uma identidade absoluta, como convém à investigação que respeita a distinção formal dos objetos estudados. A tarefa é de inteligência, não de simples decalque.↩︎

  62. A classe, neste âmbito, cumpre a função da definição real (embora aplicada a um ente de razão ou artificial), pois manifesta a estrutura inteligível que todos os objetos daquele tipo deverão possuir para serem o que são.↩︎

  63. Esta é a natureza do universal enquanto predicável essencial (espécie ou gênero): expressar a forma ou natureza una que se multiplica nos diversos indivíduos concretos, sem perder sua identidade inteligível.↩︎

  64. A Classe, tal como a forma substancial aristotélica, representa o princípio de estabilidade e identidade específica que permanece constante através das variações acidentais (estados) dos objetos individuais.↩︎

  65. A inerência é a marca do acidente (symbebekos), aquilo que existe em outro como em seu sujeito (hypokeimenon), neste caso, o Objeto, que aqui desempenha o papel análogo ao da substância primeira. Os atributos e as capacidades de ação (métodos) não subsistem por si, mas pertencem ao objeto.↩︎

  66. Tal como a forma substancial aristotélica informa a matéria prima para constituir a substância primeira (o synolon), a Classe (forma computacional) informa a memória (matéria computacional) para constituir o Objeto individual e concreto.↩︎

  67. A memória alocada serve como a matéria próxima (deutera hyle) que recebe a determinação formal da Classe. É o substrato potencial apto a ser atualizado pela estrutura e comportamento definidos.↩︎

  68. Expressão que busca capturar a analogia: o Objeto é um composto de uma estrutura inteligível (Forma/Classe) e um substrato individualizado (Matéria/Memória+Estado), espelhando a constituição hilemórfica das substâncias sensíveis.↩︎

  69. No modelo computacional, o objeto individual (rex) é o ente último sobre o qual se opera, o sujeito das ações e dos estados, não servindo ele mesmo como "molde" para outros no mesmo nível de abstração.↩︎

  70. A modelagem computacional, sendo uma construção orientada a um fim prático (rs!, e, por isso, APLICADA), pode tratar como "essencial" para o modelo (e.g., incluído na definição da classe) algo que, filosoficamente, seria um próprio ou mesmo um acidente constante. A distinção aqui é mais pragmática, definida pelo escopo do sistema, do que estritamente ontológica.↩︎

  71. Assim como as potencialidades de um ser natural derivam de sua forma substancial (a alma, para os vivos), as capacidades operacionais de um objeto (métodos) derivam de sua forma computacional (a classe).↩︎

  72. A invocação do método é o momento em que a potência passa ao ato, a capacidade se torna operação efetiva. É a passagem da dynamis à energeia no domínio computacional.↩︎

  73. A ressalva "quase" indica que, embora a estrutura seja análoga, a implementação computacional possui suas próprias especificidades (e.g., herança múltipla de interfaces, não existente na estrutura estrita da Árvore porfiriana para substâncias). Contudo, a correspondência no modelo de herança simples é notável.↩︎

  74. Esta é a definitio fit per genus proximum et differentiam specificam, o método clássico e mais rigoroso de definição, que expressa o 'o quê é' (essência) da coisa.↩︎

  75. Distinção crucial. A interface define a potência (posse facere), deixando a essência (quid est) e a implementação concreta (quomodo facit) para a classe que a implementa. Foca no agere, não no esse.↩︎

  76. Referências a partir daqui, rs.↩︎