Aula 2 Aspectos Preliminares Universidade do Vale do Rio dos Sinos Aula 2 Aspectos Preliminares < Página da Disciplina > www.inf.unisinos.br/~barbosa <Endereço do Professor > barbosa@exatas.unisinos.br
SUMÁRIO
SUMÁRIO 1 – Porque estudar linguagens?
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens 3 – Avaliação de linguagens
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens 3 – Avaliação de linguagens 4 – Influências sobre o projeto
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens 3 – Avaliação de linguagens 4 – Influências sobre o projeto 5 – Categarias de linguagens
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens 3 – Avaliação de linguagens 4 – Influências sobre o projeto 5 – Categarias de linguagens 6 – Negociações no projeto de linguagens
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens 3 – Avaliação de linguagens 4 – Influências sobre o projeto 5 – Categarias de linguagens 6 – Negociações no projeto de linguagens 7 – Métodos de implementação
SUMÁRIO 1 – Porque estudar linguagens? 2 – Domínios paras as linguagens 3 – Avaliação de linguagens 4 – Influências sobre o projeto 5 – Categarias de linguagens 6 – Negociações no projeto de linguagens 7 – Métodos de implementação 8 – Ambientes de programação
1 - Porque estudar linguagens?
1 - Porque estudar linguagens? Aumento da capacidade de expressar idéias
1 - Porque estudar linguagens? Aumento da capacidade de expressar idéias Maior conhecimento para escolha de linguagens
1 - Porque estudar linguagens? Aumento da capacidade de expressar idéias Maior conhecimento para escolha de linguagens Capacidade para aprender novas linguagens
1 - Porque estudar linguagens? 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? 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? 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?
Aplicações científicas Aplicações comerciais Inteligência artificial 2 - 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
2 - Domínios para as linguagens 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 linguagens 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 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)
2 - 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) 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 linguagens Scripting - Lista de comandos (scripts) - Shells do Unix - BATs do DOS - Linguagens de scripting x Outras linguagens Propósitos especiais
Legibilidade Capacidade de escrita Confiabilidade Custo 3 - Avaliação de Linguagens Legibilidade Capacidade de escrita Confiabilidade Custo
3 - Avaliação de Linguagens Legibilidade - Codificação x Manutenção
3 - Avaliação de Linguagens 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 Linguagens 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 Linguagens 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 Linguagens 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 Linguagens 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 Linguagens Capacidade de escrita - Contexto do domínio de problema-alvo
3 - Avaliação de Linguagens Capacidade de escrita - Contexto do domínio de problema-alvo - Ortogonalidade
3 - 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
3 - 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 ?
3 - Avaliação de Linguagens Confiabilidade - Verificação de tipos Pascal x C C++ x Jada
3 - 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
3 - 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
3 - Avaliação de Linguagens Custo - Treinamento de programadores
3 - Avaliação de Linguagens Custo - Treinamento de programadores - Escrita de programas na linguagem
3 - Avaliação de Linguagens Custo - Treinamento de programadores - Escrita de programas na linguagem - Ambientes de programação: Turbo Pascal, JCreator (Java), etc
3 - 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)
3 - 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
3 - 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
4 - Influências sobre o projeto Arquitetura do computador Metodologia de programação
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
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
5 - Categorias de Linguagens (paradigmas) Paradigma Imperativo Paradigma Orientado a Objetos Paradigma em Lógica Paradigma Funcional Multiparadigma
6 - Negociações no projeto de linguagens Negociação entre os critérios de avaliação
6 - Negociações no projeto de linguagens Negociação entre os critérios de avaliação Critérios conflitantes:
6 - 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
6 - 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
7 - Métodos de Implementação Compiladores Interpretação Sistemas híbridos
7 - 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
7 - 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
7 - 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)
8 - Ambientes de programação Ferramentas para programação Java
8 - Ambientes de programação Ferramentas para programação - Editor - Compilador - Ligador - Depuração Java
8 - Ambientes de programação Ferramentas para programação - Editor - Compilador - Ligador - Depuração Java - Compilador e Máquina Virtual - Diversos ambientes (JCreator, Kawa, etc)