Você está na página 1de 11

PARADIGMAS DE

PROGRAMAÇÃO

Fabricio Machado da Silva


Programação declarativa
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Definir programação declarativa.


„„ Identificar as linguagens de programação declarativa.
„„ Aplicar a programação declarativa.

Introdução
Na década de 1970, a programação declarativa surgiu como um novo
paradigma para a área da programação, diferente dos já existentes, pois
exigia que o programador informasse quais os objetivos pretendidos
com a computação. Essa ação era contrária a apenas escrever algoritmos
detalhados descrevendo como os objetivos poderiam ser alcançados.
Dessa forma, a programação declarativa se constituiu como um para-
digma em que as linguagens de programação mantêm a característica de
aprendizagem mais fácil do que a linguagem de programação imperativa.
Neste capítulo, você entenderá melhor as características da progra-
mação declarativa e identificará algumas linguagens declarativas e sua
aplicação.

Programação declarativa
A linguagem de programação declarativa surgiu como um novo paradigma
de construção de programas, diferente da linguagem de programação impe-
rativa, na qual a construção de um programa ocorre por meio da construção
de algoritmos complexos que descrevem passo a passo como um determinado
resultado é alcançado, nesse paradigma, o foco está em descrever quais os
resultados devem ser alcançados. Segundo SEBESTA (2018), a programação
declarativa requer que o programador foque nos objetivos da computação, e
não em como esses objetivos serão alcançados.
2 Programação declarativa

As aplicações construídas seguindo o paradigma da linguagem declarativa


são classificadas em dois domínios principais, conforme descrito a seguir.

„„ Aplicações de inteligência artificial: no campo da inteligência artificial é


fácil imaginar porque esse paradigma se adapta bem, pois são aplicações
que se preocupam com os objetivos, utilizando regras e lógicas. Nesse
domínio a linguagem Prolog tem sido um destaque.
„„ Aplicações de acesso de informações em banco de dados: os maiores
usos de linguagens de programação declarativa estão concentrados no
domínio de consultas e manipulação de dados em sistemas de gestão
de base de dados (SGBD), a structured query language (SQL), por
exemplo, se tornou o expoente desse uso.

Na programação declarativa, podemos dizer que um programa é um con-


junto de declarações, por exemplo, verdade, falso, satisfaz restrição etc. O
conceito fundamental e o foco devem estar sempre na declaração, mas a sequ-
ência não importa. Além disso, é comum dizer que a programação declarativa
se distingue da programação imperativa no sentido de apenas especificar o
que, ao contrário de especificar o como.
As linguagens de programação declarativas ainda podem ser subdividas em
funcional e lógica. O Prolog se destaca como um exemplo de linguagem decla-
rativa e lógica no paradigma de linguagem declarativa e funcional. Linguagens
de cálculos, como o LISP é um exemplo disso (TUCKER; NOONAN, 2009).
A Figura 1 ilustra os diferentes tipos de programação declarativa.

Figura 1. Diferentes tipos de programação declarativa.


Fonte: Adaptada de Botelho (2015).
Programação declarativa 3

Ainda no escopo de programação lógica, que é um dos tipos de programa-


ção declarativa, um programa é um conjunto de afirmações sobre as várias
entidades do domínio da aplicação. Já na programação funcional pura, um
programa é constituído por apenas um conjunto de definições de funções, e
cada função é definida sempre em razão de outras funções.

Linguagens de programação declarativa


A primeira linguagem de programação funcional a surgir foi inventada para
fornecer recursos para o processamento de listas, uma necessidade impulsionada
pelo surgimento das primeiras aplicações na área de inteligência artificial. A
programação lógica é caracterizada pelo uso de uma notação lógica formal para
comunicar processos computacionais para um computador. O cálculo de predi-
cados é, atualmente, a notação utilizada nas linguagens de programação lógica.
As linguagens de programação funcionais e lógicas são tipos de linguagens
de programação. A seguir vamos detalhar mais as linguagens funcionais LISP
e lógica Prolog, que são as principais nos seus respectivos tipos.

Linguagem de programação LISP


O interesse na área de inteligência artificial no início dos anos de 1950 fomentou
a necessidade do processamento de listas, provindas a partir da linguística, da
psicologia e da matemática (SEBESTA, 2018). Cada área tinha seu interesse
específico, os linguistas estavam interessados no processamento da linguagem
natural, os psicólogos em modelar o comportamento e os matemáticos em
mapear processos de raciocínio mental. Todos chegaram a uma conclusão em
comum: era necessário criar uma forma de permitir o processamento dados
simbólicos em listas encadeadas pelo computador. Na época, a maior lista da
computação era constituída por dados numéricos armazenados em vetores.
A linguagem de programação LISP surgiu dos estudos realizados por John
McCarthy no Massachusetts Institute of Technology (MIT). Sua primeira
versão foi chamada de LIST puro, por ser uma linguagem puramente funcional.
Essa versão do LIPS trabalhava com apenas três tipos de dados:

„„ Átomos, que são símbolos com a forma de identificadores ou literais


numéricos.
4 Programação declarativa

„„ Listas, que são especificadas com a delimitação de seus elementos


com parênteses, nos quais os elementos são restritos a átomos, tendo
o seguinte formato: (A B C D).
„„ Estruturas de listas aninhadas, também especificadas com parênteses,
por exemplo, (A (B C) D (E (F G))), que é composta de quatro elemen-
tos. O primeiro elemento é o átomo A; o segundo, é a sub lista (B C);
o terceiro, é o átomo D; e o quarto, é a sub lista (E (F G)), que tem como
seu segundo elemento a sub lista (F G).

Como LISP foi projetada no conceito de programação funcional, todas as


computações são realizadas por meio da aplicação de função a argumentos. A
sintaxe do LISP é, portanto, muito diferente de linguagens imperativas, como
C++ ou Java. Por exemplo, em Java, a sintaxe é uma mistura de inglês e álgebra,
ao passo que em LISP, a sintaxe é um modelo simplista, o código e os dados
dos programas têm exatamente a mesma forma: listas dentro de parênteses.
Considere mais uma vez a lista (A B C D). Quando interpretada como dados,
ela é uma lista de quatro elementos, mas se vista como código, é a aplicação
da função chamada A para os três parâmetros B, C e D.
A Figura 2 demonstra a representação interna de duas listas em LISP.

Figura 2. Representação interna de duas listas em LISP.


Fonte: Adaptada de Sebesta (2018).
Programação declarativa 5

Veja a seguinte função de exemplo em LISP. O código a seguir define


uma função de predicado em LISP que recebe duas listas como argumentos
e retorna True, se as duas listas forem iguais, ou NIL (false) caso contrário.

(DEFUN equal _ lists (lis1 lis2)


(COND
((ATOM lis1) (EQ lis1 lis2))
((ATOM lis2) NIL)
((equal _ lists (CAR lis1) (CAR lis2))
(equal _ lists (CDR lis1) (CDR lis2)))
(T NIL)
)
)

Linguagem de programação Prolog


O Prolog é baseado em cláusulas de Horn (um subconjunto da lógica de primeira
ordem), e é provavelmente a linguagem mais famosa na família de programação
lógica. Foi um projeto colaborativo de Alain Colmerauer, Phillipe Roussel
(ambos da Universidade de Aix-Marselha) e Robert Kowalski (Universidade
de Edimburgo). Sua primeira versão apareceu, como Smalltalk e C, em 1972.
Seu nome é uma abreviatura de programmation en logique (francês para
programação em lógica).
Para Nicoletti (2003, p. 35), o Prolog tem sido muito influente nos domínios
das provas de teoremas, sistemas especialistas, processamento de linguagem
natural e no campo da inteligência artificial (notavelmente o IBM Watson2)
em geral. Além disso, influenciou de forma significativa o desenvolvimento
da linguagem de programação Erlang.
Para Sebesta (2018), o Prolog é uma linguagem de programação de alto
nível baseada em lógica formal. Ao contrário das linguagens de programação
tradicionais, baseadas na execução de sequências de comandos, o Prolog é
baseado na definição e na solução de fórmulas lógicas. Por vezes, é chamado
de linguagem declarativa ou baseada em regras, porque seus programas con-
sistem em uma lista de fatos e regras. É, também, amplamente utilizado para
aplicações de inteligência artificial, em particular para sistemas especialistas.
6 Programação declarativa

O Prolog possui quatro blocos de construção:

„„ lógico or;
„„ lógico and;
„„ reescrita de termos;
„„ unificação.

Combinando esses quatro blocos, é possível executar qualquer computação.


O Prolog, assim como o SQL, tem dois aspectos principais, um para expressar
os dados e outro para consultá-los. As construções básicas da programação
lógica, termos e declarações são herdadas da lógica. Existem três declarações
básicas:

„„ fatos, que são afirmações fundamentais sobre o domínio do problema


(por exemplo, “Sócrates é um homem.”);
„„ regras, que são inferências sobre fatos no domínio (por exemplo, “Todos
os homens são mortais.”);
„„ consultas, que são perguntas sobre esse domínio (por exemplo,
“É Sócrates mortal?”).

Fatos e regras são armazenados em uma base de conhecimento que o


compilador Prolog transporta para uma forma mais eficiente para consulta.
Quando “fazemos” uma pergunta, o Prolog faz uma pesquisa exaustiva por
meio do banco de dados de fatos e regras até encontrar um resultado, usando
o backtracking internamente.

Aprenda pelo menos uma nova linguagem de programação a cada ano. Diferentes
linguagens resolvem os mesmos problemas de maneiras diferentes, ao aprender várias
abordagens, você amplia seu pensamento e evita “ficar preso” em uma mesma rotina.
Além disso, aprender linguagens de programação é muito mais fácil atualmente, pois
há muitos softwares disponíveis gratuitamente na Internet.
Programação declarativa 7

A escolha de linguagens declarativas, seja do tipo lógica ou funcional,


é sempre uma questão ligada ao contexto da solução que se deseja atender.
Linguagens declarativas são de excelente aplicação em contextos mais abs-
tratos, como consultas a banco de dados e questões que envolvam áreas da
inteligência artificial.

Para conhecer os pilares e conceitos do paradigma de programação orientada a


objetos acesse o link a seguir.

https://qrgo.page.link/JBCZA

BOTELHO, L. M. Inteligência artificial: apontamentos para as aulas. Lisboa: Departamento


de Ciências e Tecnologias da Informação, Instituto Superior de Ciências do Trabalho
e da Empresa, 2015. 10 p. Disponível em: http://home.iscte-iul.pt/~luis/aulas/ia/Co-
nhecimento%20declarativo%20em%20programacao%20em%20logica.pdf. Acesso
em: 21 ago. 2019.
NICOLETTI, M. C. A cartilha Prolog. São Carlos: Edufscar, 2003. 124 p. (Série Apontamentos).
SEBESTA, R. W. Conceitos de linguagem de programação. 11. ed. Porto Alegre: Bookman,
2018. 758 p.
TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2.
ed. Porto Alegre: AMGH, 2009. 630 p.

Leituras recomendadas
EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal e C.
Porto Alegre: Bookman, 2014. 476 p. (Série Livros Didáticos Informática UFRGS).
LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH, 2018. 268 p.
MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. C. Desenvolvimento de software III:
programação de sistemas web orientada a objetos em Java. Porto Alegre: Bookman,
2016. 220 p. (Série Tekne; Eixo Informação e Comunicação).
8 Programação declarativa

MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II: introdução ao de-


senvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014.
276 p. (Série Tekne; Eixo Informação e Comunicação).
OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software I: conceitos bá-
sicos. Porto Alegre: Bookman, 2014. 236 p. (Série Tekne; Eixo Informação e Comunicação).
PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão
ISO / IEC 9899. Porto Alegre: Bookman, 2012. 548 p.

Você também pode gostar