Introdução à Programação:
uma Abordagem Funcional
Programação I
Engenharia de Computação Prof.ª Claudia Boeres
Prof. Estefhan Dazzi Wandekokem
Conceitos Básicos
construção de programas para
computadores;
solução de problemas x soluções prontas devem satisfazer requisitos de qualidade construção de programas: através da
Computadores
máquina de processar dados numéricos ou
simbólicos
hardware + software
é capaz de interpretar dados, produzir
novos resultados, aceitar novos conceitos para interpretação de novas situações.
Memória
memória RAM (Random Acess Memory) memória ROM (Read Only Memory)
memória auxiliar ou externa (cd, usb,
Representação/armazenamento
da informação
BIT:menor unidade de informação (0 ou 1) Medidas:
1 byte : 8 bits
1 Kbyte: 1024 bytes 1 Mbyte: 1024 Kbytes 1 Gbyte: 1024 Mbytes
Exemplos de utilização
tradução e edição de textos reconhecimento de imagens gerenciamento de bancos
roteamento de mensagens em redes de
O que é programar?
identificar, organizar e codificar o
conhecimento para a descrição de um conceito para o computador.
O que é necessário para
programar?
compreender o problema a ser resolvido; planejar uma solução;
descrever a solução por meio de uma
linguagem de programação;
testar o programa com o objetivo de
Linguagem de Programação
formalismo: padrões segundo os quais um
agente possa interpretar e/ou descrever informação
Por que usar linguagem de
programação?
não é possível ainda usar linguagem
natural para programar no computador;
a linguagem de máquina é difícil de ser
compreendida;
são mais próximas da linguagem natural,
podendo-se focar no problema e não nas dificuldades de entendimento da linguagem;
Propriedades de um programa
correção: o programa deve descrever
corretamente o conhecimento segundo a intenção desejada;
desempenho: o programa deve usar de
forma adequada os recursos e o tempo da máquina considerada.
Paradigmas de Linguagem de
Programação
uma forma específica de se pensar em
programação
Programação Funcional
podemos entender o computador como
uma “máquina funcional”, capaz de:
avaliar expressões escritas segundo
regras sintáticas bem definidas;
aceitar a definição de novas funções e
Máquina Funcional
lê expressão
avalia
exibe resultado
2+4 Soma de 2 e 4 6Exemplo
usuário: 4 * 3 – 2
máquina funcional: 10 usuário: f 2 + 10
máquina funcional: definição de f não conhecida
usuário: carrega arquivo com funções máquina funcional: ok
usuário: f 2 + 10
máquina funcional: 13
f x = x + 1
Funções
associação entre elementos de dois
conjuntos A e B tal que o conjunto de partida A seja igual ao domínio da função;
em outras palavras: seja F uma função de
A em B. Então F representa o conjunto de pares ordenados (x,y) tais que para todo x
Funções
Seja f uma função de A em B. Então:
f é uma função total se Domínio (f) = A
Exemplos
a) A = {a, b, c}, B = {1, 2, 3}
f: A → B tq f = {(a,1), (b,1), (c,3)} b) A = {1, 2, 3}, B = {a, e, i, o, u}
f: A → B tq f = {(1,a), (2,e), (2,i), (3,o)} c) A = {a, b, c}, B = {1, 2, 3}
Descrições Funcionais
extensional: todos os elementos são
explicitados
f = {(a,1), (b,2), (c,3)}
intencional: os elementos são descritos
através de um critério de pertinência
Exemplos
a) f: ℜ → ℜ tq f (x) = 1/x
b) g: ℵ → ℵ tq g(y) = y – 1 c) f: ℜ → ℜ tq f (x) = x2 - 1
Por que aprender programação
através do paradigma
funcional?
este é o momento inicial, propício para
estimular a busca de problemas e apresentação dos fundamentos;
o paradigma procedural requer o bom
entendimento do funcionamento de um computador (máquina de Von Neumann);
Por que aprender programação
através do paradigma
funcional?
o paradigma lógico: requer conhecimento
de lógica matemática;
o paradigma funcional: requer o
conhecimento de funções;
a ineficiência de linguagens funcionais
tem se reduzido em relação a linguagens procedurais;
descrições funcionais podem servir como
especificações do programa (correção), já que descrevem “o que fazer” ao invés de “como fazer”.
Algumas aplicações de Haskell
Fu n c t i o n a l p r o g r a m m i n g l a n g u a g e s a r e u s e d i n s u b s t a n t i a l a p p l i c a t i o n s . Fo r e x a m p l e : So f t w a r e A G, a m a j o r Ge r m a n s o f t w a r e c o m p a n y , m a r k e t a n e x p e r t s y s t e m (N a t u r a l Ex p e r t ) w h i c h i s p r o g r a m m e d i n a f u n c t i o n a l l a n g u a g e . T h e i r u s e r s f i n d i t e a s y t o d e v e l o p t h e i r a p p l i c a t i o n s i n t h i s l a n g u a g e , t h r o u g h w h i c h t h e y g a i n a c c e s s t o a n u n d e r l y i n g d a t a b a s e s y s t e m . I t a l l r u n s o n a n I B M m a i n f r a m e . Er i c s s o n h a v e d e v e l o p e d a n e w f u n c t i o n a l l a n g u a g e , Er l a n g , t o u s e i n t h e i r f u t u r e t e l e p h o n y a p p l i c a t i o n s . T h e y h a v e a l r e a d y w r i t t e n 1 3 0 k -l i n e Er l a n g a p p l i c a t i o n s , a n d f i n d t h e m v e r y m u c h s h o r t e r a n d f a s t e r t o d e v e l o p . A m o c o r a n a n e x p e r i m e n t i n w h i c h t h e y r e -c o d e d i n M i r a n d a , a l a zy f u n c t i o n a l l a n g u a g e , a s u b s t a n t i a l f r a c t i o n o f t h e i r m a i n o i l -r e s e r v o i r s i m u l a t i o n c o d e , a c r i t i c a l a p p l i c a t i o n . T h e r e s u l t i n g p r o g r a m w a s v a s t l y s h o r t e r , a n d i t s p r o d u c t i o n r e v e a l e d a n u m b e r o f e r r o r s i n t h e e x i s t i n g s o f t w a r e . A m o c o s u b s e q u e n t l y t r a n s c r i b e d t h e f u n c t i o n a l p r o g r a m i n t o C++ w i t h e n c o u r a g i n g r e s u l t s . A r e s e a r c h e r a t t h e M I T RE c o r p o r a t i o n i s u s i n g H a s k e l l t o p r o t o t y p e h i s d i g i t a l s i g n a l -p r o c e s s i n g a -p -p l i c a t i o n s . Re s e a r c h e r s a t Du r h a m U n i v e r s i t y u s e d M i r a n d a , a n d l a t e r H a s k e l l , i n a s e v e n -y e a r p r o j e c t t o b u i l d L OL I T A , a 3 0 ,0 0 0 -l i n e p r o g r a m f o r n a t u r a l -l a n g u a g e u n d e r s t a n d i n g . Qu e r y i s t h e q u e r y l a n g u a g e o f t h e O2 o b j e c t -o r i e n t e d d a t a b a s e s y s t e m . O2 Qu e r y i s p r o b a b l y t h e m o s t s o p h i s t i c a t e d c o m m e r c i a l l y -a v a i l a b l e o b j e c t -o r i e n t e d d a t a b a s e q u e r y l a n g u a g e a n d i t i s a f u n c t i o n a l l a n g u a g e . I CA D I n c m a r k e t a CA D s y s t e m f o r m e c h a n i c a l a n d a e r o n a u t i c a l e n g i n e e r s . T h e l a n g u a g e i n w h i c h t h e e n g i n e e r s d e s c r i b e t h e i r d e s i g n i s f u n c t i o n a l , a n d i t u s e s l a zy e v a l u a t i o n e x t e n s i v e l y t o a v o i d r e c o m p u t i n g p a r t s o f t h e d e s i g n w h i c h a r e n o t c u r r e n t l y v i s i b l e o n t h e s c r e e n . T h i s r e s u l t s i n s u b s t a n t i a l p e r f o r m a n c e i m p r o v e m e n t s . A n i n c e s t u o u s e x a m p l e : t h e Gl a s g o w H a s k e l l c o m p i l e r i s w r i t t e n i n H a s k e l l : a 1 0 0 ,0 0 0 -l i n e a p p l i c a t i o n . A n d a n o t h e r a p p l i c a t i o n sExercícios
1. Conceitue programação de computadores.
2. Quais os principais paradigmas de programação e o que os diferenciam.
3. Faça uma descrição intencional da função: F = {1,3,5,7,...}. 4. Faça uma listagem de outros exemplos de programas de
computador que são usados hoje em diferentes áreas do conhecimento e por diferentes profissionais.
5. Apresente exemplo de outras linguagens técnicas usadas pelo ser humano para descrever conhecimento.
6. Os conceitos de correção e de desempenho, se aplicam a qualquer artefato. Escolha 3 artefatos quaisquer e discuta os dois conceitos.