SEMELHANÇAS ENTRE A LINGUAGEM HUMANA E AS LINGUAGENS DE COMPUTADOR
- #Java
A comparação entre as linguagens de computador em geral (e particularmente o Java) e as línguas em geral, como a portuguesa, no que se refere a conceitos como objetos, classes e métodos, é um exercício metafórico interessante que vou delinear neste artigo. Não será, é claro, um exercício completo e acabado, posto que o assunto é amplo e complexo. Meu objetivo é apenas pensar essas semelhanças como uma maneira de compreender melhor certos conceitos das linguagens de TI, até porque estabelecer comparações e analogias é uma boa forma tanto de aprender como ensinar e eu, como egresso das humanidades, particularmente do curso de Letras, sinto-me bem confortável para estabelecer este tipo de exercício comparativo.
Quando comecei a estudar Java, a primeira coisa que me chamou a atenção foi a utilização, por parte dos professores, da palavra sintaxe para se referir ao conjunto de regras que define a estrutura válida dos programas escritos nessa linguagem. No desenvolvimento de programas, é a sintaxe que determina como os elementos de uma linguagem devem ser organizados para que o código seja compreendido e executado pelo computador. Para ser compilado e executado, a sintaxe de um determinado programa deve estar correta, caso contrário, ocorrerão erros que são reportados pelo compilador (em Java chama-se “javac”).
Mas o que significa a palavra sintaxe? Trata-se de um substantivo feminino que significa “Construção gramatical”, do latim, Syntaxis, derivado do grego, Sýntaxis, que nos proporciona a capacidade de criar “sintagmas”, ou seja, filas de palavras organizadas, “tratado cujo assunto está dividido metodicamente em classes, números etc.”. Linguisticamente falando, “a fusão ou combinação de dois ou mais elementos, em que o determinante estabelece um elo de subordinação com o determinado, formando uma unidade ou locucional, ou de um termo de oração, ou oracional”. (Dicionário de Etmologia da Língua Portuguesa, 2010, p. 599). Nem é necessário dizer que as palavras não são ordenadas aleatoriamente, elas seguem regras precisas estabelecidas sobretudo pelo uso efetivo por parte dos falantes e não, como muitos pensam, pela arbitrária decisão de um catedrático de gramática.
Especificamente em relação às linguagens de computador orientadas a objetos, como o Java, uma classe é uma espécie de modelo para criar objetos. Ela define estados e comportamentos que os objetos do mesmo tipo compartilham. Também as palavras podem ser vistas da mesma maneira, ou seja, cada palavra pertence a uma classe gramatical (substantivo, verbo, adjetivo etc.), que define seu uso e função em cada sintagma verbal ou nominal.
Podemos então inferir que assim como um objeto é uma instância de uma classe, a materialização de uma determinada abstração, uma frase pode ser compreendida como a instância de uma ideia. Ambas têm propriedades (atributos) e funcionalidades (métodos) que podem ser utilizadas em programas ou nas nossas mentes.
E por falar em métodos, os verbos de toda e qualquer língua natural expressam ações, estados e processos. Quem não se lembra das aulas de gramática da escola quando o professor falava de os verbos de ligação como ser, estar, permanecer, ficar, que justamente denotam os estados em que as pessoas ou as coisas se encontram em um determinado tempo e espaço. Ou os verbos de ação, como cantar, comer, programar etc.
Outra questão interessante a ser abordada, refere-se aos quatro pilares da POO, a saber: herança, polimorfismo, abstração e encapsulamento. Da mesma forma que classes (subclasses) herdam atributos e métodos de outra classe (superclasse), estabelecendo hierarquias e facilitando a reutilização de código, a derivação(herança) é um processo linguístico no qual palavras novas (neologias) são formadas a partir de palavras já existentes, estabelecendo relações semânticas (de significado) entre elas (por exemplo, "ler" e "leitura", “código” e “codificar” etc.). A herança também pode ser comparada com a forma como as línguas evoluem e se derivam umas das outras. Por exemplo, as línguas românicas como o português, o francês e o espanhol herdaram muitas características do latim.
Em relação ao polimorfismo, é a capacidade de um objeto ser utilizado de várias formas, ou seja, um objeto pode ser tratado como uma instância de suas superclasses, permitindo que diferentes objetos respondam à mesma mensagem (método) de maneira diferente. Da mesma forma, palavras ou expressões podem ter vários significados dependendo do contexto, característica essa comum a todas as línguas, todas mesmo. Enfatizo isso porque já ouvi pessoas falando que só o português tem vários significados diferentes para as mesmas palavras. No inglês, por exemplo, a palavra “record” pode ser o verbo “gravar”, como o substantivo “registro” ou “gravação” etc.
Já a abstração é um conceito ligado aos aspectos essenciais de uma classe ou objeto, ignorando os detalhes específicos de implementação, o que possibilita a criação de modelos simplificados e representam características e comportamentos relevantes. Com as línguas acontece a mesma coisa, todos nós frequentemente utilizamos ideias ou conceitos abstratos para tratar de assuntos concretos, como “cultura”, por exemplo, um conceito utilizado de inúmeras formas diferentes, tanto para referenciar culturas populares como eruditas.
E finalmente, encapsulamento, um procedimento que permite ocultar a representação interna (atributos e métodos) de um objeto e expor apenas interfaces controladas para interagir com essa representação. Nós também, como falantes temos pensamentos complexos e sentimentos internos que não são diretamente visíveis e também escolhemos como eles devem ser visualizados, seja por ironia, por indiretas, por antíteses etc.
Finalizando, mas sem é claro esgotar a questão, até o conceito de interface encontra o seu correspondente nas línguas naturais, estamos falando da linguagem figurada. Como uma interface em Java é um contrato que especifica um conjunto de métodos que uma classe pode implementar, sem definir como esses métodos funcionam, a linguagem figurada é um tipo de interface semântica onde palavras ou expressões são usadas em sentido diferente do literal, permitindo que os falantes comuniquem ideias de maneira mais sutil ou complexa. Isso significa que uma palavra recebe o seu significado do contrato interpessoal que se estabelece em determinadas comunidades de falantes, de acordo com as necessidades delas. Extrapolando um pouco a metáfora, podemos dizer que todas as variantes linguísticas que todos as línguas possuem, sem exceção, são interfaces sociais, esferas de sentido que nos rodeiam desde o nascimento.
Essas comparações são bastante simplificadas e não capturam toda a complexidade das linguagens envolvidas, mas servem para ilustrar como conceitos em diferentes sistemas de linguagem podem ter paralelos interessantes.