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.
Download

introducao