Linguagem de programação I A

Slides:



Advertisements
Apresentações semelhantes
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Advertisements

gerador de código intermediário
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Linguagem de Programação COBOL/ALGOL
Introdução à Ciência da Computação Linguagens de Programação.
Paulo Marques Hernâni Pedroso
Informática Aplicada Prof.: Bruno Rafael de Oliveira Rodrigues.
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
Software Básico Silvio Fernandes
Introdução a Programação Renata Freire
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Introdução a Informática
INTRODUÇÃO À PROGRAMAÇÃO
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação I Disciplina: Arquitetura de Software
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Softwares.
Tradutores de Linguagens
Linguagens de Programação
Aula 2 Aspectos Preliminares
Laboratório de Programação de Computadores I
Paradigmas de Linguagens de Programação Introdução Professor: Armando Hage Belém-2008.
Paradigmas de programação
Lógica de Programação UNIDADE 1 – Introdução a) Computador
PROGRAMAÇÃO I UNIDADE 1.
Programação Avançada Prof. Natalia Castro Fernandes
Desenvolvimento de Sistemas Orientados a Aspectos
Tópicos avançados em internet A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Caracterização e Objetivos das LP
Tipos de Dados Paradigmas de Programação
Avaliação da Linguagem de Programação
Professor: Márcio Amador
02/08/2011 Professor Leomir J. Borba- –
Orientação a Objetos Parte I
Linguagem Pascal Prof. Sérgio Rodrigues.
Geração de Código aula-12-geração-de-código.pdf.
Paradigma funcional.
Paradigmas de Linguagens de Programação Aula 2
Introdução a Linguagens de Programação
Paradigmas de Linguagens de Programação
Analise Semântica aula-10-analise-semântica.pdf.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Aula 1 – Profª Danielle Costa
Programação de computadores Prof. Giovanni Castro.
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação Introdução Prof. Renato Melo.
Algoritmos e Programação I
Critérios de Avaliação das Linguagens de Programação
Fundamentos de linguagens de programação
Semântica de Linguagens de Programação
Compiladores – IF688 Professor: André Santos
1 Linguagens de Programação Pedro Lopes 2010/2011.
Linguagens de Programação
Estudos de Linguagens de Programação - Introdução
Sintaxe de uma Linguagem
SISTEMAS DE INFORMAÇÃO
Faculdade Pernambuca - FAPE
Evolução das Principais Linguagens de Programação
Paradigmas de Programação
Módulo II Capítulo 1: Orientação a Objetos
Influencias sobre o Projeto da Linguagem
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Módulo I – Softwares: Linguagens de Programação Prof.: Rogério Morais.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Transcrição da apresentação:

Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01

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 Custos Trade-offs Influências sobre o Projeto da Linguagem Metodologias 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;

Motivos para estudar CLPs 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 COBOL

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 (Readability) Quão facilmente um programa pode ser lido e entendido Capacidade de escrita (Writability) Quão facilmente uma linguagem pode ser usada para criar programas Confiabilidade (Reliability) Conformidade com as especificações sob todas as condições Custo O custo final de uma linguagem é uma função de suas características

Legibilidade (Readability) Simplicidade global Linguagens com um pequeno número de componentes básicos são mais fáceis de aprender Multiplicidade de recursos (mais de uma maneira para realizar uma operação particular) Sobrecarga (overloading) de um operador, ou seja, um único símbolo possui mais de um significado. Um exemplo em C para incrementar uma variável inteira simples: cont = cont +1 cont += 1 cont++ ++cont

Legibilidade (Readability) Ortogonalidade Diz respeito a capacidade da LP permitir ao programador combinar seus conceitos básicos sem que se produzam efeito anômalos nessa combinação. Assim uma LP é tão mais ortogonal quanto menor for o numero de exceções aos seus padrões regulares. LPs ortogonais são interessantes porque o programador pode prever, com segurança, o comportamento de uma determinada combinação de conceitos

Legibilidade (Readability) Instruções de controle A existência de estruturas de controle bem conhecidas (exemplo: while) loop1: if (incr >= 20) goto out; loop2: if (sum > 100) goto next; sum += incr; goto loop2; next: incr++; goto loop1; out: while (incr < 20) { while (sum <= 100) { sum += incr; } incr++;

Legibilidade (Readability) Tipos de dados e estruturas A presença de facilidades adequadas para definir tipos de dados e estruturas de dados Exemplo: suponha que em uma linguagem não exista um tipo de dado booleano e um tipo numérico seja usado para substituí-lo: timeOut = 1 (significado não claro) timeOut = true (significado claro)

Legibilidade (Readability) Considerações sobre a sintaxe Formas identificadoras Restringir os identificadores a tamanhos muito pequenos prejudica a legibilidade Palavras especiais Formas das palavras especiais de uma linguagem (exemplo: while, class, for e begin-end) Palavras especiais de uma linguagem podem ser usadas como nomes de variáveis? Forma e significado Projetar instruções de forma que sua aparência indique sua finalidade

Capacidade de Escrita (Writability) Simplicidade e ortogonalidade Poucos construtores, um pequeno número de primitivas, um pequeno conjunto de regras para combiná-los Suporte para abstração A capacidade de definir e de usar estruturas ou operações complexas de maneira que permita ignorar muitos dos detalhes Expressividade Um conjunto relativamente conveniente de maneiras de especificar operadores Exemplos: • count++ é mais conveniente do que count = count + 1 • a inclusão do for em muitas linguagens modernas

Confiabilidade (Reliability) Verificação de tipos Testar se existem erros de tipos Manipulação de Exceções Capacidade de interceptar erros em tempo de execução e por em prática medidas corretivas

Confiabilidade (Reliability) Apelidos (Aliasing) Presença de dois ou mais métodos, ou nomes, distintos que referenciam a mesma célula de memória Legibilidade (Readability) e Capacidade de Escrita (Writability) Uma linguagem que não suporta maneiras naturais de expressar os algoritmos usará, necessariamente, abordagens não-naturais. Assim, a legibilidade será reduzida. A legibilidade afeta a confiabilidade tanto na escrita quanto na manutenção.

Custo Treinamento dos programadores para usar a linguagem Escrita de programas na linguagem Compilação dos programas na linguagem Execução dos programas Sistema de implementação da linguagem: IDE (Integrated Development Environment) free x pagas Confiabilidade Confiabilidade baixa leva a altos custos Manutenção dos programas

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;

Outros critérios de avaliação Portabilidade Quão facilmente um programa pode ser movido de uma implementação para outra Generalidade Seu uso em uma gama de aplicações Boa definição (Well-definedness) A precisão e o quanto a definição oficial da linguagem é completa

Influências sobre o projeto da linguagem Arquitetura do Computador Linguagens são desenvolvidas com base na arquitetura mais usada, conhecida como arquitetura von Neumann* *(se caracteriza pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória que os dados, podendo assim manipular tais programas – usa CPU e Memória)

Influências sobre o projeto da linguagem Metodologias de programação Novas metodologias de desenvolvimento de software (exemplo, desenvolvimento orientado a objetos) levam a novos paradigmas de programação, e novas linguagens de programação

Metodologias Ausência de metodologia Programação estruturada Década de 70; Metodologias de projeto top-down e botton-up; Orientação aos processos; Algol, Pascal, C.

Metodologias Programação orientada a objetos Década de 80 Abstração de dados, herança, encapsulamento; vinculação dinâmica de tipos; Smalltalk; C++; Java Programação orientada a eventos Aplicação “reage” a eventos

Metodologias Programação orientada a aspectos objetivo separar o código segundo a sua importância para a aplicação, permitindo que o programador encapsule o código secundário em módulos separados do restante da aplicação

Categorias de linguagens Imperativas: utilizam a variável como elemento de abstração da célula de memória; (C, Java) Funcionais: Principal maneira de computar é através da aplicação de funções para os parâmetros fornecidos - somente recursão; (LISP)

Categorias de linguagens 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) Marcação: não especificam computações, mas descrevem a aparência geral de documentos (html, latex)

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 O processo de compilação possui várias fases: Análise léxica • Converte caracteres de um programa fonte em unidades léxicas Análise sintática • Transforma unidades léxicas em parse trees, as quais representam a estrutura sintática do programa Análise semântica • Gera código intermediário Geração de código • Código de máquina é gerado Exemplos: C, Cobol, Ada, Pascal...

analisador sintático) Métodos de implementação (compilação) Programa Fonte Analisador léxico sintático Gerador de Código Intermediário (e analisador sintático) Gerador de Código Otimização Computador Tabela de símbolos Unidades Léxicas Árvores de Análise (parse trees) Código Intermediário Linguagem de Máquina Resultados (Opcional) Dados de Entrada

Métodos de implementação 2) Interpretação Pura Sem tradução Execução lenta (10 a 100 vezes mais lento que programas compilados) Requer mais espaço Exemplo: Javascript, scripts UNIX Programa Fonte Dados de Entrada Resultados Interpretador

analisador sintático) Métodos de implementação Programa Fonte Analisador léxico sintático Gerador de Código Intermediário (e analisador sintático) Unidades Léxicas Árvores de Análise (parse trees) Código Intermediário Dados de Entrada Resultados Interpretador 3) Sistemas de implementação Híbridos Um meio-termo entre compilador e interpretador puro Baixo custo de tradução Velocidade de execução média Mais rápido do que interpretação pura Ex.: Perl, Java