Domínios de Programação

Post on 02-Jan-2016

29 views 1 download

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 Presentation

Transcript of Domínios de Programação

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