introdução à programação: uma abordagem funcional programação i engenharia de computação...

25
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Upload: internet

Post on 16-Apr-2015

109 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Introdução à Programação: uma Abordagem Funcional

Programação IEngenharia de Computação

Prof.ª Claudia Boeres

2009/1

Page 2: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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 descrição de funções

Page 3: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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.

Page 4: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Máquina de Von Neumann

Page 5: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Memória

memória RAM (Random Acess Memory)

memória ROM (Read Only Memory)

memória auxiliar ou externa (cd, usb, disco rígido,...)

Page 6: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Representação/armazenamento

da informação

BIT:menor unidade de informação (0 ou 1)

Medidas:1 byte : 8 bits1 Kbyte: 1024 bytes1 Mbyte: 1024 Kbytes1 Gbyte: 1024 Mbytes

Page 7: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Exemplos de utilização

tradução e edição de textos

reconhecimento de imagens

gerenciamento de bancos

roteamento de mensagens em redes de computadores etc.

Page 8: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

O que é programar?

identificar, organizar e codificar o conhecimento para a descrição de um conceito para o computador.

Page 9: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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 verificar se ele resolve o problema.

Page 10: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Linguagem de Programação

formalismo: padrões segundo os quais um agente possa interpretar e/ou descrever informação

formalismo = sintaxe + semântica

Page 11: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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; tradutores.

Page 12: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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.

Page 13: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Paradigmas de Linguagem de Programação

uma forma específica de se pensar em programação

procedural, funcional e lógico

Page 14: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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 considerá-las na avaliação de expressões

Page 15: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Máquina Funcional

lê expressão

avalia

exibe resultado

2+4

Soma de 2 e 4

6

Page 16: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Exemplo

usuário: 4 * 3 – 2máquina funcional: 10

usuário: f 2 + 10máquina funcional: definição de f não conhecida

usuário: carrega arquivo com funçõesmáquina funcional: ok

usuário: f 2 + 10máquina funcional: 13

f x = x + 1

Arquivo texto

Page 17: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/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 A, existe y B, tal que (x, y) F.

Page 18: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Funções

Seja f uma função de A em B. Então:

f é uma função total se Domínio (f) = A

f é uma função parcial se Domínio (f) A

Page 19: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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} f: A B tq f = {(a,1), (b,1)}

Page 20: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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

f = {(x,y) | x e y = 2x}

Page 21: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Exemplos

a) f: tq f (x) = 1/x

b) g: tq g(y) = y – 1

c) f: tq f (x) = x2 - 1

Page 22: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/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);

Page 23: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

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”.

Page 24: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Algumas aplicações de HaskellFunctional programming languages are used in substantial applications. For example:

Software AG, a major German software company, market an expert system (Natural Expert) which is programmed in a functional language. Their users find it easy to develop their applications in this language, through which they gain access to an underlying database system. It all runs on an IBM mainframe.

Ericsson have developed a new functional language, Erlang, to use in their future telephony applications. They have already written 130k-line Erlang applications, and find them very much shorter and faster to develop.

Amoco ran an experiment in which they re-coded in Miranda, a lazy functional language, a substantial fraction of their main oil-reservoir simulation code, a critical application. The resulting program was vastly shorter, and its production revealed a number of errors in the existing software. Amoco subsequently transcribed the functional program into C++ with encouraging results.

A researcher at the MITRE corporation is using Haskell to prototype his digital signal-processing applications.

Researchers at Durham University used Miranda, and later Haskell, in a seven-year project to build LOLITA, a 30,000-line program for natural-language understanding.

Query is the query language of the O2 object-oriented database system. O2Query is probably the most sophisticated commercially-available object-oriented database query language and it is a functional language.

ICAD Inc market a CAD system for mechanical and aeronautical engineers. The language in which the engineers describe their design is functional, and it uses lazy evaluation extensively to avoid recomputing parts of the design which are not currently visible on the screen. This results in substantial performance improvements.

An incestuous example: the Glasgow Haskell compiler is written in Haskell: a 100,000-line application.

And another applications

Page 25: Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Exercí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.