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 1
Máquinas Virtuais e Interpretes Figure 1.2 Principais etapas no processo de compilação Figure 2.4 Token stream: Sequência simbólica 2
Um fragmento de um programa visto como uma Sequência Simbólica Figure 2.2 Sintaxe lexical para uma linguagem simples Figure 2.3 3
A C/C++ Max Function Figure 3.1 Java Implementation of the State Class Figure 3.5 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 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 10