SlideShare uma empresa Scribd logo
Paradigmas de
Programação
Prof: Sergio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
http://profsergiocosta.org/
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Introdução
Linguística
Sintaxe, semântica e pragmática
Por quê estudar linguagens ?
Paradigmas de Programação
Procedural
Orientado a objetos
Funcional
Lógico
Linguística
Lingüística é o ESTUDO de linguagens.
Lingüística
Lingüística é o ESTUDO de linguagens.
Neste caso, linguagens de PROGRAMAÇÃO
Lingüística
Lingüística é o ESTUDO de linguagens.
Neste caso, linguagens de PROGRAMAÇÃO
De forma análoga, linguagens naturais e de programação
possuem sintaxe (forma) e semântica (significado ).
Lingüística
Lingüística é o ESTUDO de linguagens.
Neste caso, linguagens de PROGRAMAÇÃO
De forma análoga, linguagens naturais e de programação
possuem sintaxe (forma) e semântica (significado ).
Sendo a primeira mais expressiva e a segunda
mais LIMITADA.
Lingüística
Lingüística é o ESTUDO de linguagens.
Neste caso, linguagens de PROGRAMAÇÃO
De forma análoga, linguagens naturais e de programação
possuem sintaxe (forma) e semântica (significado ).
Sendo a primeira mais expressiva e a segunda
mais LIMITADA.
Como falado anteriormente, o estudo pode diminuir algumas
limitações
Propriedades das linguagens
Ser UNIVERSAL
devem suportar recursão ou iteração
Propriedades das linguagens
Ser UNIVERSAL
devem suportar recursão ou iteração
Ser o mais NATURAL possível
para a área que foi proposta
Propriedades das linguagens
Ser UNIVERSAL
devem suportar recursão ou iteração
Ser o mais NATURAL possível
para a área que foi proposta
Ser IMPLEMENTÁVEL
Propriedades das linguagens
Ser UNIVERSAL
devem suportar recursão ou iteração
Ser o mais NATURAL possível
para a área que foi proposta
Ser IMPLEMENTÁVEL
Ser EFICIENTE
Conceitos
Conceitos (building blocks) das linguagens de programação
●Valores e tipos
●Variáveis e armazenamento
●Amarramento e escopo
●Abstração de processos
●Abstração de dados
●Programação genérica
●Concorrência
Sintaxe, semântica e Pragmática
A tarefa de descrever qualquer linguagem (natural ou artificial),
precisa considerar três elementos principais:
● Sintaxe: quais as sentenças e quais as sequências são validas
em uma linguagem.
○ Normalmente é separado em léxico (identifica os
elementos básicos) e sintático (identifica as sequências,
como estes elementos podem ser agrupados).
● Semântica: qual o significado de uma da expressão ?
● Pragmática: como determinada linguagem é usada na prática.
Sintaxe, semântica e Pragmática
A tarefa de descrever qualquer linguagem (natural ou artificial),
precisa considerar três elementos principais:
● Sintaxe: quais as sentenças e quais as sequências são validas
em uma linguagem.
○ Normalmente é separado em léxico (identifica os
elementos básicos) e sintático (identifica as sequências,
como estes elementos podem ser agrupados).
● Semântica: qual o significado de uma da expressão ?
● Pragmática: como determinada linguagem é usada na prática.
Conceitualmente
léxico faz parte
da sintaxe.
A sintaxe influencia como os programas são escritos pelos
programadores, lidos por outros programadore e pelo
compilador.
Semântica determina como os programas são compostos pelo
programador , entendido por outros programadores e
interpretado pelo computador.
Pragmatismo influencia como os programadores projeta e
implementa um dado problema na prática, como ele usa os
elementos da linguagem.
Sintaxe, semântica e Pragmática
Por que estudar linguagens de
programação ?
Considerem as seguintes descrições de
linguagens de programação:
JavaScript is a prototype-based, object-oriented scripting
language that is dynamic, weakly typed and has first-class
functions. It is also considered a functional programming
language like Scheme and OCaml because it has closures
and supports higher-order functions.
Fonte: Wikipedia, 2011
Python supports multiple programming paradigms, primarily
but not limited to object-oriented, imperative and, to a lesser
extent, functional programming styles. It features a fully
dynamic type system and automatic memory management,
similar to that of Scheme, Ruby, Perl, and Tcl. Like other
dynamic languages, Python is often used as a scripting
language, but is also used in a wide range of non-scripting
contexts.
Fonte: Wikipedia, 2011
Ruby is a dynamic, reflective,general-purpose object-oriented
programming language that combines syntax inspired by Perl with
Smalltalk-like features. Ruby originated in Japan during the mid-
1990s and was first developed and designed by Yukihiro "Matz"
Matsumoto. It was influenced primarily by Perl, Smalltalk, Eiffel,
and Lisp.
Ruby supports multiple programming paradigms, including
functional, object oriented, imperative and reflective. It also has
a dynamic type system and automatic memory management; it is
therefore similar in varying respects to Python, Perl, Lisp, Dylan,
Pike, and CLU.
Fonte: Wikipedia, 2011
Por que estudar linguagens de
programação?
“The magic of computer programming doesn’t come from using
any particular tool, computer, or language. The real magic of
programming comes from applying your own imagination and
using programming as a means to achieve whatever you want
to create.”
Wallace Wang
Beginning Programming for Dummies, 4th
Edition
“O aspecto mais importante, mas também o mais elusivo, de
qualquer ferramenta é a sua influência nos hábitos daqueles
que se treinam no seu uso. Se a ferramenta é uma linguagem
de programação essa influência é, gostemos ou não, uma
influência em nosso hábito de pensar”
Edsger W.
Dijkstra
Por que estudar linguagens de programação?
●Os principais benefícios no estudo de LPs são os
seguintes:
○ Melhoria na capacidade de expressar idéias
○ Melhoria na capacidade de escolher linguagens
apropriadas
○ Mais habilidade para aprender novas linguagens
○ Melhor entendimento da dificuldade de implementação
das construções das LPs
○ Melhor uso das linguagens conhecidas
○ Avanço da área de computação de um modo geral
Melhoria na capacidade de expressar idéias
Existe uma relação entre os pensamentos e a linguagem utilizada
para comunicar esses pensamentos.
É difícil para as pessoas conceitualizarem estruturas que elas não
podem descrever verbalmente ou na forma escrita
● Particularmente em termos das abstrações que podem
manipular
Melhoria na capacidade de expressar idéias
Programadores também sofrem restrições durante o
desenvolvimento de software
A linguagem que eles utilizam limitam os tipos de
estruturas de controle, estruturas de dados e
abstrações que podem ser usadas.
O conhecimento de uma variedade mais ampla de
características de LPs pode reduzir tais limitações
Melhoria na capacidade de escolher LPs
apropriadas
Muitos programadores possuem pouca
educação formal nas LPs que trabalham
Muitas vezes as linguagens que aprenderam
não são mais usadas e muitas características
de novas LPs não existiam na época
● Ex.: De Pascal, COBOL, C para Delphi, C++, Java,
LPs p/ Web
Melhoria na capacidade de escolher LPs
apropriadas
●Desta forma muitas pessoas escolhem sempre a
mesma linguagem para a resolução de
problemas, o que não é uma boa estratégia
○ O conhecimento de uma variedade mais ampla de LPs e
construções de outras LPs pode ajudar na seleção da
linguagem mais apropriada para o problema em
mãos.
●Mesmo que algumas das novas construções
possam ser simuladas, nem sempre tais soluções
são boas...
○ Ex.: Classes em C
Mais habilidade para aprender novas
linguagens
A CC é uma área relativamente nova e as metodologias de
desenvolvimento, ferramentas e LPs estão em constante
evolução.
○ http://www.tiobe.com/tiobe_index
Uma linguagem muito utilizada hoje, amanhã pode ficar no
esquecimento.
Especializar em uma só linguagem , pode não lhe garantir um
emprego.
Tiobe Index
Mais habilidade para aprender novas
linguagens
O processo de aprender uma nova LP normalmente é difícil e
demorado
Aprender os principais conceitos de LPs ajuda a aprender novas
linguagens.
Ex.: Programadores que conhecem os conceitos OO terão
mais facilidade para aprender Java ou C++
Mais habilidade para aprender novas linguagens
O mesmo ocorre com linguagens naturais
Quanto melhor você conhece a gramática de sua língua nativa,
mais fácil será para você aprender uma segunda língua.
Adicionalmente, aprender uma segunda língua ensina a vc mais
coisas sobre a primeira.
Melhor entendimento da dificuldade de
implementação das LPs
Ao projetar e usar LPs é interessante saber como as construções são
implementadas
Isso pode ajudar a selecionar as construções mais eficientes para cada
caso.
Não é o foco dessa disciplina discutir profundamente a
implementação das construções de LPs
Esse é o foco da cadeira de Compiladores
Melhor uso das linguagens conhecidas
Muitas das LPs atuais são grandes e complexas
É incomum um programador conhecer e usar todas as
características de uma LP
O estudo de CLPs pode ajudar a aprender conceitos
previamente desconhecidos e não usados da LP usada pelo
programador.
Paradigmas de programação
Paradigmas, ou categorias, é um modo de classificar
as linguagens de programação
Qual a principal operação realizada
nos seus programas ?
É possível programar sem essa
operação ?
Conhecem alguma linguagem de
programação onde não exista esta
operação?
Considerem o seguinte algoritmo
x = 2
x = x + 1
E agora, continua válido para
qualquer paradigma?
Paradigmas de programação
●De acordo com execução
○Seqüencial e
○Concorrente
●De acordo com a programação
○Imperativo e
○Declarativo
Paradigmas de programação
SEQÜÊNCIAL E CONCORRENTE
Seqüencial
● Uma computação é realizada
após o término da anterior
● Controle de fluxo de execução
interno ao programa:
○ seqüência
○ seleção
○ iteração
○ invocações
Concorrente
● Múltiplas computações podem
ser executadas
simultaneamente
● Computações paralelas
○ múltiplos processadores
compartilham memória
● Computações distribuídas
○ múltiplos computadores
conectados por uma rede
de comunicação
IMPERATIVO DECLARATIVO
PROCEDURAL
ORIENTADO A
OBJETOS
FUNCTIONAL LÓGICO
Modelo, padrão ou estilo de programação
suportado por linguagens que agrupam
certas características comuns
Paradigmas de programação
IMPERATIVO E DECLARATIVO
Modelo imperativo
● Linguagens expressam
seqüências de comandos que
realizam transformações sobre
dados
● Base: máquina de von
Neumann
○ orientadas a procedimentos
○ orientadas a objetos
Modelo declarativo
● Linguagens que não possuem
os conceitos de
○ seqüências de comandos
○ atribuição
● linguagens funcionais: ênfase
em valores computados por
funções
● linguagens lógicas: ênfase em
axiomas lógicos
PARADIGMAS DE PROGRAMAÇÃO
●Percentual de uso de acordo com o Tiobe index.
PARADIGMA IMPERATIVO
Uma simples expressão em C ...
x = x + 1;
identificador
atribuição
Qual é o
valor de X ?
PARADIGMA IMPERATIVO
expressão
● Baseado fortemente na maquina de Turing e na arquitetura de Von
Neuman (1947):
○ memória;
○ processador;
○ dispositivos de entrada e saída.
● Primeiro paradigma a surgir e até hoje é o dominante.
PARADIGMA IMPERATIVO
●Um programa neste paradigma é uma seqüência
finita de instruções (ou comandos) de três tipos:
atribuição, controle de fluxo, ou entrada/saída de
dados.
●Comandos de atribuição alteram o “estado” do
programa.
PARADIGMA IMPERATIVO
int fatorial( int n ){
int fat = 1;
while ( n > 1) {
fat = fat * n;
n = n - 1;
}
return fat;
}
PARADIGMA IMPERATIVO
SEMÂNTICA DA EXECUÇÃO
● A semântica da execução de um programa imperativo
consiste numa seqüência de estado de memória, onde cada
estado é obtido do anterior por uma operação de atribuição.
● A seqüência de estados é determinística, no sentido de que
não há escolha possível de caminhos alternativos.
● O estado de um programa em determinado momento é o
conteúdo da sua memória neste momento e pela instrução
corrente.
Vantagens?
● Eficiência
● Paradigma dominante e bem estabelecido
● Método “receita de bolo”
Desvantagens?
● difícil legibilidade
● descrições demasiadamente operacionais
● focalizam o como e não o quê
O que vocês acham?
PARADIGMA IMPERATIVO
Paradigma procedural emprega o conceito de
funções e procedimentos:
PARADIGMA IMPERATIVO - PROCEDURAL
Procedimentos são coleções
de sentenças que definem
computações parametrizáveis
- Podem modificar os
parâmetros
- Podem modificar variáveis
globais
Funções são similares a
procedimentos, mas são
semanticamente modeladas
como funções matemáticas
- Não deveriam ter efeitos
colaterais
- Na prática, são
intercambiáveis...
PROCEDIMENTOS PARA OBJETOS: TAD
Tipos Abstratos de Dados (TAD)
-Conceito matemático que diz respeito a determinada
entidade e às funções aplicadas sobre ela
-Um TAD é definido pela sua funcionalidade: “o que” se
pode fazer com ele, e não “como” ele está de fato
implementado
-Exemplo uma fila é um tipo abstrato de dados: pode-se
inserir e retirar elementos de uma fila, verificar se a fila
está cheia ou vazia, ou ainda contar quantos elementos
estão nesta fila
-A utilização da fila (por uma aplicação) através destas
funções independe de como a fila está de fato
implementada
John Guttag, grande
contribuição na formalização
dos TAD.
J.V. Guttag, The Specification and Application to Programming of
Abstract Data Types,Ph.D. Thesis, Dept. of Computer Science,
University of Toronto (1975).
PROGRAMAÇÃO MODULAR
● A programação modular implementa a noção de tipo abstrato de
dados
● Implementação: encapsulamento de dados e funções na mesma
unidade sintática – o módulo
● A principal estrutura é um módulo, constituído de uma interface e
de uma implementação
● A interface contém todos os elementos visíveis (importáveis) por
outros módulos
● A implementação contém os elementos que devem ficar invisíveis e
as implementações das funções e procedimentos do módulo
● Exemplos de linguagens: Ada (DoD-USA), Modula-2 (Nicklaus Wirth).
Outros exemplos:
●Pilha
○ operações: pop, push, top
●Conta bancária
○ operações: depositar, retirar, tirar extrato, verificar saldo
●Agenda
○ operações: inserir, remover, alterar
●Figura
○ operações: desenhar, mover, rotacionar, colorir
PROGRAMAÇÃO MODULAR
Orientação a objetos
● Evolução da programação modular, incorporando duas
características fundamentais: herança e polimorfismo
● TAD → Módulo → Classes de Objetos
○ Classes são estruturas que agrupam características (atributos) e
funcionalidades (métodos) comuns a um grupo de objetos
○ Uma variável de uma classe é denominada atributo, e uma
função é denominada método
● Não existe um estado global do sistema: todas as variáveis e funções
são locais aos objetos, que se comunicam entre si através de troca
de mensagens (chamada de procedimentos/funções)
Orientação a objetos
Um sistema é um conjunto de objetos e suas
relações.
Orientação a objetos
● Não é um paradigma no sentido estrito: é uma
subclassificacão do imperativo
● A diferença é mais de metodologia quanto à concepção e
modelagem do sistema
● A grosso modo, uma aplicação é estruturada em módulos
(classes) que agrupam um estado (atributos) e operações
(métodos) sobre este
● Classes podem ser estendidas e/ou usadas como tipos (cujos
elementos são objetos)
Orientação a objetos
●A classe é uma estrutura de onde se deriva vários
objetos.
●Os objetos são as entidade criadas a partir de
uma classe.
●Um objeto é uma “instância” de uma classe.
●Classes existem na modelagem enquanto os
objetos em execução.
●A composição é um poderoso mecanismo de
extensão.
Orientação a objetos: Conceitos chaves
PROGRAMAÇÃO FUNCIONAL
PROGRAMAÇÃO FUNCIONAL
● Linguagens de programação implementam mapeamentos
● Programação imperativa:
○ Mapeamento através de comandos que lêem valores de
entrada, os manipulam e escrevem valores de saída
○ Variáveis têm papel fundamental
● Em programação funcional:
○ Mapeamento ocorre através de funções
○ Baseado em funções matemáticas
FUNÇÕES MATEMÁTICAS
● Correspondência biunívoca de membros do conjunto domínio
para membros do conjunto imagem
● Ordem de avaliação de suas expressões é controlada por
expressões condicionais e por recursão por expressões
condicionais e por recursão.
○ Não pela seqüência ou pela repetição iterativa
● Não têm efeitos colaterais
○ Sempre definem o mesmo valor dado o mesmo conjunto
de argumentos, diferentemente de um procedimento em
linguagens imperativas.
●Definição de função
○ Nome + lista de parâmetros + expressão de correspondência
○ cubo (x) = x * x * x
○ Um elemento do conjunto imagem é obtido para cada par:
Nome da função + um elemento particular do conjunto
domínio
■ cubo (2.0) = 8.0
●Definição de uma função separada da tarefa de nomeá-
la
○ Notação lambda (Church, 1941)
○ λ(x) x * x * x
PROGRAMAÇÃO FUNCIONAL
● Não existem variáveis
○ Expressões
● Não existem comandos
○ Funções
● Não existem efeitos colaterais
○ Declarações
● Não há armazenamento
○ Funções de alta ordem
○ Lazy evaluation
○ Recursão
● Fluxo de controle: expressões condicionais + recursão
PROGRAMAÇÃO FUNCIONAL
FUNÇÕES
Uma função é um mapeamento de valores de um tipo em outro
tipo
not :: Bool -> Bool
isDigit :: Char -> Bool
add :: (Int,Int) -> Int
add x y = x + y
– funções com um argumento
-- PI
pi = 3.14159
DEFINIÇÕES DE FUNÇÕES
-- area e circunferencia de circulo
circumf r = 2 * pi * r
area rad = pi * rad^2
APLICAÇÃO DE FUNÇÕES EM HASKELL
Matemática
f (x)
f (x,y)
f (g(x))
f (x, g(y))
f (x) g(y)
f(a,b) + c d
Haskell
f x
f x y
f (g x)
f x (g y)
f x * g y
f a b + c * d
SOMA DE 1 A 100 EM C++
●Operação baseada em atribuição de variáveis
int total = 0;
for (int i = 1; i <= 100; i++)
total = total + i;
●A mesma variável (total) muda de valor 100 vezes
durante a operação (efeito colateral)
●Como programar sem efeitos colaterais?
Operação baseada em recursão e casamento de
padrões.
SOMA DE 1 A 100 EM HASKELL
soma [] = 0
soma (x:xs) = x + soma xs
prelude> soma [1..100]
CARACTERÍSTICAS DO HASKELL
●Lazy avaluation, avaliação preguiçosa ou chamada por
nome.
●Funções como valores de primeira classe, ou funções
de alta ordem.
●Funções e tipos paramétricos;
HASKELL – LAZY EVALUATION
● Estratégia call-by-value --- Avalia primeiro o argumento
antes de aplicar a função (Pascal, C, Java, etc).
(x -> x+1) (2+3)
= (x+1)+ 5
= 5+1
= 6
● Estratégia call-by-name (ou lazy evaluation) --- Aplica
imediatamente a função ao argumento, adiando para mais
tarde a avaliação desse argumento (Haskell e Miranda)
(x -> x+1) (2+3)
= (2+3)+1
= 5+1
= 6
FUNÇÕES VALORES DE PRIMEIRA CLASSE
● Significa que as funções têm um estatuto tão importante como o
dos inteiros, reais, e outros tipos predefinidos. Concretamente,
numa linguagem funcional as funções podem:
○ Ser passadas como argumento para outras funções;
○ Podem ser retornadas por outras funções;
○ Podem ser usadas como elementos constituintes de estruturas
de dados;
Prelude>map (x->2*x) [1,2,3]
[2,4,6]
FUNÇÕES E TIPOS PARAMÉTRICOS
● Funções que podem lidar com diversos tipos de dados, por
exemplo o map em Haskell:
● Definição
map :: (a->b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f a : map f as
● Usando com inteiros
Prelude>map (x->2*x) [1,2,3]
[2,4,6]
● Usando com strings:
Prelude> map (x->"aa" ++ x ) ["bb","cc","dd"]
["aabb","aacc","aadd"]
PARADIGMA LÓGICO
FATOS, REGRAS E PERGUNTAS
●Um fato é uma afirmação sempre verdadeira.
●Uma regra é uma afirmação que para ser verdadeira depende
de outras regras ou fatos.
●Podemos fazer perguntas sobre os fatos ou regras.
A Terra é um planeta.
O Sol é uma estrela.
A Terra é um planeta ?
Quem é um planeta ?
A Terra é uma estrela ?
A Terra é um planeta se ela não
for uma estrela.
PARADIGMA LÓGICO
●Programa-se de forma declarativa, ou seja,
especificando o que deve ser computado ao invés de
como deve ser computado
●Sem instruções explícitas e seqüenciamento
●Aplicações em IA, robotica, linguagem natural
PARADIGMA LÓGICO
Programar em lógica envolve:
1. declarar alguns fatos a respeito de objetos e seus
relacionamentos,
2. definir algumas regras sobre os objetos e seus relacionamentos
e
3. fazer perguntas sobre os objetos e seus relacionamentos.
LÓGICA E PROLOG
●Prolog = Programming in Logic.
●Principal linguagem do paradigma lógico , proposto na
década de 70.
○ Robert Kowalski (Edinburgh)
○ Maarten van Emden (Edinburgh)
○ Alan Colmerauer (Marseilles)
FATOS EM PROLOG
Fatos
Notação geral de fatos.
predicado(arg1, arg3, ..., argn ).
O Sol é uma estrela.
A Terra é um planeta.
estrela(sol).
planeta(terra).
Um fato ou regra deve
terminar por pontoPredicados e
argumentos são
escritos por letras
Não pode ter
espaço entre
predicado e
parênteses.
FATOS EM PROLOG
●Exemplos de fatos, com um argumento
●Exemplos de fatos, com mais de um argumento
estrela(sol).
planeta(terra).
planeta(marte).
satelite(lua).
pai(joao, ana).
João é pai de
Ana.
filho(jose, maria, antonio). José é filho de Maria e
Antonio
Verbo Sujeito e Objeto
PERGUNTAS EM PROLOG
Consultas, perguntas, queries ou goals.
A “hipótese do mundo fechado”.
A Terra é um planeta ?
A Terra é uma estrela ?
O sol é um planeta ? ...
?- planeta(terra).
true.
?- estrela(terra).
false.
% base de dados
planeta(terra).
% goals
?- planeta(marte).
false.
PERGUNTAS EM PROLOG
Consultas, perguntas, queries ou goals.
A “hipótese do mundo fechado”.
A Terra é um planeta ?
A Terra é uma estrela ?
O sol é um planeta ? ...
?- planeta(terra).
true.
?- estrela(terra).
false.
% base de dados
planeta(terra).
% goals
?- planeta(marte).
false.
Um predicado
sempre retorna
um valor lógico,
verdadeiro ou
falso.
PERGUNTAS EM PROLOG
Consultas, perguntas, queries ou goals.
A “hipótese do mundo fechado”.
A Terra é um planeta ?
A Terra é uma estrela ?
O sol é um planeta ? ...
?- planeta(terra).
true.
?- estrela(terra).
false.
% base de dados
planeta(terra).
% goals
?- planeta(marte).
false.
Um predicado
sempre retorna
um valor lógico,
verdadeiro ou
falso.
se um fato não é
conhecido ,
assume-se que
ele é falso.
PERGUNTAS EM PROLOG
Consultas, perguntas, queries ou goals.
A Terra é um planeta ?
A Terra é uma estrela ?
O sol é um planeta ? ...
?- planeta(terra).
true.
?- estrela(terra).
false.
Quem é um
planeta ?
VARIÁVEIS EM PROLOG
Variáveis em Prolog é como uma incógnita que pode
ser encontrada por inferência (deduções lógicas) aos
fatos e regras:
?- planeta(X).
X = terra.
Variável
XDedução do
interpretador
Toda variável
começa com
letra maiúscula
REGRAS OU CLAUSULAS
A Terra é um planeta se
ela não for uma estrela.
planeta(terra) :-
not(estrela(terra)).
irmao(X,Y) :- filho(X, H,M) , filho(Y,H,M) , Y == X.
Cabeça,
definição do
predicado
Pescoço,
equivale ao “if“
ou “se”.
Corpo,
equivale a
uma função.
Uma virgula (,) equivale ao
operador “e” e um ponto e
virgula (;) ao operador “ou”.
Pé da
sentença (.)

Mais conteúdo relacionado

Mais procurados

Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
Adriano Tavares
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
Cloves da Rocha
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
thomasdacosta
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
Rodrigo Cascarrolho
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
Carlos Wagner Costa
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
Nécio de Lima Veras
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
Cloves da Rocha
 
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Gustavo Zimmermann
 
Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006
Luís Fernando Richter
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
Natanael Simões
 
Modelos de Engenharia de Software
Modelos de Engenharia de SoftwareModelos de Engenharia de Software
Modelos de Engenharia de Software
Nathalia Sautchuk Patricio
 
Modelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLModelagem Aplicações Web com UML
Modelagem Aplicações Web com UML
Claudio Martins
 
Algoritmos: Tipos de Dados
Algoritmos: Tipos de DadosAlgoritmos: Tipos de Dados
Algoritmos: Tipos de Dados
Elaine Cecília Gatto
 
Análise e Projeto de Sistemas
Análise e Projeto de SistemasAnálise e Projeto de Sistemas
Análise e Projeto de Sistemas
Guilherme
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
Carlos Eduardo Kadu
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
Gercélia Ramos
 
Aula 7 - Modelagem de Software
Aula 7 - Modelagem de SoftwareAula 7 - Modelagem de Software
Aula 7 - Modelagem de Software
Leinylson Fontinele
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de Algoritmos
Elaine Cecília Gatto
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
Jéssica Nathany Carvalho Freitas
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
Leinylson Fontinele
 

Mais procurados (20)

Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
 
Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006Engenharia Requisitos - Aula4 06 03 2006
Engenharia Requisitos - Aula4 06 03 2006
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Modelos de Engenharia de Software
Modelos de Engenharia de SoftwareModelos de Engenharia de Software
Modelos de Engenharia de Software
 
Modelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLModelagem Aplicações Web com UML
Modelagem Aplicações Web com UML
 
Algoritmos: Tipos de Dados
Algoritmos: Tipos de DadosAlgoritmos: Tipos de Dados
Algoritmos: Tipos de Dados
 
Análise e Projeto de Sistemas
Análise e Projeto de SistemasAnálise e Projeto de Sistemas
Análise e Projeto de Sistemas
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Aula 7 - Modelagem de Software
Aula 7 - Modelagem de SoftwareAula 7 - Modelagem de Software
Aula 7 - Modelagem de Software
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de Algoritmos
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
 

Destaque

Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
Valmon Gaudencio
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
Tony Alexander Hild
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
Ismar Silveira
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
Ismar Silveira
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - Introdução
Adriano Teixeira de Souza
 
Programação 1
Programação 1Programação 1
Programação 1
essa
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
Elaine Cecília Gatto
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
Rodrigo Gonçalves
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
Sérgio Souza Costa
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
Flávio Ricardo B. Meira
 
Questões relacionadas com paradigmas e o processo de investigação
Questões relacionadas com paradigmas e o processo de investigaçãoQuestões relacionadas com paradigmas e o processo de investigação
Questões relacionadas com paradigmas e o processo de investigação
isa
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
Péricles Miranda
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Adriano Teixeira de Souza
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
Sérgio Souza Costa
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
Sidney Roberto
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
Felipe J. R. Vieira
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
eduardohabib
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
essa
 

Destaque (20)

Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - Introdução
 
Programação 1
Programação 1Programação 1
Programação 1
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Questões relacionadas com paradigmas e o processo de investigação
Questões relacionadas com paradigmas e o processo de investigaçãoQuestões relacionadas com paradigmas e o processo de investigação
Questões relacionadas com paradigmas e o processo de investigação
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 

Semelhante a Paradigmas de programação

Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
essa
 
Administração
AdministraçãoAdministração
Administração
Izaias Lobão
 
Paradigms of programming languagens
Paradigms of programming languagensParadigms of programming languagens
Paradigms of programming languagens
Marcelo Hama
 
Alfabetização avancada
Alfabetização avancadaAlfabetização avancada
Alfabetização avancada
Magda Riber
 
Aula 2
Aula 2Aula 2
Aula 2
Danielkleber
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de Programação
BeDMK
 
Algoritmos e Logica de programação - #Aula 06 - Linguagens De Programação
Algoritmos e Logica de programação - #Aula 06 - Linguagens De ProgramaçãoAlgoritmos e Logica de programação - #Aula 06 - Linguagens De Programação
Algoritmos e Logica de programação - #Aula 06 - Linguagens De Programação
Erick L. F.
 
Apostila Redação Técnica CFS
Apostila Redação Técnica CFSApostila Redação Técnica CFS
Apostila Redação Técnica CFS
Carla Cristina Alves
 
As ferramentas, os percursos e as estratégias de tradução no universo digital...
As ferramentas, os percursos e as estratégias de tradução no universo digital...As ferramentas, os percursos e as estratégias de tradução no universo digital...
As ferramentas, os percursos e as estratégias de tradução no universo digital...
Diogoncosta
 
Livro%20 ila%20edicao%202
Livro%20 ila%20edicao%202Livro%20 ila%20edicao%202
Livro%20 ila%20edicao%202
Ueliton Saint
 
Linguagen..
Linguagen..Linguagen..
Linguagen..
essa
 
Apostila lã³gica de programaã§ã£o
Apostila lã³gica de programaã§ã£oApostila lã³gica de programaã§ã£o
Apostila lã³gica de programaã§ã£o
WELINGTON SILVA
 
Ingles instrumental
Ingles instrumentalIngles instrumental
Ingles instrumental
elzakiss
 
Poo frank
Poo frankPoo frank
Poo frank
Francelma
 
Da sala de aula ao corretor e tradutor automáticos: Letras no século XXI
Da sala de aula ao corretor e tradutor automáticos: Letras no século XXIDa sala de aula ao corretor e tradutor automáticos: Letras no século XXI
Da sala de aula ao corretor e tradutor automáticos: Letras no século XXI
Joel S. Coleti
 
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Rafaela Zanin Ferreira
 
Sistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na PráticaSistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na Prática
William Colen
 
Apostila IFMS - Empreendedorismo
Apostila IFMS - EmpreendedorismoApostila IFMS - Empreendedorismo
Apostila IFMS - Empreendedorismo
Carmem Rocha
 
Introdução a linguagem java
Introdução a linguagem javaIntrodução a linguagem java
Introdução a linguagem java
Rosicleia Frasson
 

Semelhante a Paradigmas de programação (20)

Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Administração
AdministraçãoAdministração
Administração
 
Paradigms of programming languagens
Paradigms of programming languagensParadigms of programming languagens
Paradigms of programming languagens
 
Alfabetização avancada
Alfabetização avancadaAlfabetização avancada
Alfabetização avancada
 
Aula 2
Aula 2Aula 2
Aula 2
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de Programação
 
Algoritmos e Logica de programação - #Aula 06 - Linguagens De Programação
Algoritmos e Logica de programação - #Aula 06 - Linguagens De ProgramaçãoAlgoritmos e Logica de programação - #Aula 06 - Linguagens De Programação
Algoritmos e Logica de programação - #Aula 06 - Linguagens De Programação
 
Apostila Redação Técnica CFS
Apostila Redação Técnica CFSApostila Redação Técnica CFS
Apostila Redação Técnica CFS
 
As ferramentas, os percursos e as estratégias de tradução no universo digital...
As ferramentas, os percursos e as estratégias de tradução no universo digital...As ferramentas, os percursos e as estratégias de tradução no universo digital...
As ferramentas, os percursos e as estratégias de tradução no universo digital...
 
Livro%20 ila%20edicao%202
Livro%20 ila%20edicao%202Livro%20 ila%20edicao%202
Livro%20 ila%20edicao%202
 
Linguagen..
Linguagen..Linguagen..
Linguagen..
 
Apostila lã³gica de programaã§ã£o
Apostila lã³gica de programaã§ã£oApostila lã³gica de programaã§ã£o
Apostila lã³gica de programaã§ã£o
 
Ingles instrumental
Ingles instrumentalIngles instrumental
Ingles instrumental
 
Poo frank
Poo frankPoo frank
Poo frank
 
Da sala de aula ao corretor e tradutor automáticos: Letras no século XXI
Da sala de aula ao corretor e tradutor automáticos: Letras no século XXIDa sala de aula ao corretor e tradutor automáticos: Letras no século XXI
Da sala de aula ao corretor e tradutor automáticos: Letras no século XXI
 
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
 
Sistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na PráticaSistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na Prática
 
Apostila IFMS - Empreendedorismo
Apostila IFMS - EmpreendedorismoApostila IFMS - Empreendedorismo
Apostila IFMS - Empreendedorismo
 
Introdução a linguagem java
Introdução a linguagem javaIntrodução a linguagem java
Introdução a linguagem java
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
Sérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
Sérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
Sérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
Sérgio Souza Costa
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
Sérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
Sérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Sérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
Sérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
Sérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
Sérgio Souza Costa
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
Sérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
Sérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
Sérgio Souza Costa
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
Sérgio Souza Costa
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
Sérgio Souza Costa
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
Sérgio Souza Costa
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
Sérgio Souza Costa
 
Contextualizando o moodle
Contextualizando o moodleContextualizando o moodle
Contextualizando o moodle
Sérgio Souza Costa
 
Explorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento ComputacionalExplorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento Computacional
Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Contextualizando o moodle
Contextualizando o moodleContextualizando o moodle
Contextualizando o moodle
 
Explorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento ComputacionalExplorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento Computacional
 

Paradigmas de programação

  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com http://profsergiocosta.org/ https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Introdução Linguística Sintaxe, semântica e pragmática Por quê estudar linguagens ? Paradigmas de Programação Procedural Orientado a objetos Funcional Lógico
  • 4. Linguística Lingüística é o ESTUDO de linguagens.
  • 5. Lingüística Lingüística é o ESTUDO de linguagens. Neste caso, linguagens de PROGRAMAÇÃO
  • 6. Lingüística Lingüística é o ESTUDO de linguagens. Neste caso, linguagens de PROGRAMAÇÃO De forma análoga, linguagens naturais e de programação possuem sintaxe (forma) e semântica (significado ).
  • 7. Lingüística Lingüística é o ESTUDO de linguagens. Neste caso, linguagens de PROGRAMAÇÃO De forma análoga, linguagens naturais e de programação possuem sintaxe (forma) e semântica (significado ). Sendo a primeira mais expressiva e a segunda mais LIMITADA.
  • 8. Lingüística Lingüística é o ESTUDO de linguagens. Neste caso, linguagens de PROGRAMAÇÃO De forma análoga, linguagens naturais e de programação possuem sintaxe (forma) e semântica (significado ). Sendo a primeira mais expressiva e a segunda mais LIMITADA. Como falado anteriormente, o estudo pode diminuir algumas limitações
  • 9. Propriedades das linguagens Ser UNIVERSAL devem suportar recursão ou iteração
  • 10. Propriedades das linguagens Ser UNIVERSAL devem suportar recursão ou iteração Ser o mais NATURAL possível para a área que foi proposta
  • 11. Propriedades das linguagens Ser UNIVERSAL devem suportar recursão ou iteração Ser o mais NATURAL possível para a área que foi proposta Ser IMPLEMENTÁVEL
  • 12. Propriedades das linguagens Ser UNIVERSAL devem suportar recursão ou iteração Ser o mais NATURAL possível para a área que foi proposta Ser IMPLEMENTÁVEL Ser EFICIENTE
  • 13. Conceitos Conceitos (building blocks) das linguagens de programação ●Valores e tipos ●Variáveis e armazenamento ●Amarramento e escopo ●Abstração de processos ●Abstração de dados ●Programação genérica ●Concorrência
  • 14. Sintaxe, semântica e Pragmática A tarefa de descrever qualquer linguagem (natural ou artificial), precisa considerar três elementos principais: ● Sintaxe: quais as sentenças e quais as sequências são validas em uma linguagem. ○ Normalmente é separado em léxico (identifica os elementos básicos) e sintático (identifica as sequências, como estes elementos podem ser agrupados). ● Semântica: qual o significado de uma da expressão ? ● Pragmática: como determinada linguagem é usada na prática.
  • 15. Sintaxe, semântica e Pragmática A tarefa de descrever qualquer linguagem (natural ou artificial), precisa considerar três elementos principais: ● Sintaxe: quais as sentenças e quais as sequências são validas em uma linguagem. ○ Normalmente é separado em léxico (identifica os elementos básicos) e sintático (identifica as sequências, como estes elementos podem ser agrupados). ● Semântica: qual o significado de uma da expressão ? ● Pragmática: como determinada linguagem é usada na prática. Conceitualmente léxico faz parte da sintaxe.
  • 16. A sintaxe influencia como os programas são escritos pelos programadores, lidos por outros programadore e pelo compilador. Semântica determina como os programas são compostos pelo programador , entendido por outros programadores e interpretado pelo computador. Pragmatismo influencia como os programadores projeta e implementa um dado problema na prática, como ele usa os elementos da linguagem. Sintaxe, semântica e Pragmática
  • 17. Por que estudar linguagens de programação ?
  • 18. Considerem as seguintes descrições de linguagens de programação:
  • 19. JavaScript is a prototype-based, object-oriented scripting language that is dynamic, weakly typed and has first-class functions. It is also considered a functional programming language like Scheme and OCaml because it has closures and supports higher-order functions. Fonte: Wikipedia, 2011
  • 20. Python supports multiple programming paradigms, primarily but not limited to object-oriented, imperative and, to a lesser extent, functional programming styles. It features a fully dynamic type system and automatic memory management, similar to that of Scheme, Ruby, Perl, and Tcl. Like other dynamic languages, Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts. Fonte: Wikipedia, 2011
  • 21. Ruby is a dynamic, reflective,general-purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features. Ruby originated in Japan during the mid- 1990s and was first developed and designed by Yukihiro "Matz" Matsumoto. It was influenced primarily by Perl, Smalltalk, Eiffel, and Lisp. Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic type system and automatic memory management; it is therefore similar in varying respects to Python, Perl, Lisp, Dylan, Pike, and CLU. Fonte: Wikipedia, 2011
  • 22. Por que estudar linguagens de programação? “The magic of computer programming doesn’t come from using any particular tool, computer, or language. The real magic of programming comes from applying your own imagination and using programming as a means to achieve whatever you want to create.” Wallace Wang Beginning Programming for Dummies, 4th Edition “O aspecto mais importante, mas também o mais elusivo, de qualquer ferramenta é a sua influência nos hábitos daqueles que se treinam no seu uso. Se a ferramenta é uma linguagem de programação essa influência é, gostemos ou não, uma influência em nosso hábito de pensar” Edsger W. Dijkstra
  • 23. Por que estudar linguagens de programação? ●Os principais benefícios no estudo de LPs são os seguintes: ○ Melhoria na capacidade de expressar idéias ○ Melhoria na capacidade de escolher linguagens apropriadas ○ Mais habilidade para aprender novas linguagens ○ Melhor entendimento da dificuldade de implementação das construções das LPs ○ Melhor uso das linguagens conhecidas ○ Avanço da área de computação de um modo geral
  • 24. Melhoria na capacidade de expressar idéias Existe uma relação entre os pensamentos e a linguagem utilizada para comunicar esses pensamentos. É difícil para as pessoas conceitualizarem estruturas que elas não podem descrever verbalmente ou na forma escrita ● Particularmente em termos das abstrações que podem manipular
  • 25. Melhoria na capacidade de expressar idéias Programadores também sofrem restrições durante o desenvolvimento de software A linguagem que eles utilizam limitam os tipos de estruturas de controle, estruturas de dados e abstrações que podem ser usadas. O conhecimento de uma variedade mais ampla de características de LPs pode reduzir tais limitações
  • 26. Melhoria na capacidade de escolher LPs apropriadas Muitos programadores possuem pouca educação formal nas LPs que trabalham Muitas vezes as linguagens que aprenderam não são mais usadas e muitas características de novas LPs não existiam na época ● Ex.: De Pascal, COBOL, C para Delphi, C++, Java, LPs p/ Web
  • 27. Melhoria na capacidade de escolher LPs apropriadas ●Desta forma muitas pessoas escolhem sempre a mesma linguagem para a resolução de problemas, o que não é uma boa estratégia ○ O conhecimento de uma variedade mais ampla de LPs e construções de outras LPs pode ajudar na seleção da linguagem mais apropriada para o problema em mãos. ●Mesmo que algumas das novas construções possam ser simuladas, nem sempre tais soluções são boas... ○ Ex.: Classes em C
  • 28. Mais habilidade para aprender novas linguagens A CC é uma área relativamente nova e as metodologias de desenvolvimento, ferramentas e LPs estão em constante evolução. ○ http://www.tiobe.com/tiobe_index Uma linguagem muito utilizada hoje, amanhã pode ficar no esquecimento. Especializar em uma só linguagem , pode não lhe garantir um emprego.
  • 30. Mais habilidade para aprender novas linguagens O processo de aprender uma nova LP normalmente é difícil e demorado Aprender os principais conceitos de LPs ajuda a aprender novas linguagens. Ex.: Programadores que conhecem os conceitos OO terão mais facilidade para aprender Java ou C++
  • 31. Mais habilidade para aprender novas linguagens O mesmo ocorre com linguagens naturais Quanto melhor você conhece a gramática de sua língua nativa, mais fácil será para você aprender uma segunda língua. Adicionalmente, aprender uma segunda língua ensina a vc mais coisas sobre a primeira.
  • 32. Melhor entendimento da dificuldade de implementação das LPs Ao projetar e usar LPs é interessante saber como as construções são implementadas Isso pode ajudar a selecionar as construções mais eficientes para cada caso. Não é o foco dessa disciplina discutir profundamente a implementação das construções de LPs Esse é o foco da cadeira de Compiladores
  • 33. Melhor uso das linguagens conhecidas Muitas das LPs atuais são grandes e complexas É incomum um programador conhecer e usar todas as características de uma LP O estudo de CLPs pode ajudar a aprender conceitos previamente desconhecidos e não usados da LP usada pelo programador.
  • 34. Paradigmas de programação Paradigmas, ou categorias, é um modo de classificar as linguagens de programação
  • 35. Qual a principal operação realizada nos seus programas ?
  • 36. É possível programar sem essa operação ?
  • 37. Conhecem alguma linguagem de programação onde não exista esta operação?
  • 38. Considerem o seguinte algoritmo x = 2 x = x + 1 E agora, continua válido para qualquer paradigma?
  • 40. ●De acordo com execução ○Seqüencial e ○Concorrente ●De acordo com a programação ○Imperativo e ○Declarativo Paradigmas de programação
  • 41. SEQÜÊNCIAL E CONCORRENTE Seqüencial ● Uma computação é realizada após o término da anterior ● Controle de fluxo de execução interno ao programa: ○ seqüência ○ seleção ○ iteração ○ invocações Concorrente ● Múltiplas computações podem ser executadas simultaneamente ● Computações paralelas ○ múltiplos processadores compartilham memória ● Computações distribuídas ○ múltiplos computadores conectados por uma rede de comunicação
  • 42. IMPERATIVO DECLARATIVO PROCEDURAL ORIENTADO A OBJETOS FUNCTIONAL LÓGICO Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns Paradigmas de programação
  • 43. IMPERATIVO E DECLARATIVO Modelo imperativo ● Linguagens expressam seqüências de comandos que realizam transformações sobre dados ● Base: máquina de von Neumann ○ orientadas a procedimentos ○ orientadas a objetos Modelo declarativo ● Linguagens que não possuem os conceitos de ○ seqüências de comandos ○ atribuição ● linguagens funcionais: ênfase em valores computados por funções ● linguagens lógicas: ênfase em axiomas lógicos
  • 44. PARADIGMAS DE PROGRAMAÇÃO ●Percentual de uso de acordo com o Tiobe index.
  • 46. Uma simples expressão em C ... x = x + 1; identificador atribuição Qual é o valor de X ? PARADIGMA IMPERATIVO expressão
  • 47. ● Baseado fortemente na maquina de Turing e na arquitetura de Von Neuman (1947): ○ memória; ○ processador; ○ dispositivos de entrada e saída. ● Primeiro paradigma a surgir e até hoje é o dominante. PARADIGMA IMPERATIVO
  • 48. ●Um programa neste paradigma é uma seqüência finita de instruções (ou comandos) de três tipos: atribuição, controle de fluxo, ou entrada/saída de dados. ●Comandos de atribuição alteram o “estado” do programa. PARADIGMA IMPERATIVO
  • 49. int fatorial( int n ){ int fat = 1; while ( n > 1) { fat = fat * n; n = n - 1; } return fat; } PARADIGMA IMPERATIVO
  • 50. SEMÂNTICA DA EXECUÇÃO ● A semântica da execução de um programa imperativo consiste numa seqüência de estado de memória, onde cada estado é obtido do anterior por uma operação de atribuição. ● A seqüência de estados é determinística, no sentido de que não há escolha possível de caminhos alternativos. ● O estado de um programa em determinado momento é o conteúdo da sua memória neste momento e pela instrução corrente.
  • 51. Vantagens? ● Eficiência ● Paradigma dominante e bem estabelecido ● Método “receita de bolo” Desvantagens? ● difícil legibilidade ● descrições demasiadamente operacionais ● focalizam o como e não o quê O que vocês acham? PARADIGMA IMPERATIVO
  • 52. Paradigma procedural emprega o conceito de funções e procedimentos: PARADIGMA IMPERATIVO - PROCEDURAL Procedimentos são coleções de sentenças que definem computações parametrizáveis - Podem modificar os parâmetros - Podem modificar variáveis globais Funções são similares a procedimentos, mas são semanticamente modeladas como funções matemáticas - Não deveriam ter efeitos colaterais - Na prática, são intercambiáveis...
  • 53. PROCEDIMENTOS PARA OBJETOS: TAD Tipos Abstratos de Dados (TAD) -Conceito matemático que diz respeito a determinada entidade e às funções aplicadas sobre ela -Um TAD é definido pela sua funcionalidade: “o que” se pode fazer com ele, e não “como” ele está de fato implementado -Exemplo uma fila é um tipo abstrato de dados: pode-se inserir e retirar elementos de uma fila, verificar se a fila está cheia ou vazia, ou ainda contar quantos elementos estão nesta fila -A utilização da fila (por uma aplicação) através destas funções independe de como a fila está de fato implementada John Guttag, grande contribuição na formalização dos TAD. J.V. Guttag, The Specification and Application to Programming of Abstract Data Types,Ph.D. Thesis, Dept. of Computer Science, University of Toronto (1975).
  • 54. PROGRAMAÇÃO MODULAR ● A programação modular implementa a noção de tipo abstrato de dados ● Implementação: encapsulamento de dados e funções na mesma unidade sintática – o módulo ● A principal estrutura é um módulo, constituído de uma interface e de uma implementação ● A interface contém todos os elementos visíveis (importáveis) por outros módulos ● A implementação contém os elementos que devem ficar invisíveis e as implementações das funções e procedimentos do módulo ● Exemplos de linguagens: Ada (DoD-USA), Modula-2 (Nicklaus Wirth).
  • 55. Outros exemplos: ●Pilha ○ operações: pop, push, top ●Conta bancária ○ operações: depositar, retirar, tirar extrato, verificar saldo ●Agenda ○ operações: inserir, remover, alterar ●Figura ○ operações: desenhar, mover, rotacionar, colorir PROGRAMAÇÃO MODULAR
  • 56. Orientação a objetos ● Evolução da programação modular, incorporando duas características fundamentais: herança e polimorfismo ● TAD → Módulo → Classes de Objetos ○ Classes são estruturas que agrupam características (atributos) e funcionalidades (métodos) comuns a um grupo de objetos ○ Uma variável de uma classe é denominada atributo, e uma função é denominada método ● Não existe um estado global do sistema: todas as variáveis e funções são locais aos objetos, que se comunicam entre si através de troca de mensagens (chamada de procedimentos/funções)
  • 58. Um sistema é um conjunto de objetos e suas relações. Orientação a objetos
  • 59. ● Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo ● A diferença é mais de metodologia quanto à concepção e modelagem do sistema ● A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado (atributos) e operações (métodos) sobre este ● Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos) Orientação a objetos
  • 60. ●A classe é uma estrutura de onde se deriva vários objetos. ●Os objetos são as entidade criadas a partir de uma classe. ●Um objeto é uma “instância” de uma classe. ●Classes existem na modelagem enquanto os objetos em execução. ●A composição é um poderoso mecanismo de extensão. Orientação a objetos: Conceitos chaves
  • 62. PROGRAMAÇÃO FUNCIONAL ● Linguagens de programação implementam mapeamentos ● Programação imperativa: ○ Mapeamento através de comandos que lêem valores de entrada, os manipulam e escrevem valores de saída ○ Variáveis têm papel fundamental ● Em programação funcional: ○ Mapeamento ocorre através de funções ○ Baseado em funções matemáticas
  • 63. FUNÇÕES MATEMÁTICAS ● Correspondência biunívoca de membros do conjunto domínio para membros do conjunto imagem ● Ordem de avaliação de suas expressões é controlada por expressões condicionais e por recursão por expressões condicionais e por recursão. ○ Não pela seqüência ou pela repetição iterativa ● Não têm efeitos colaterais ○ Sempre definem o mesmo valor dado o mesmo conjunto de argumentos, diferentemente de um procedimento em linguagens imperativas.
  • 64. ●Definição de função ○ Nome + lista de parâmetros + expressão de correspondência ○ cubo (x) = x * x * x ○ Um elemento do conjunto imagem é obtido para cada par: Nome da função + um elemento particular do conjunto domínio ■ cubo (2.0) = 8.0 ●Definição de uma função separada da tarefa de nomeá- la ○ Notação lambda (Church, 1941) ○ λ(x) x * x * x PROGRAMAÇÃO FUNCIONAL
  • 65. ● Não existem variáveis ○ Expressões ● Não existem comandos ○ Funções ● Não existem efeitos colaterais ○ Declarações ● Não há armazenamento ○ Funções de alta ordem ○ Lazy evaluation ○ Recursão ● Fluxo de controle: expressões condicionais + recursão PROGRAMAÇÃO FUNCIONAL
  • 66. FUNÇÕES Uma função é um mapeamento de valores de um tipo em outro tipo not :: Bool -> Bool isDigit :: Char -> Bool add :: (Int,Int) -> Int add x y = x + y
  • 67. – funções com um argumento -- PI pi = 3.14159 DEFINIÇÕES DE FUNÇÕES -- area e circunferencia de circulo circumf r = 2 * pi * r area rad = pi * rad^2
  • 68. APLICAÇÃO DE FUNÇÕES EM HASKELL Matemática f (x) f (x,y) f (g(x)) f (x, g(y)) f (x) g(y) f(a,b) + c d Haskell f x f x y f (g x) f x (g y) f x * g y f a b + c * d
  • 69. SOMA DE 1 A 100 EM C++ ●Operação baseada em atribuição de variáveis int total = 0; for (int i = 1; i <= 100; i++) total = total + i; ●A mesma variável (total) muda de valor 100 vezes durante a operação (efeito colateral) ●Como programar sem efeitos colaterais?
  • 70. Operação baseada em recursão e casamento de padrões. SOMA DE 1 A 100 EM HASKELL soma [] = 0 soma (x:xs) = x + soma xs prelude> soma [1..100]
  • 71. CARACTERÍSTICAS DO HASKELL ●Lazy avaluation, avaliação preguiçosa ou chamada por nome. ●Funções como valores de primeira classe, ou funções de alta ordem. ●Funções e tipos paramétricos;
  • 72. HASKELL – LAZY EVALUATION ● Estratégia call-by-value --- Avalia primeiro o argumento antes de aplicar a função (Pascal, C, Java, etc). (x -> x+1) (2+3) = (x+1)+ 5 = 5+1 = 6 ● Estratégia call-by-name (ou lazy evaluation) --- Aplica imediatamente a função ao argumento, adiando para mais tarde a avaliação desse argumento (Haskell e Miranda) (x -> x+1) (2+3) = (2+3)+1 = 5+1 = 6
  • 73. FUNÇÕES VALORES DE PRIMEIRA CLASSE ● Significa que as funções têm um estatuto tão importante como o dos inteiros, reais, e outros tipos predefinidos. Concretamente, numa linguagem funcional as funções podem: ○ Ser passadas como argumento para outras funções; ○ Podem ser retornadas por outras funções; ○ Podem ser usadas como elementos constituintes de estruturas de dados; Prelude>map (x->2*x) [1,2,3] [2,4,6]
  • 74. FUNÇÕES E TIPOS PARAMÉTRICOS ● Funções que podem lidar com diversos tipos de dados, por exemplo o map em Haskell: ● Definição map :: (a->b) -> [a] -> [b] map f [] = [] map f (x:xs) = f a : map f as ● Usando com inteiros Prelude>map (x->2*x) [1,2,3] [2,4,6] ● Usando com strings: Prelude> map (x->"aa" ++ x ) ["bb","cc","dd"] ["aabb","aacc","aadd"]
  • 76. FATOS, REGRAS E PERGUNTAS ●Um fato é uma afirmação sempre verdadeira. ●Uma regra é uma afirmação que para ser verdadeira depende de outras regras ou fatos. ●Podemos fazer perguntas sobre os fatos ou regras. A Terra é um planeta. O Sol é uma estrela. A Terra é um planeta ? Quem é um planeta ? A Terra é uma estrela ? A Terra é um planeta se ela não for uma estrela.
  • 77. PARADIGMA LÓGICO ●Programa-se de forma declarativa, ou seja, especificando o que deve ser computado ao invés de como deve ser computado ●Sem instruções explícitas e seqüenciamento ●Aplicações em IA, robotica, linguagem natural
  • 78. PARADIGMA LÓGICO Programar em lógica envolve: 1. declarar alguns fatos a respeito de objetos e seus relacionamentos, 2. definir algumas regras sobre os objetos e seus relacionamentos e 3. fazer perguntas sobre os objetos e seus relacionamentos.
  • 79. LÓGICA E PROLOG ●Prolog = Programming in Logic. ●Principal linguagem do paradigma lógico , proposto na década de 70. ○ Robert Kowalski (Edinburgh) ○ Maarten van Emden (Edinburgh) ○ Alan Colmerauer (Marseilles)
  • 80. FATOS EM PROLOG Fatos Notação geral de fatos. predicado(arg1, arg3, ..., argn ). O Sol é uma estrela. A Terra é um planeta. estrela(sol). planeta(terra). Um fato ou regra deve terminar por pontoPredicados e argumentos são escritos por letras Não pode ter espaço entre predicado e parênteses.
  • 81. FATOS EM PROLOG ●Exemplos de fatos, com um argumento ●Exemplos de fatos, com mais de um argumento estrela(sol). planeta(terra). planeta(marte). satelite(lua). pai(joao, ana). João é pai de Ana. filho(jose, maria, antonio). José é filho de Maria e Antonio Verbo Sujeito e Objeto
  • 82. PERGUNTAS EM PROLOG Consultas, perguntas, queries ou goals. A “hipótese do mundo fechado”. A Terra é um planeta ? A Terra é uma estrela ? O sol é um planeta ? ... ?- planeta(terra). true. ?- estrela(terra). false. % base de dados planeta(terra). % goals ?- planeta(marte). false.
  • 83. PERGUNTAS EM PROLOG Consultas, perguntas, queries ou goals. A “hipótese do mundo fechado”. A Terra é um planeta ? A Terra é uma estrela ? O sol é um planeta ? ... ?- planeta(terra). true. ?- estrela(terra). false. % base de dados planeta(terra). % goals ?- planeta(marte). false. Um predicado sempre retorna um valor lógico, verdadeiro ou falso.
  • 84. PERGUNTAS EM PROLOG Consultas, perguntas, queries ou goals. A “hipótese do mundo fechado”. A Terra é um planeta ? A Terra é uma estrela ? O sol é um planeta ? ... ?- planeta(terra). true. ?- estrela(terra). false. % base de dados planeta(terra). % goals ?- planeta(marte). false. Um predicado sempre retorna um valor lógico, verdadeiro ou falso. se um fato não é conhecido , assume-se que ele é falso.
  • 85. PERGUNTAS EM PROLOG Consultas, perguntas, queries ou goals. A Terra é um planeta ? A Terra é uma estrela ? O sol é um planeta ? ... ?- planeta(terra). true. ?- estrela(terra). false. Quem é um planeta ?
  • 86. VARIÁVEIS EM PROLOG Variáveis em Prolog é como uma incógnita que pode ser encontrada por inferência (deduções lógicas) aos fatos e regras: ?- planeta(X). X = terra. Variável XDedução do interpretador Toda variável começa com letra maiúscula
  • 87. REGRAS OU CLAUSULAS A Terra é um planeta se ela não for uma estrela. planeta(terra) :- not(estrela(terra)). irmao(X,Y) :- filho(X, H,M) , filho(Y,H,M) , Y == X. Cabeça, definição do predicado Pescoço, equivale ao “if“ ou “se”. Corpo, equivale a uma função. Uma virgula (,) equivale ao operador “e” e um ponto e virgula (;) ao operador “ou”. Pé da sentença (.)