Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Linguagens e Ambientes de Programação 2002 - 2003 Linguagens de Programação Princípios e Paradigmas Gladys Castillo Universidade de Aveiro Níveis de um Linguagem de Computação Figure 1.1 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) 1 Máquinas Virtuais e Interpretes Figure 1.2 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) Principais etapas no processo de compilação Figure 2.4 Token stream: Sequência simbólica Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) 2 Um fragmento de um programa visto como uma Sequência Simbólica Figure 2.2 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) Sintaxe lexical para uma linguagem simples Figure 2.3 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) 3 A C/C++ Max Function Figure 3.1 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) Java Implementation of the State Class Figure 3.5 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) 4 Paradigmas de Programação Programação Imperativa Programação Funcional Programação Declarativa Programação Orientada a Objecto (OOP) Programação orientada a eventos Cronograma Histórico de alguns Linguagens de Programação Figure 1.3 5 Programação Imperativa Consiste em definir procedimentos para executar sequências de acções, i.e., sequências de atribuições ou avaliações (ex: C, Pascal, Fortran, etc). Linguagem informal //--- Que escreve? //--- variáveis usadas: p,n,i (inteiras) leia n; coloque 1 em p; para i=1,2,...,n coloque p*i em p; escreva(p); Fonte: Programação Imperativa, Armando Matos, UP A Matemática e as linguagens imperativas • Em Matemática e em C, por exemplo, o significado do sinal “=“ e muito diferente: x = y +z: em Matemática e em C x = x+2: em Matemática (e sempre falso) e em C (uma atribuição) Fonte: Programação Imperativa, Armando Matos, UP 6 A C/C++ Factorial Function Figure 3.2 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) Técnicas em Programação Imperativa: • Modularidade dos Algoritmos (Programação Estruturada) • Modularidade das Estruturas de Dados (Tipos Abstractos de Dados) • Recorrência 7 Programação Declarativa O programador preocupa-se apenas com o significado declarativo do seu programa, sendo os aspectos procedimentais da execução do programa tratados automaticamente. O programador descreve o problema a ser resolvido e esta descrição é usada para encontrar uma ou mais soluções ao problema. Ex: Prolog – usado para resolver problemas que envolvem objectos, as suas propriedades e relações Linguagem Prolog • %--predicado fact(n,f): f e o factorial de n fact(0,1). fact(N,F) :- N>0, N1 is N-1, fact(N1,F1), F is N*F1. Utilizando: ?- fact(3,A). A=6?; no 8 Programação Funcional Estilo de programação, sem atribuição, nem alteração dos argumentos de funções. As funções se limitam a produzir novos valores. Neste paradigma de programação, qualquer função da linguagem é considerada uma função matemática pura que, para os mesmos argumentos produz sempre os mesmos valores. Nunca nada é destruído. Exs: 1. Uma função que junta duas listas produz uma nova lista sem alterar as listas originais. 2. Uma função que muda o número de portas de um automóvel produz um novo automóvel. Linguagens: Lisp (http://www.gia.ist.utl.pt/Lisp9596/node58.html) Programação Funcional Vantagens sobre outros estilos de programação: produz programas muito rapidamente e minimizando os erros. Limitações: a sua incapacidade em modificar seja o que for é a maior. A partir do momento em que introduzimos a modificação de objectos, estamos a introduzir o conceito de destruição. A forma anterior do objecto que foi modificado deixou de existir, passando a existir apenas a nova forma. A modificação implica a introdução do conceito de tempo. Os objectos passam a ter uma história, e isto conduz a um novo estilo de programação. 9 Programação Orientada a Eventos A programação orientada a eventos baseia-se na inexistência de um algoritmo principal que, em uma programação tradicional (imperativa), corresponde a um programa com início e fim. Em um programa orientado a eventos, tudo o que temos é uma forma que contém vários controles e a cada acção do utilizador (a que denominamos evento), o programa responde com a execução de um procedimento. Linguagens: Visual Basic, Visual C++, Macromédia Director, Java Imperative and Event-Driven Paradigms Contrasted Figure 10.1 Fonte: Programming Languages: Principles and Paradigms. Allen Tucker and Robert Noonan. Mc-Grau Hill (2001) 10