Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2 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 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. Máquina de Von Neumann Memória memória RAM (Random Acess Memory) memória ROM (Read Only Memory) memória auxiliar ou externa (cd, usb, disco rígido,...) 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 computadores etc. 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 verificar se ele resolve o problema. Linguagem de Programação formalismo: padrões segundo os quais um agente possa interpretar e/ou descrever informação formalismo = sintaxe + semântica 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. 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 programação específica de procedural, funcional e o lógico se pensar em 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 Máquina Funcional lê expressão avalia exibe resultado Exemplo 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 Arquivo texto fx=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 A, existe y B, tal que (x, y) F. 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 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)} 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} 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”. 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.