Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Introdução Sumário Motivos para estudar Conceitos de Linguagens de Programação Domínios da Programação Critérios de Avaliação de Linguagens Trade-offs Influências sobre o Projeto da Linguagem Categorias de linguagens Métodos de Implementação Motivos para estudar CLPs Aumento da capacidade de expressar idéias; Conhecer os recursos e limites das linguagens nos permite otimizar o uso da mesma; Maior conhecimento para a escolha de linguagens apropriadas; Muitos programadores aprendem por conta... Conhecer os diferentes recursos da diferentes linguagens facilita o processo de escolha de uma linguagem compatível com o nível de abstração exigido pelo problema Capacidade aumentada para aprender novas linguagens; Domínios da programação Diferentes empregos da computação Áreas de uso Aplicações Científicas O grande motivo da computação; Estruturas de dados simples, laços de contagem e seleções; Fortran e Algol 60, linguagem assembly; Aplicações Comerciais Final década de 50; Geração de relatórios, armazenamento de números decimais Domínios da programação Inteligência Artificial Utilização de computação simbólica em vez de numérica; LISP (1959) e Prolog (1970) Programação de Sistemas Sistema Operacional (software básico) Algol e C Domínios da programação Linguagem de scripting Listas de comandos a serem executados AWK, Perl, Python Programação Web Popularização da Internet Mudou completamente a forma de pensar e desenvolver sistemas Inicio como simples páginas Sistemas completos Linguagens server side x client side PHP JavaScript Linguagens compiladas x interpretadas x hibridas Critérios de avaliação da linguagem Legibilidade Capacidade de escrita (Writability) Confiabilidade Custo Critérios de avaliação da linguagem Característica Legibilidade Writability Confiabilidade Simplicidade/Ortogonalidade X X X Estruturas de Controle X X X Tipos de Dados e Estruturas X X X Projeto da Sintaxe X X X Suporte para Abstração X X Expressividade X X Verificação de Tipos X Manipulação de Excessões X Aliasing X Trade-offs Critérios Conflitantes: confiabilidade X custo de execução Verificação dinâmica de tipos; Índices de arrays expressividade X legibilidade conjunto poderoso de operadores leva a expressões matemáticas concisas mas pouco legíveis flexibilidade X segurança uniões em C; registros variantes em Pascal Categorias de linguagens Imperativas: utilizam a variável como elemento de abstração da célula de memória; (C, Java) Funcionais: aplicação de funções a determinados parâmetros; pode ser feita sem vinculação de tipos, sem atribuições e sem iteração - somente recursão; (LISP) Lógicas: baseadas em regras; não há um fluxo particular de execução; Aplicam-se um conjunto de regras a um conjunto de dados através de uma função de inferência obtendo-se novos dados; (Prolog) de Marcação: não especificam computações, mas descrevem a aparência geral de documentos (html, latex) Computadores virtuais Computador Virtual Pascal Computador Computador Compilador Virtual Fortran Virtual LISP Pascal Interpretador Compilador Fortran Sistema LISP Operacional Interpretador do Conjunto de Instruções Interpretador Computador Compilador Núcleo da de Comandos C Máquina do S.O. Virtual C Assembler Compilador ADA Computador Computador Virtual ADA ...... Virtual Assembly Métodos de implementação 1) Compilação Traduz um programa de alto-nível para o código de máquina Tradução lenta Execução rápida Exemplos: C, Cobol, Ada, Pascal... Métodos de implementação (compilação) Programa Fonte Analisador léxico Unidades Léxicas Analisador sintático Árvores de Análise (parse trees) Gerador de Código Tabela de Intermediário (e símbolos Otimização analisador sintático) Código Intermediário Gerador de Código Linguagem de Máquina Dados de Entrada Computador Resultados (Opcional) Métodos de implementação 2) Interpretação Pura Sem tradução Execução lenta Atualmente raras (LISP, html, scripts UNIX, PHP) Figura descritiva: Programa Fonte Dados de Entrada Interpretador Resultados Métodos de implementação Programa Fonte 3) Sistemas de implementação Hibridos Analisador Baixo custo de tradução léxico Velocidade de execução média Unidades Léxicas Analisador Ex.: Perl, Java sintático Árvores de Análise (parse trees) Gerador de Código Intermediário (e analisador sintático) Código Intermediário Dados de Entrada Interpretador Resultados Metodologias Metodologias de Programação Ausência de metodologia Programação estruturada Década de 70; Eliminação de gotos; Metodologias de projeto top-down e botton-up; Orientação aos processos; Algol, Pascal, C. Metodologias Programação orientada a objeto Década de 80; Abstração de dados, herança, encapsulamento; vinculação dinâmica de tipos; Smalltalk; C++; Java. Programação Orientada a Processos concorrência; suporte em ADA; Java Metodologias Programação orientada a eventos Diferente de programas tradicionais que seguem um fluxo de controle padronizado, o controle de fluxo de programas orientados a evento são guiados por indicações externas, chamadas eventos. Sua aplicação é grande no desenvolvimento de sistemas de interface com o usuário Diferente de aguardar por um comando completo que processa a informação, o sistema em tal paradigma é programado em sua base em um laco de repeticao de eventos, que recebem repetidamente informação para processar e disparam uma função de resposta de acordo com o evento.