Linguagem de
programação I A
Carlos Oberdan Rolim
Ciência da Computação
Sistemas de Informação
Versão: 27022014_01
Introduçã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
o PHP
o 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)
Um exemplo em C para incrementar uma variável inteira simples:
cont = cont +1
cont += 1
cont++
++cont
- Sobrecarga (overloading) de um operador, ou seja, um único símbolo
possui mais de um significado.
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;
while (incr < 20) {
while (sum <= 100) {
loop2:
if (sum > 100) goto next;
sum += incr;
sum += incr;
}
goto loop2;
incr++;
}
next:
incr++;
goto loop1;
out:
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
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;
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
o Década de 70;
o Metodologias de projeto top-down e botton-up;
o Orientação aos processos;
o Algol, Pascal, C.
Metodologias
Programação orientada a objetos
o Década de 80
o Abstração de dados, herança, encapsulamento;
ovinculação dinâmica de tipos;
o Smalltalk; C++; Java
Programação orientada a eventos
o Aplicação “reage” a eventos
Metodologias
Programação orientada a aspectos
o 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:
o Análise léxica
• Converte caracteres de um programa fonte em unidades léxicas
o Análise sintática
• Transforma unidades léxicas em parse trees, as quais representam a estrutura
sintática do programa
o Análise semântica
• Gera código intermediário
o Geração de código
• Código de máquina é gerado
- 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 (10 a 100 vezes mais lento que programas compilados)
- Requer mais espaço
- Exemplo: Javascript, scripts UNIX
Programa Fonte
Dados de
Entrada
Interpretador
Resultados
Métodos de implementação
Programa Fonte
3) Sistemas de implementação
Híbridos
-
Analisador
Um meio-termo entre compilador e
interpretador puro
léxico
Unidades Léxicas
-
Baixo custo de tradução
-
Velocidade de execução média
-
Mais rápido do que interpretação pura
-
Ex.:
Perl, Java
Analisador
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
Download

Tolerância a Falhas