domínios de programação
DESCRIPTION
Domínios de Programação. Aplicações Científicas Aplicações Comerciais Inteligência Artificial Programação de Sistemas Linguagens de Scripting Linguagens para Propósitos Especiais. Domínios de Programação Aplicações Científicas. Estruturas de dados simples: matrizes - PowerPoint PPT PresentationTRANSCRIPT
Domínios de Programação
• Aplicações Científicas
• Aplicações Comerciais
• Inteligência Artificial
• Programação de Sistemas
• Linguagens de Scripting
• Linguagens para Propósitos Especiais
Domínios de Programação Aplicações Científicas
• Estruturas de dados simples: matrizes
• Operações aritméticas em ponto flutuante
• FORTRAN, ALGOL 60
• Nenhuma linguagem é significativamente melhor do que o FORTRAN até hoje
Domínios de Programação Aplicações Comerciais
• Facilidade para produzir relatórios
• Exemplo: COBOL (60)
• Há pouco desenvolvimento nas linguagens de aplicação comercial, além do que foi feito para COBOL (usado ainda hoje)
Domínios de Programação Inteligência Artificial
• Computações simbólicas, e não numéricas
• LISP
• PROLOG
Domínios de Programação Programação de Sistemas
• Desenvolvimento de software básico (sistemas operacionais)
• Linguagens para programação de sistemas exigem execução rápida
• PL/S (IBM), BLISS (Digital), Extended ALGOL (Burroughs)
• Unix e C (poucas restrições de segurança)
Domínios de Programação Linguagens de Scripting
• Script é uma lista de comandos em um arquivo, para serem executados “em lote”
• sh
• ksh (Bell Labs)
• awk (Aho, Wienberger e Kernighan)
• tcl
• Perl
Critérios de Avaliação de Linguagens
• Legibilidade
• Facilidade de Escrita (“writability”)
• Confiabilidade
• Custo
Critérios de Avaliação de Linguagens
Legibilidade• Simplicidade: poucos componentes básicos, cuidado
com a multiplicidade de recursos, overloading inteligente de operadores
• Ortogonalidade: conjunto consistente de regras para combinar construções primitivas, com poucas exceções
• Instruções de controle
• Tipos e estruturas de dados
• Sintaxe
Critérios de Avaliação de Linguagens Facilidade de escrita
• Simplicidade: grande número de construções diferentes leva a dificuldades para escrever programas
• Suporte para abstração: capacidade de definir estruturas/operações complexas ignorando detalhes.
Abrstração pode ser em dados e em código. • Expressividade: adequação das formas de especificar
computações
Critérios de Avaliação de Linguagens Confiabilidade
• Verificação de tipos
• Tratamento de exceções
• Aliasing
• Pouca legibilidade ou pouca facilidade de escrita tendem a gerar programas pouco confiáveis
Critérios de Avaliação de Linguagens Custo
• Treinamento
• Escrita de código
• Compilação
• Execução
• Implementação
• Manutenção
• da má confiabilidade
Influências sobre o Projeto de Linguagens
• Arquitetura dos computadores
• Metodologias de programação ao longo da história
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores• Últimos 40 anos: imensa maioria das
linguagens de programação foi projetada em função da arquitetura Von Neumann
• As linguagens baseadas nesta arquitetura são denominadas linguagens imperativas
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores
Modelo da arquitetura de Von Newmann
MEMÓRIA
ULA UC
CPU
E/S
instruções e dados (“piped”)
resultados(“piped”)
GARGALO de Von Newmann
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores• Execução de código numa máquina Von
Newmann: ciclo “fetch-execute”
• Programas: residem na memória mas são executados na CPU (cada instrução é transferida da memória para o processador)
• Endereço da próxima instrução: mantido num registro chamado “program counter”
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores
EXECUÇÃO
• inicialize o program counter
• repeat forever– fetch– decode– execute
Influências sobre o Projeto de Linguagens
Metodologias de Programação• Final anos 60: Programação Estruturada
• Anos 70: projeto “top-down”, refinamento, modularidade, verificação de tipos, mais instruções de controle
• Final anos 70: abstração de dados
• Anos 80: programação orientada a objetos
• Anos 90: concorrência, internet
Categorias de Linguagens
• Imperativas: Pascal, C...– Ordem específica das instruções é importante
• Orientadas a Objetos: C++, Delphi, Java...– Hierarquização, classificação, extrema
modularização/abstração (código e dados)
• Funcionais (LISP) e Lógicas (Prolog)– Baseadas na computação de funções ou regras
de inferência. A recursão é um conceito natural nestas linguagens
“Trade-offs” no Projeto de Linguagens
• Confiabilidade vs. Custo de manutenção
• Expressividade vs. Legibilidade
• Flexibilidade vs. Segurança
Métodos de Implementação
• Compilação
• Interpretação Pura
• Sistemas híbridos
Interface de computadores virtuais
Núcleo daMáquina
Interpretador de Macroinstruções
Sistema Operacional
Comp.PascalComp.
FORTRAN
Interp.LISP
Comp.C
Comp.Ada
Assembler
Interp.comandos
SO
...
O processo de compilaçãoPrograma-fonte
Analisador Léxico
Analisador Sintático
Analisador SemânticoGerador de código intermediário
Gerador de código
Máquina
OtimizaçãoTabela de símbolos
Resultados
tokens
parse trees
cód.intermediário
alto nível
ling. máquina - baixo níveldados deentrada
Interpretação pura
• Programas são interpretados por outro programa (interpretador), sem conversão
• Interpretador = simulador de software, máquina virtual cujas instruções são um programa em ling. alto nível
• vantagem: facilidade de depuração
• desvantagem: lentidão, muito espaço de memória
• Exemplos: Linguagens de scripting, LISP...
Sistemas Híbridos
• Perl
• Implementações iniciais de Java– código intermediário de Java = “código de bytes”– portabilidade– cód. bytes + interpretador = Java Virtual Machine– hoje: tradução do cód. bytes p/ cód. máquina– applets Java = são baixados em código de bytes