Upload
internet
View
106
Download
2
Embed Size (px)
Citation preview
1
Aula 2Aula 2Aspectos PreliminaresAspectos Preliminares
Universidade do Vale do Rio dos Sinos
< Página da Disciplina >
www.inf.unisinos.br/~barbosawww.inf.unisinos.br/~barbosa
<Endereço do Professor >
[email protected]@exatas.unisinos.br
2
SUMÁRIOSUMÁRIO
3
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?
4
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens
5
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens3 – Avaliação de linguagens
6
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens3 – Avaliação de linguagens4 – Influências sobre o projeto
7
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens3 – Avaliação de linguagens4 – Influências sobre o projeto5 – Categarias de linguagens
8
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens3 – Avaliação de linguagens4 – Influências sobre o projeto5 – Categarias de linguagens6 – Negociações no projeto de linguagens
9
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens3 – Avaliação de linguagens4 – Influências sobre o projeto5 – Categarias de linguagens6 – Negociações no projeto de linguagens7 – Métodos de implementação
10
SUMÁRIOSUMÁRIO1 – Porque estudar linguagens?2 – Domínios paras as linguagens3 – Avaliação de linguagens4 – Influências sobre o projeto5 – Categarias de linguagens6 – Negociações no projeto de linguagens7 – Métodos de implementação8 – Ambientes de programação
11
1 - Porque estudar linguagens?1 - Porque estudar linguagens?
12
• Aumento da capacidade de expressar idéias1 - Porque estudar linguagens?1 - Porque estudar linguagens?
13
• Aumento da capacidade de expressar idéias• Maior conhecimento para escolha de linguagens
1 - Porque estudar linguagens?1 - Porque estudar linguagens?
14
• Aumento da capacidade de expressar idéias• Maior conhecimento para escolha de linguagens• Capacidade para aprender novas linguagens
1 - Porque estudar linguagens?1 - Porque estudar linguagens?
15
• Aumento da capacidade de expressar idéias• Maior conhecimento para escolha de linguagens• Capacidade para aprender novas linguagens• Entender a importância da implementação - Gerenciamento de memória: Fortran x C (Cray) - Recursividade x Iteração
1 - Porque estudar linguagens?1 - Porque estudar linguagens?
16
• Aumento da capacidade de expressar idéias• Maior conhecimento para escolha de linguagens• Capacidade para aprender novas linguagens• Entender a importância da implementação - Gerenciamento de memória: Fortran x C (Cray) - Recursividade x Iteração• Capacidade de projetar novas linguagens - Quem projeta novas linguagens (nós)? - Interface é uma linguagem?
1 - Porque estudar linguagens?1 - Porque estudar linguagens?
17
• Aumento da capacidade de expressar idéias• Maior conhecimento para escolha de linguagens• Capacidade para aprender novas linguagens• Entender a importância da implementação - Gerenciamento de memória: Fortran x C (Cray) - Recursividade x Iteração• Capacidade de projetar novas linguagens - Quem projeta novas linguagens (nós)? - Interface é uma linguagem?• Avanço da computação - O que guia a escolha de uma linguagem? - Fortran x Algol - C++ x Java - Java será Cobol do século XXI?
1 - Porque estudar linguagens?1 - Porque estudar linguagens?
18
2 - Domínios para as linguagens2 - Domínios para as linguagens
• Aplicações científicas• Aplicações comerciais• Inteligência artificial• Programação de sistemas• Linguagens de scripting • Propósitos especiais
19
• Aplicações científicas - Estruturas de dados: vetores e matrizes - Principal concorrente: Assembly (eficiência) - FORTRAN (década de 50 e 60) - Existe alguma outra linguagem científica? - Físicos usam FORTRAN - CESUP: Principal linguagem = FORTRAN
2 - Domínios para as linguagens2 - Domínios para as linguagens
20
• Aplicações científicas - Estruturas de dados: vetores e matrizes - Principal concorrente: Assembly (eficiência) - FORTRAN (década de 50 e 60) - Existe alguma outra linguagem científica? - Físicos usam FORTRAN - CESUP: Principal linguagem = FORTRAN
• Aplicações comerciais - COBOL (década de 60) - Planilhas eletrônicas - Sistemas da Banco de Dados
2 - Domínios para as linguagens2 - Domínios para as linguagens
21
2 - Domínios para as linguagens2 - Domínios para as linguagens• Inteligência Artificial - Processamento simbólico - Listas encadeadas x Matrizes - Capacidade de criar e executar código novo (assert/retract no Prolog) - Primeira linguagem: LISP (década de 60) - Linguagem Prolog (década de 70) LPA (Logic Programming Associates Ltda)
22
• Inteligência Artificial - Processamento simbólico - Listas encadeadas x Matrizes - Capacidade de criar e executar código novo (assert/retract no Prolog) - Primeira linguagem: LISP (década de 60) - Linguagem Prolog (década de 70) LPA (Logic Programming Associates Ltda)
• Programação de Sistemas (software básico) - Linguagem Assembly - Linguagem C (baixo nível, eficiente, sem restrições de segurança)
2 - Domínios para as linguagens2 - Domínios para as linguagens
23
2 - Domínios para as linguagens2 - Domínios para as linguagens
• Scripting - Lista de comandos (scripts) - Shells do Unix - BATs do DOS - Linguagens de scripting x Outras linguagens • Propósitos especiais
24
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
• Legibilidade• Capacidade de escrita• Confiabilidade• Custo
25
• Legibilidade - Codificação x Manutenção
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
26
• Legibilidade - Codificação x Manutenção - Simplicidade global Linguagem grande: usamos um subset (APIS em Java) Multiplicidade de recursos (incremento de variáveis em C) Sobrecarga (soma de elementos e OO)
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
27
• Legibilidade - Codificação x Manutenção - Simplicidade global Linguagem grande: usamos um subset (APIS em Java) Multiplicidade de recursos (incremento de variáveis em C) Sobrecarga (soma de elementos e OO) - Ortogonalidade Pascal e C: Passagem de vetores sempre por referência Facilitada nas linguagens declarativas (Prolog, Lisp, etc)
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
28
• Legibilidade - Codificação x Manutenção - Simplicidade global Linguagem grande: usamos um subset (APIS em Java) Multiplicidade de recursos (incremento de variáveis em C) Sobrecarga (soma de elementos e OO) - Ortogonalidade Pascal e C: Passagem de vetores sempre por referência Facilitada nas linguagens declarativas (Prolog, Lisp, etc) - Instruções de controle: Banimento do GOTO e estruturação
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
29
• Legibilidade - Codificação x Manutenção - Simplicidade global Linguagem grande: usamos um subset (APIS em Java) Multiplicidade de recursos (incremento de variáveis em C) Sobrecarga (soma de elementos e OO) - Ortogonalidade Pascal e C: Passagem de vetores sempre por referência Facilitada nas linguagens declarativas (Prolog, Lisp, etc) - Instruções de controle: Banimento do GOTO e estruturação - Tipos de dados: Tipo booleano em C (0 = FALSE)
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
30
• Legibilidade - Codificação x Manutenção - Simplicidade global Linguagem grande: usamos um subset (APIS em Java) Multiplicidade de recursos (incremento de variáveis em C) Sobrecarga (soma de elementos e OO) - Ortogonalidade Pascal e C: Passagem de vetores sempre por referência Facilitada nas linguagens declarativas (Prolog, Lisp, etc) - Instruções de controle: Banimento do GOTO e estruturação - Tipos de dados: Tipo booleano em C (0 = FALSE) - Sintaxe (tamanho de identificadores, etc)
3 - Avaliação de Linguagens3 - Avaliação de Linguagens
31
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Capacidade de escrita - Contexto do domínio de problema-alvo
32
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Capacidade de escrita - Contexto do domínio de problema-alvo - Ortogonalidade
33
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Capacidade de escrita - Contexto do domínio de problema-alvo - Ortogonalidade - Abstração: Processos (subprogramas) e Dados (EDs) TADs como base para Objetos
34
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Capacidade de escrita - Contexto do domínio de problema-alvo - Ortogonalidade - Abstração: Processos (subprogramas) e Dados (EDs) TADs como base para Objetos - Expressividade: A++ mais expressivo que A := A + 1 ?
35
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Confiabilidade - Verificação de tipos Pascal x C C++ x Jada
36
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Confiabilidade - Verificação de tipos Pascal x C C++ x Jada - Manipulação de exceções Abertura de arquivos em Pascal: Assign/Reset/Rewrite Java: Try/Catch/Finally
37
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Confiabilidade - Verificação de tipos Pascal x C C++ x Jada - Manipulação de exceções Abertura de arquivos em Pascal: Assign/Reset/Rewrite Java: Try/Catch/Finally - Aliasing Perigoso C: UNIONS e Ponteiros
38
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Custo - Treinamento de programadores
39
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Custo - Treinamento de programadores - Escrita de programas na linguagem
40
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Custo - Treinamento de programadores - Escrita de programas na linguagem - Ambientes de programação: Turbo Pascal, JCreator (Java), etc
41
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Custo - Treinamento de programadores - Escrita de programas na linguagem - Ambientes de programação: Turbo Pascal, JCreator (Java), etc - Custos de compilação e execução (máquinas virtuais: JVM, etc)
42
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Custo - Treinamento de programadores - Escrita de programas na linguagem - Ambientes de programação: Turbo Pascal, JCreator (Java), etc - Custos de compilação e execução (máquinas virtuais: JVM, etc) - Otimização de código
43
3 - Avaliação de Linguagens3 - Avaliação de Linguagens• Custo - Treinamento de programadores - Escrita de programas na linguagem - Ambientes de programação: Turbo Pascal, JCreator (Java), etc - Custos de compilação e execução (máquinas virtuais: JVM, etc) - Otimização de código - Confiabilidade
44
4 - Influências sobre o projeto 4 - Influências sobre o projeto • Arquitetura do computador
• Metodologia de programação
45
4 - Influências sobre o projeto 4 - Influências sobre o projeto • Arquitetura do computador - Arquitetura Von Neumann: Linguagens Imperativas - Máquinas Virtuais como novas arquiteturas - Projeto japonês do computador de V geração
• Metodologia de programação
46
4 - Influências sobre o projeto 4 - Influências sobre o projeto • Arquitetura do computador - Arquitetura Von Neumann: Linguagens Imperativas - Máquinas Virtuais como novas arquiteturas - Projeto japonês do computador de V geração
• Metodologia de programação - Programação não estrutura (GOTOs): BASIC, COBOL, etc - Programação estruturada: COBOL estruturado, Pascal, etc - Programação Orientada a Objetos: C++, Java, etc
47
5 - Categorias de Linguagens (paradigmas)5 - Categorias de Linguagens (paradigmas)
• Paradigma Imperativo• Paradigma Orientado a Objetos• Paradigma em Lógica• Paradigma Funcional• Multiparadigma
48
6 - Negociações no projeto de linguagens6 - Negociações no projeto de linguagens
• Negociação entre os critérios de avaliação
49
6 - Negociações no projeto de linguagens6 - Negociações no projeto de linguagens
• Negociação entre os critérios de avaliação• Critérios conflitantes:
50
6 - Negociações no projeto de linguagens6 - Negociações no projeto de linguagens
• Negociação entre os critérios de avaliação• Critérios conflitantes: • Confiabilidade x Custo de execução - Verificação de tipos em tempo de execução
51
6 - Negociações no projeto de linguagens6 - Negociações no projeto de linguagens
• Negociação entre os critérios de avaliação• Critérios conflitantes: • Confiabilidade x Custo de execução - Verificação de tipos em tempo de execução• Flexibilidade x Segurança - C x Pascal - C++ x Java
52
7 - Métodos de Implementação7 - Métodos de Implementação
• Compiladores
• Interpretação
• Sistemas híbridos
53
7 - Métodos de Implementação7 - Métodos de Implementação
• Compiladores - Análise léxica, Análise sintática e Geração de código
- UNISINOS: Disciplinas específicas• Interpretação
• Sistemas híbridos
54
7 - Métodos de Implementação7 - Métodos de Implementação
• Compiladores - Análise léxica, Análise sintática e Geração de código
- UNISINOS: Disciplinas específicas• Interpretação - Processo de desenvolvimento
- 10 a 100 vezes mais lenta do que a compilação
- Usada em scripts• Sistemas híbridos
55
7 - Métodos de Implementação7 - Métodos de Implementação
• Compiladores - Análise léxica, Análise sintática e Geração de código
- UNISINOS: Disciplinas específicas• Interpretação - Processo de desenvolvimento
- 10 a 100 vezes mais lenta do que a compilação
- Usada em scripts• Sistemas híbridos - Máquinas virtuais - Exemplos: Java (JVM) e Prolog (WAM)
56
8 - Ambientes de programação8 - Ambientes de programação
• Ferramentas para programação
• Java
57
8 - Ambientes de programação8 - Ambientes de programação
• Ferramentas para programação - Editor
- Compilador
- Ligador
- Depuração
• Java
58
8 - Ambientes de programação8 - Ambientes de programação
• Ferramentas para programação - Editor
- Compilador
- Ligador
- Depuração
• Java - Compilador e Máquina Virtual
- Diversos ambientes (JCreator, Kawa, etc)