Você está na página 1de 20

Programação declarativa

APRESENTAÇÃO

A programação declarativa tem como principal característica a possibilidade de programar de


acordo com o objetivo a ser atingido. Assim, a programação acontece a partir do resultado que
se deseja obter com o programa e não com foco no que será executado, para atingir o resultado
esperado. É um tipo de programação em que o programa deve declarar os objetivos da sua
execução.

Nesta Unidade de Aprendizagem, você vair definir conceitualmente


o que é programação declarativa, identificar algumas linguagens
de programação declarativa e verificar algumas aplicações
desse paradigma.

Bons estudos.

Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:

• Definir programação declarativa.


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

DESAFIO

A programação declarativa é um paradigma de programação que possibilita desenvolvimento


mais objetivo, pois o desenvolvedor precisa especificar apenas o que deseja obter de resultado
com o programa. Dentro desse contexto, aplicações clientes servidor, como, por exemplo,
WebService, têm ampla adesão.

Você, como desenvolvedor da equipe de desenvolvimento da companhia, tem como desafio um


novo projeto de integração entre dois sistemas.

O seu sistema deve se integrar com um WebService responsável por fazer o cálculo e a geração
da folha de pagamento. Sendo assim, o sistema deverá enviar um arquivo XML com os dados
dos funcionários, como ponto e férias, e receber outro aquivo XML de retorno com os dados da
folha de pagamento gerada.

Diante desse cenário, como a programação declarativa pode atender essa necessidade? Justifique
a adequação realizada para o escopo do projeto.

INFOGRÁFICO

A programação declarativa surgiu como uma forma de construção de código focado em


especificar o que você deseja alcançar e não em como. Oriunda de estudos matemáticos de
alguns pesquisadores e com o objetivo de atender demandas mais específicas, como a
Inteligência Artificial, ela vem sendo utilizada desde então. E, ao longo do tempo, algumas
linguagens surgiram como expoentes nesse paradigma.

Confira, no Infográfico, um pouco mais sobre os conceitos desse paradigma e algumas


linguagens que se aplicam aos tipos funcional e lógico.
CONTEÚDO DO LIVRO

As linguagens de programação que seguem o paradigma declarativo têm como característica a


construção dos programas orientados para a meta que devem alcançar e não como executarão o
passo a passo para alcançarem essas metas. Por isso, são linguagens que se tornam mais fáceis
de aprender, além de serem amplamente utilizadas no mercado, como SQL, por exemplo.

No capítulo Programação declarativa, da obra Paradigmas de Programação, você


vai compreender o significado do paradigma de programação declarativa, identificando
as linguagens de programação mais utilizadas e suas respectivas aplicações.

Boa leitura.
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.
DICA DO PROFESSOR

A programação funcional é uma maneira de pensar sobre a construção de software, criando


funções puras. As linguagens funcionais são declarativas, pois usam expressões e declarações,
em vez de execução de instruções. São, portanto, linguagens que apresentam características de
abstração e previsibilidade, entre outras vantagens.

Na Dica do Professor, você verá um pouco mais sobre as características da linguagem funcional
e por que ela se enquadra como um dos tipos de linguagem declarativa.

Conteúdo interativo disponível na plataforma de ensino!

EXERCÍCIOS

1) As linguagens de programação declarativas têm como principal característica lógica


do programa estarem orientadas para o resultado a ser obtido e não para o modo
como será alcançado. Ou seja, têm foco no quê e não no como. Assinale a alternativa
que descreva outra característica também associada a esse paradigma:

A) Modelagem de entidades do mundo real.

B) Facilidade de aprendizagem.

C) Comandos e instruções passo a passo.

D) Facilidade de integração com outras linguagens.

E) Criação de códigos enxutos.

2)
As linguagens de programação declarativa, assim como linguagens em outros
paradigmas, são indicadas para programas em algumas áreas do conhecimento.
Assinale a alternativa que identifica as áreas do conhecimento em que mais se
aplicam as linguagens de programação declarativa:

A) Processamento de Imagem e Banco de Dados.

B) Sistemas Estruturados e Processamento de Imagem.

C) Jogos e Banco de Dados.

D) Inteligência Artificial e Banco de Dados.

E) Móbile e Sistemas Web.

3) As linguagens de programação lógica, como o Prolog, têm grande embasamento na


lógica matemática, fazendo uso de símbolos na declaração pela lógica de predicados.
Assinale a alternativa correta acerca de algumas características da programação
lógica:

A) Processamento simbólico e fácil modificação.

B) Processamento simbólico e soluções algorítmicas.

C) Difícil modificação e respostas parcialmente corretas.

D) Soluções heuríticas e soluções algorítmicas.

E) Estruturas de controle e de conhecimento integradas.


4) O paradigma de programação funcional é uma forma de programação declarativa,
criado explicitamente para dar suporte a uma abordagem funcional pura, para a
solução de problemas. Para atingir esse objetivo, são características desse paradigma:

A) Alta importância da ordem de execução dos passos.

B) Controle de fluxo, utilizando loops e condições.

C) Alterações no programa são mais complexas.

D) Foco em como controlar tarefas.

E) Foco em funções com objetos de primeira classe e coleção de dados.

5) As linguagens de programação por restrições são uma complementação ao padrão


lógico e se referem à implementação de restrições na relação entre variáveis,
especificando soluções e critérios a serem cumpridos, atuando sobre domínios. As
linguagens de programação por restrições atuam sobre alguns domínios. Assinale a
alternativa abaixo que apresenta alguns domínios onde esse tipo de linguagem atua:

A) Estrutural e condicional.

B) Matemático e funções.

C) Booleano e finito.

D) Estrutural e orientado a objetos.

E) Imperativo e funcional.
NA PRÁTICA

A linguagem LISP é um exemplo de linguagem declarativa funcional muito utilizada em


aplicações que necessitam resolver questões matemáticas mais complexas, como em um jogo de
xadrez.

O jogo de xadrez exige raciocínio lógico e capacidade de realizar cálculos probalísticos


matemáticos, por isso, a criação de um programa em LISP que utiliza os recursos da
programação declarativa é um bom exemplo de uso desse paradigma.

Confira, Na Prática, a criação de um programa em LISP básico que possibilita um jogo de


xadrez entre o usuário e o computador e compreenda como a linguagem declarativa se adapta a
esses casos.

Conteúdo interativo disponível na plataforma de ensino!

SAIBA +

Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do
professor:

Imperativo ou Declarativo?

Confira, neste artigo, uma comparação didática sobre as diferenças entre os Paradigmas
Declarativo e Imperativo.

Conteúdo interativo disponível na plataforma de ensino!

A linguagem SQL

Este artigo apresenta uma introdução sobre a linguagem declarativa SQL. Confira essa descrição
e por que essa linguagem se tornou a mais explícita do paradigma declarativo.

Conteúdo interativo disponível na plataforma de ensino!

Introdução à Linguagem de Programação PROLOG

Confira, no vídeo, uma breve apresentação sobre a linguagem declarativa PROLOG, uma das
primeiras linguagens de programação declarativa que surgiu.

Conteúdo interativo disponível na plataforma de ensino!

Você também pode gostar