Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paradigmas de Linguagens Aula 2 – Introdução aos paradigmas de linguagens UFPB – Campus IV – 2018.1 Prof. Ana Liz Prof. Wagner Emanoel Costa Especificação de Linguagem de Programação Ao se criar uma LP é necessário definir: como escrever programas nessa linguagem como os programas válidos devem se comportar Documentos descritivos que estabeleçam de maneira precisa como essas duas atividades devem ser realizadas Tais documentos formam a especificação da LP 2 Especificação de Linguagem de Programação A especificação de uma LP requer a descrição de: Léxico Sintaxe Semântica 3 Especificação de Linguagem de Programação A especificação de uma LP requer a descrição de: Léxico vocabulário que pode ser utilizado para formar sentenças na linguagem. Sintaxe Semântica 4 Especificação de Linguagem de Programação A especificação de uma LP requer a descrição de: Léxico Sintaxe conjunto de regras que determinam quais sentenças podem ser formadas a partir da combinação dos itens léxicos léxico e sintaxe estão relacionados com a forma dos programas, isto é, como expressões, comandos, declarações e outros elementos da LP podem ser combinados para formar programas válidos. Semântica 5 Especificação de Linguagem de Programação A especificação de uma LP requer a descrição de: Léxico Sintaxe Semântica descreve como as construções sintaticamente corretas são interpretadas ou executadas. Define o significado dos programas, isto é, como eles se comportam quando executados por computadores 6 Exemplo – Comando em Python a = b Léxico: a, = e b fazem parte do vocabulário da LP. Sintaxe: designa um comando válido de atribuição. Semântica: que este comando deve ser executado de modo a substituir o valor de a pelo valor atual de b 7 Sintaxe e Semântica A sintaxe de uma LP influencia como os programas são escritos pelo programador, lidos por outros programadores e analisados pelo computador. A semântica de uma LP influencia como os programas são criados pelo programador, entendidos por outros programadores e interpretados pelo computador. 8 Gramática de uma LP A sintaxe da LP é descrita por uma gramática Ex de gramática para formação de expressões aritméticas elementares: <expressão> ::= <valor>|<valor><operador><expressão> <valor> ::= <número>|<sinal><número> <número> ::= <semsinal>|<semsinal>.<semsinal> <semsinal> ::= <dígito>|<dígito><semsinal> <dígito> ::= 0|1|2|3|4|5|6|7|8|9 <sinal> ::= + | - <operador> ::= +|-|/|* 9 Padronização da linguagem Necessidade de padronização Quais elementos devem fazer parte da linguagem e como eles devem se comportar Garantir portabilidade Promovida por instituição especializada: ISO (International Standards Organization) IEEE (Institute of Electrical and Electronics Engineers) ANSI (American National Standards Institute) NIST (National Institute for Standards and Technology) 10 MÉTODOS DE IMPLEMENTAÇÃO DE LPS 11 Métodos de Implementação de LPs Todo programa é traduzido para a linguagem de máquina para ser executado. Programa tradutor determina como os programas na LP serão implementados Como o código fonte traduzido se comportará efetivamente quando executado no computador. 12 “Programa tradutor” Código fonte Código de Máquina Métodos de Implementação de LPs 13 Compilação Tradução integral do programa fonte para o código de máquina. Uma vez traduzido, o programa em linguagem de máquina pode ser executado diretamente 14 Compilação Algol C C++ Commom Lisp Delphi Fortran Ocaml Pascal Visual Basic Visual Prolog Ada D Cobol 15 Exemplos de linguagens compiladas Compilação Vantagens: Otimização da eficiência na execução dos programas Não é necessário fazer qualquer tradução durante a execução Parte das verificações de erros já foram efetuadas durante a compilação 16 Compilação Vantagens: Requerer apenas o código executável para execução do programa Não é necessário possuir o código fonte do programa para sua execução 17 Compilação Desvantagens: Não portabilidade do código executável para máquinas com arquitetura diferenciada na qual ele foi compilado. Ex: um programa em C compilado sobre o ambiente Linux não é executado sobre o ambiente Windows e vice-versa. 18 Compilação Desvantagens: Depuração O código executável normalmente não guarda referências ao texto do código fonte Indicações de erro de execução não pode ser identificada com a informação da linha correspondente no código fonte que ocasiona o erro. Entretanto já existem programas que permitem a depuração de programas compilados 19 Interpretação pura Interpretador age como simulador de um pc virtual que entende as instruções da LP Cada instrução do código fonte é traduzida para linguagem de máquina quando ela é executada Imediatamente após a tradução, o código gerado é executado Na interpretação, não existe separação entre a tradução e execução 20 Exemplo de linguagens interpretadass Interpretação Action Script Basic JavaScript Lisp Lua PHP ASP Python Ruby Scheme Smalltalk 21 Interpretação Vantagens Facilidade para prototipação Pode-se executar comandos e partes do programa assim que são construídos, verificando se atuam corretamente Facilidade de depuração As mensagens de erro podem se referir diretamente a linha do código fonte 22 Interpretação Desvantagens Execução muito mais lenta do programa Necessidade do interpretador: • Decodificar comandos da LP • Verificar erros do programa • Gerar código em linguagem de máquina durante a própria execução do programa. Exemplo: estrutura de repetição Na compilação os comandos internos de uma repetição só necessitam ser traduzidos e verificados uma única vez Na interpretação pura, de modo geral, esse processo se repete para cada ciclo de execução da repetição. 23 Interpretação Desvantagens Maior consumo de espaço de memória Devem ser mantidos em memória uma tabela de símbolos, o código fonte e o próprio programa interpretador 24 Híbrido (compilado e interpretado) Processo que combina tanto a execução eficiente quanto a portabilidade de programas Existência de um código intermediário, mais fácil de ser interpretado e não específico de uma plataforma computacional Dividido em duas etapas: 1. compilação para um código intermediário 2. interpretação deste código 25 Híbrido Vantagem: Código intermediário não é específico para uma plataforma Programas já compilados para este código podem ser portados para diferentes plataformas sem necessidade de adaptação ou recompilação Necessário um interpretador do código intermediário instalado na plataforma onde se executará o programa 26 Exemplo: Java O código intermediário é chamado de bytecode O interpretador de bytecode é a JVM (JAVA Virtual Machine). Cada plataforma computacional necessita sua própria JVM para que o programa em bytecode possa ser executado 27 28 Implementação de LPs - Comparação Compilação Eficiência Problemas com Portabilidade e Depuração Interpretação Pura Flexibilidade, Portabilidade e Facilidade para Prototipação e Depuração Problemas com Eficiência e Maior Consumo de Memória Raramente Usada Híbrido Compromisso com as Vantagens e Desvantagens dos Outros Métodos JVM HISTÓRICO DAS LINGUAGENS DE PROGRAMAÇÃO 29 30 Evolução de LPs Dificuldade de programação em linguagens de máquina Foco das primeiras linguagens era eficiência de processamento e consumo de memória Baixa Produtividade de Programação Histórico das Linguagens de Programação Década de 1960 Programação baseada na arquitetura do hardware existente Computadores caros e inacessíveis Sequência de instruções Sem preocupação com reutilização de código 3132 Origem de LPs Exemplos de linguagens na década de 60: FORTRAN (1957) aplicações numéricas e científicas LISP (1959) programação funcional ALGOL (1960) programação estruturada e acadêmica COBOL (1960) aplicações comerciais BASIC (1964) ensino para leigos Histórico das Linguagens de Programação Década de 1970: surgimento da Engenharia de Software Abstração de dados: definição de tipos Abstração de controle: comandos, procedimentos Inicia preocupação com “programming in the large”: módulos e programação Estruturada Equipe de programação Cada membro da equipe tem um papel e desenvolve bem seu trabalho 33 34 Origem de LPs PASCAL (1971) ensino de programação estruturada simplicidade C (1972) implementação de UNIX PROLOG (1972) programação lógica SMALLTALK (1972) programação orientada a objetos Histórico das Linguagens de Programação Década de 1980: modularização Ênfase em mecanismos de LP e abstrações Correção de programas: verificação de tipos, exceções Programação concorrente e distribuída e tempo real Implementação de Tipos Abstratos de Dados Programação orientada a objetos (herança) 35 Histórico das Linguagens de Programação Década de 1990: base na Arquitetura Estruturação de dados: encapsulamento Estruturação da computação: classe Estruturação do programa: classes e objetos Programação para Internet: plataforma neutra 36 37 Origem de LPs ADA (1983) programação concorrente Clipper (1984) Uso diverso C++ (1985) disseminação da programação orientada a objetos Python (1991) JAVA (1995) Commom Lisp (1994) PARADIGMAS DE PROGRAMAÇÃO Divisão clássica da literatura Introdução 38 39 Paradigmas de LPs Paradigmas Imperativo Declarativo Estruturado Orientado a Objetos Concorrente Funcional Lógico Conjunto de características que servem para categorizar um grupo de linguagens 40 Paradigmas de LPs Imperativo Processo de mudanças de estados Estado representa uma configuração qualquer da memória do computador Especificar como um processamento deve ser feito no computador Variável, Valor e Atribuição Células de Memória 41 Paradigmas de LPs (imperativo) Estruturado Refinamentos sucessivos Blocos aninhados de comandos Desestímulo ao uso de desvio incondicional def is_prime(number): divisors = 0 for n in xrange(2, number): if number % n == 0: divisors += 1 if divisors: return False return True 42 Paradigmas de LPs (imperativo) Orientado a Objetos Abstração de Dados Classes Abstrações que definem uma estrutura de dados e um conjunto de operações que podem ser realizadas sobre elas (métodos). Objetos são instâncias de classes 43 Paradigmas de LPs (imperativo) Concorrente Processos executam simultaneamente e concorrem por recursos Podem utilizar uma única unidade de processamento ou várias unidades em paralelo (mesmo pc ou distribuído) Multi Processos Conceito de thread 44 Paradigmas de LPs (imperativo) Concorrente (conceito de thread) Paradigmas de LPs (imperativo) Concorrente Servidores costumam ser multithreads ou multiprocesso Ex: Servidores Web e de RPC Quando um servidor recebe uma mensagem, ele atende a essa mensagem usando uma thread separada Permite que o servidor atenda várias requisições simultâneas Editor de texto Threads para exibir gráfico, fazer correção ortográfica, ler teclado 45 46 Paradigmas de LPs Declarativo Especificações sobre a Tarefa a Ser Realizada Abstrai-se de Como o Computador é Implementado Em geral, não existem atribuições a variáveis dos programas As variáveis declarativas são incógnitas e não representam células de memória 47 Paradigmas de LPs (Declarativo) Lógico Predicados Dedução Automática Exemplo de código em Prolog: cachorro(pluto) cachorro(snoop) ?- cachorro(X) X = pluto; X = snoop; false 48 Paradigmas de LPs (Declarativo) Funcional Operam apenas sobre funções que recebem listas de valores e retornam um valor Define uma função que retorne um valor como a resposta do problema. Um programa funcional é uma chamada de função que normalmente chama outras funções para gerar um valor de retorno. Uso de recursão 49 Paradigmas de LPs (Declarativo) Funcional Exemplo de código Commom Lisp: Ex1 - imprimir soma: (print (+ 3 4 5 6) ) Resultado: 18 Ex2- função quadrado: (defun quadrado (x) (print(* x x)) ) Referência VAREJÃO, Flávio Miguel. Linguagens de programação java, C e C++ e outras: conceitos e técnicas. Rio de Janeiro: Elsevier, 2004. 50
Compartilhar