LINGUAGENS IMPERATIVAS & LINGUAGENS FUNCIONAIS Universidade Estadual de Santa Cruz Conceitos de Linguagem de Programação Matheus Henrik Nogueira de Santana CONTEÚDO PROGRAMÁTICO Introdução Paradigmas de programação Programação Imperativa Programação Funcional Referência PARADIGMAS DE PROGRAMAÇÃO Uma linguagem de programação é um método padronizado para comunicar instruções para um computador, respeitando regras semânticas e sintáticas. Um paradigma de programação fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Exemplo: Programação orientada a objetos Programação funcional Linguagens de programação propõe diferentes paradigmas de programação. PARADIGMAS DE PROGRAMAÇÃO Paradigma imperativo (C, C++, Pascal) Paradigma funcional (ML, LISP, Haskell) Paradigma orientado a objeto (C++, Java) Paradigma concorrente (ADA, Java) Paradigma orientado a aspecto (AspectJ) Paradigma de programação lógica(PROLOG) PARADIGMAS DE PROGRAMAÇÃO Paradigma imperativo (C, C++, Pascal) Paradigma funcional (ML, LISP, Haskell) Paradigma orientado a objeto (C++, Java) Paradigma concorrente (ADA, Java) Paradigma orientado a aspecto (AspectJ) Paradigma de programação lógica(PROLOG) LINGUAGENS IMPERATIVA As linguagens imperativas são orientadas a ações, onde a computação é vista como uma sequência de instruções que manipulam valores de variáveis. O fundamento da programação imperativa é o conceito de Máquina de Turing, que nada mais é que uma abstração matemática que corresponde ao conjunto de funções computáveis Sua criação foi influenciada pela arquitetura de computadores Von Neuman, onde programas e dados são armazenados na mesma memória. EXEPMLO MELHOR Os operando das expressões são passados da memória para a CPU e o resultado da expressão é passado de volta para uma célula da memória. São caracterizadas por 3 conceitos: Variáveis Atribuição Repetição LINGUAGENS IMPERATIVA Código com os 3 conceitos VARIÁVEIS: DECLARAÇÕES Declarações O espaço da memória a ser gasto Exemplo: Em C, em uma máquina de 32 bits: de variáveis restringem: Char = 1byte Short= 2 bytes Int = 4 bytes Os valores que a variável pode assumir As operações possíveis de ser executadas sobre a variável Elementos default de inicialização, as vezes. VARIÁVEIS: LOCALIZAÇÃO E VALORES Quando uma variável é declarada, ela é associada a uma localização de memória e seu nome se torna seu identificador. L-value: localização na memória R-value: valor armazenado Toda expressão/atribuição no paradigma imperativo pode ser visto em termos do L-values e R-values das variáveis envolvidas. VARIÁVEIS: ATRIBUIÇÃO Exemplo: X = X + 1; Significado: “pegue o R-value de X, adicione 1 e armazene o resultado no L-value de X ” PROGRAMAÇÃO ESTRUTURADA Programação estruturada é uma forma de programação que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e interação. Estruturas de sequência: Onde uma tarefa é executada após a outra, linearmente. Estruturas de decisão: Onde, a partir de um teste lógico, determinado trecho de código é executado, ou não. Estruturas de iteração: Onde, a partir de um teste lógico, determinado trecho de código é repetido por um número finito de vezes ALGUMAS LINGUAGENS IMPERATIVAS FORTRAN BASIC ALGOL PASCAL ADA C Lua Phyton LINGUAGENS FUNCIONAIS Programação funcional baseia-se no conceito de função. Pode-se pensar na programação funcional como simplesmente avaliação de expressões Funcionamento: O programador define uma função para resolver um problema e passa essa função para o computador Uma função pode envolver várias outras funções em sua definição. O Computador funciona então como uma calculadora que avalia expressões escritas pelo programador através de simplificações até chegar a uma forma normal Exemplo: f(x) = x³ + 3 é definida em termos de exponenciação e adição CURIOSIDADES Dos 3 paradigmas de programação, Paradigma Funcional é o mais antigo. 1ª linguagem foi IPL de 1955 Mais popular foi a LISP de 1958 Investiu-se nela até meados da década de 90, e depois disso? LINGUAGEM FUNCIONAL, A FENIX? Novos processadores de múltiplos núcleos, até centenas de core estão para ser desenvolvidos. A boa noticia é que para obter benefícios desse panorama é necessário escrever software que executem de forma paralela Mais fácil escrever código concorrente em Linguagens funcionais LINGUAGENS FUNCIONAIS Atualmente mais usada para fins acadêmicos Notáveis usadas para fins comerciais: R (estatística) Mathematica (matemática simbólica) K (análise financeira) CÁLCULO LAMBDA Projetado por Alonzo Church, 1930; É um modelo que oferece uma maneira muito formal de descrever um calculo de uma função; Pode ser considerado a primeira linguagem de programação funcional; Linguagens como Lisp, Miranda, ML, Haskell são baseadas em Cálculo Lambda CÁLCULO LAMBDA O Cálculo Lambda pode ser visto como uma linguagem de programação abstrata em que funções podem ser combinadas para formar outras funções; Trata funções como cidadãos de primeira classe, ou seja, entidades que podem, como um dado qualquer, ser usadas como argumento e retonados como valores de uma função. Uma expressão simples: (+ 4 5) CÁLCULO LAMBDA (+ 4 5) Avaliando (+ 4 5) = 9 A avaliação da função procedo por redução (+ (* 5 6) (* 4 3)) (+ 30 (*4 3 )) (+ 30 12 ) = 42 CÁLCULO LAMBDA Uma abstração lambda é um tipo de expressão que denota uma função: (λx.+x1) “λ” determina que existe uma função USO PRÁTICO DE LINGUAGENS FUNCIONAIS Haskell Ferramentas para manipulação de programas PHP Erlang Parte do serviço de chat de facebook Scala (linguagem híbrida) Serviços de filas de mensagens no twitter Scheme e LISP Ensino de programação em várias universidades ML Verificação de hardware e software na Microsoft e Intel FUNCIONAIS VERSUS IMPERATIVA Linguagem Funcional Linguagem Imperativa Semântica Simples Complexa Sintaxe Simples Complexa Ineficiente Eficiente Execução REFERÊNCIAS http://www.inf.pucrs.br/~gustavo/disciplinas/pli/ material/paradigmas-aula09.pdf http://rogerio.in/ http://www.dcc.fc.up.pt/~nam/aulas/9900/pi/ http://www3.di.uminho.pt/~jcr/AULAS/pi-lei-2012/ OBRIGADO