Linguagens de Programação - Departamento de Informática e

Propaganda
Linguagens de Programação
Profa Jerusa Marchi
Departamento de Informática e Estatística
Universidade Federal de Santa Catarina
e-mail: [email protected]
Linguagens de Programação – p. 1/5
Linguagens de Programação
O que é uma Linguagem de Programação?
Método padronizado para expressar instruções para um computador
Conjunto de regras sintáticas e semânticas usadas para definir um
programa de computador
Permite ao programador especificar precisamente em quais dados o
computador deve atuar, como estes dados serão armazenados ou
transmitidos e quais ações devem ser tomadas sob cada
circunstância
Linguagens de Programação – p. 2/5
Linguagens de Programação
A especificação de um programa ou código fonte deve seguir as regras
sintáticas e semânticas definidas pela linguagem de programação
O código fonte é traduzido para código de máquina, que é executado
pelo processador
Produtividade - linguagens de alto nível
Portabilidade - tornar o código fonte independente da máquina alvo
Linguagens de Programação – p. 3/5
Por que estudar LP
Aumentar a capacidade de expressar idéias
conhecimento facilita a expressão e a abstração
conhecer as construções suportadas por alguma linguagem
permite desenvolver ou simular tais construções em outras
linguagens
Linguagens de Programação – p. 4/5
Por que estudar LP
Embasamento para escolher linguagens adequadas
A melhor linguagem para o desenvolvimento de um programa é a
linguagem que melhor representa/trata o problema que se deseja
solucionar
O conhecimento leva ao uso mais eficaz dos recursos e
facilidades presentes na linguagem
Permite a evolução da área - desenvolvimento de novos recursos
(expansões)
Linguagens de Programação – p. 5/5
Por que estudar LP
Facilita o aprendizado de novas linguagens
Evolução contínua da área exige aprendizado constante
Conhecimento dos conceitos facilita e acelera o aprendizado
Entender melhor a implementação
Permite entender por que uma linguagem foi implementanda de
tal forma
Permite o uso mais eficiente e racional dos recursos
Linguagens de Programação – p. 6/5
Por que estudar LP
Poder projetar novas linguagens
O entendimento do que existe, permite avaliar e propor novas
soluções
Usar os modelos de especificação e técnicas de compilação na
solução de outros problemas
Contribuir para o avanço da computação
Se quem usa conhece, o tempo para aceitação de boas
linguagens será reduzido
Linguagens de Programação – p. 7/5
Classificação de LP
Quanto à Geração
Quanto ao Domínio de Aplicação
Quanto à implementação
Quanto ao Paradigma
Linguagens de Programação – p. 8/5
Classificação de LP
Quanto à Geração
1a Geração: linguagem de máquina (chaves lógicas)
2a Geração: linguagem simbólica (Assembly)
representação simbólica da linguagem de máquina
precisa ser traduzido para a linguagem de máquina (assembler
ou montador)
3a Geração: linguagens estruturadas orientadas a procedimentos
Fortran, Algol, Pascal, C, COBOL, Basic, Ada, etc.
4a Geração: linguagens orientadas à aplicação
lotus, excel, sql, etc.
5a Geração: linguagens voltadas para o desenvolvimento da
inteligência artificial
Prolog, LISP, Gödel, etc.
Linguagens de Programação – p. 9/5
Classificação de LP
Quanto ao domínio de Aplicação
Aplicações Científicas
Aplicações Empresariais
Inteligência Artificial
Programação de Sistemas
Domínios Específicos
Linguagens de Programação – p. 10/5
Classificação de LP
Aplicações Científicas
Estruturas de dados simples (vetores, matrizes)
Pouca E/S
Alta utilização de CPU
Exemplos:
Fortran, Algol 60, Matlab, Scilab e derivadas
Linguagens de Programação – p. 11/5
Classificação de LP
Aplicações Empresariais
Facilidades para representação/manipulação de dados
alfanuméricos
Facilidade para geração de relatórios
Exemplos:
Cobol, Sistemas e Linguagens voltadas ao Gerenciamento de
Banco de Dados (SQL, Oracle, etc.)
Linguagens de Programação – p. 12/5
Classificação de LP
Inteligência Artificial
Foco está na manipulação simbólica
Exemplos:
LISP, Prolog, Haskell, Scheme, etc
Linguagens de Programação – p. 13/5
Classificação de LP
Programação de Sistemas
desenvolvimento de software básico (SO, compiladores)
recursos de baixo nível e bom desempenho
Exemplos:
PL/I, C e derivadas
Linguagens de Programação – p. 14/5
Classificação de LP
Domínios Específicos
Linguagens de Scripting: Javascript, perl, php
Linguagens de simulação: GPSS, Arena
Linguagens de Tempo Real: RTJava, RTCC
Linguagens de Programação – p. 15/5
Classificação de LP
Quanto à Implementação
Compiladas
geração de código de baixo nível
vantagem - eficiência na execução
Fortran, cobol, C, Ada
Interpretadas
simulação de uma máquina em software
vantagem - rapidez no desenvolvimento
desvantagem - maior tempo de execução
Basic, APL, PHP, SQL, Prolog, Haskell
Linguagens de Programação – p. 16/5
Classificação de LP
Quanto à Implementação
Híbridas
compilação para um código intermediário e interpretação
deste código
o código intermediário pode ou não ser transparente
interpretação do código intermediário
vantagem - portabilidade
desvantagem - necessidade de uma máquina virtual
Java, C#
Linguagens de Programação – p. 17/5
Classificação de LP
Quanto ao Paradigma de Programação
Classificação usual
Linguagens Imperativas
· Procedurais, Estruturadas
· Orientadas a Objetos
Linguagens Declarativas
· Lógicas
· Funcionais
Linguagens de Programação – p. 18/5
Linguagens Imperativas
Linguagens Procedurais e Estruturadas
baseadas na arquitetura de von Neumann
blocos, procedures (funções) e recursão
geralmente são fortemente tipadas
implementação baseada em pilha
estruturas de controle convencionais
natureza top-down
Linguagens de Programação – p. 19/5
Linguagens Estruturadas
Vantagens
Facilita a organização de prog. e sistemas
Permite ocultar informação
Eficiência
Algumas também possuem facilidades para prog. de grandes
sistemas
Linguagens de Programação – p. 20/5
Linguagens Estruturadas
Desvantagens
gerenciamento de grandes sistemas pode ser trabalhoso
abstrações menos naturais
sintaxe e semântica mais complexas
reuso possível, porém não explícito
Linguagens de Programação – p. 21/5
Linguagens Imperativas
Exemplos
Algol, Pascal, C, Modula e ADA
Aplicações
programação científica
programação de sistemas
Linguagens de Programação – p. 22/5
Linguagens Imperativas
Linguagens Orientadas a objetos
objetos e classes
atributos, métodos e mensagens
abstração de dados (ocultamento de informação)
ligação dinâmica e polimorfismo
herança
Linguagens de Programação – p. 23/5
Linguagens Orientadas a Objetos
Vantagens
reutilização
produtividade
projeto e programação integrados
afinidade com o mundo real
facilita manutenção/extensão de software
Linguagens de Programação – p. 24/5
Linguagens Orientadas a Objetos
Desvantagens
complexidade conceitual maior
eficiência pode ficar comprometida
implementações mal projetadas/programadas
Linguagens de Programação – p. 25/5
Linguagens Orientadas a Objetos
Exemplos
Simula, Smaltalk (pura)
C++, Java, Delphi (Object Pascal)
Aplicações
programação de grandes sistemas em geral
Linguagens de Programação – p. 26/5
Paradigma Imperativo
Exemplo: Fatorial em C
int fatorial (int n)
{
int i;
for (i = n - 1; i >= 1; i-)
n = n * i;
return n;
}
Linguagens de Programação – p. 27/5
Linguagens Declarativas
Linguagens Lógicas
baseada no cálculo dos predicados (lógica de 1a ordem)
baseada em definições recursivas, não possui estruturas de
controle
não possui tipos de dados, casamentos baseados em unificação
de variáveis e constantes lógicas
fatos, regras e consultas
processo de inferência para produzir resultados (Prova de
teoremas - Método da Resolução)
Exemplo - Prolog e seus dialetos
Linguagens de Programação – p. 28/5
Linguagens Lógicas
Vantagens
facilidades específicas para suas áreas de aplicação
Preocupação em o que fazer, e não em como fazer
Desvantagens
problemas de eficiência, necessidade de controle da recursão
carência de métodos para programação de grandes sistemas
Aplicações
área de IA - sistemas baseados em conhecimento, sistemas
especialistas, proc. de linguagem natural gerenciamento de BD
Linguagens de Programação – p. 29/5
Paradigma Lógico
Exemplo: Fatorial em Prolog
fatorial(0,1).
fatorial(N,R) :- N1 is N - 1, fatorial(N1, R1), R
is N * R1.
Linguagens de Programação – p. 30/5
Linguagens Declarativas
Linguagens Funcionais
baseado em funções matemáticas
funções primitivas + formas para construção de funções
complexas
não possuem variáveis, atribuição e iteração
podem ou não ser puras
presença de alguns recursos imperativos
repetição feita via recursão
execução - avaliação de funções
normalmente interpretadas, embora possam ser compiladas
Linguagens de Programação – p. 31/5
Linguagens Funcionais
Vantagens
sintaxe e semântica mais simples
nível de programação mais elevado
concorrência controlada pelo sistema de execução
Desvantagens
baixa eficiência
comunidade reduzida de usuários
Linguagens de Programação – p. 32/5
Linguagens Funcionais
Exemplos
LISP, Scheme, ML, Haskell
Aplicações
Computação simbólica
Processamento de listas
Aplicações de IA - Sistemas especialistas, Representação de
conhecimento
Linguagens de Programação – p. 33/5
Paradigma Funcional
Exemplo: Fatorial em LISP
(defun fatorial (n)
(if (<= n 1)
1
(* n (fatorial (- n 1))))
)
)
Linguagens de Programação – p. 34/5
Linguagens de Programação
O que levar em consideração no desenvolvimento ou na avaliação
de linguagens de programação?
tipos de dados
estruturas de controle
abstração funcional
programação de grandes sistemas
concorrência
tratamento de exceções
Linguagens de Programação – p. 35/5
Linguagens de Programação
tipos de dados
declaração
vinculação estática ou dinâmica
tipagem forte ou fraca
construção de tipos abstratos
Linguagens de Programação – p. 36/5
Linguagens de Programação
estruturas de controle
seleção
repetição
desvio incondicional
entrada/saída
comandos compostos
Linguagens de Programação – p. 37/5
Linguagens de Programação
abstração funcional
subprogramas
definição
chamada
passagem de parâmetros
valor
referência
suporte à recursão
formas de agrupamento
módulos
classes
etc
Linguagens de Programação – p. 38/5
Linguagens de Programação
programação de grandes sistemas
compilação em separado (ou independente)
Linguagens de Programação – p. 39/5
Linguagens de Programação
Concorrência
Nível
instrução
comando
unidade
programa
Tarefas e threads
Sincronização
Cooperação e Competição
Mecanismos de sincronização
Monitores
Semáforos
Troca de mensagens
Linguagens de Programação – p. 40/5
Linguagens de Programação
Tratamento de Exceções
Tratar eventos (errôneos ou não) que são detectáveis por
software ou hardware
Exemplos
leitura de disco
overflow de ponto-flutuante
índice inválido
Linguagens de Programação – p. 41/5
Linguagens de Programação
A linguagem deve auxiliar o programador no projeto, documentação
e validação de programas
Principais Critérios:
legibilidade
regibilidade
confiabilidade
Objetivos
tradução eficiente
execução eficiente
portabilidade
Linguagens de Programação – p. 42/5
Legibilidade
facilidade para ler, escrever, entender e documentar programas
até a década de 70 - levava-se em conta a eficiência e a legibilidade
de máquina
a partir de 70 - ciclo de vida do software - importância da
manutenção
linguagens com um conjunto pequeno de construções básicas
simplicidade na declaração de tipos
linguagens que permitam documentar o texto fonte
Linguagens de Programação – p. 43/5
Legibilidade
compromisso com a expressividade
restrições léxicas (permitir identificar facilmente os elementos do
programa)
clareza sintática (permitir identificar claramente as
estruturas/blocos do programa)
concisão semântica (permitir identificar facilmente o significado
das construções)
Linguagens de Programação – p. 44/5
Regibilidade
Linguagens de programação auxiliam no projeto de programas
fornecendo mecanismos que facilitam a expressão da metodologia
adotada, o que permite que o programador possa se concentrar no
entendimento e na solução do problema
Propriedades:
simplicidade
expressividade
ortogonalidade
Precisão na definição (formal se possível!)
Linguagens de Programação – p. 45/5
Simplicidade
A linguagem deve ser fácil de dominar
suas características devem ser facilmente aprendidas e
lembradas
o resultado de qualquer combinação dessas características deve
ser previsível e facilmente entendido
A simplicidade é prejudicada se
a linguagem oferecer várias maneiras diferentes para a
especificação de um mesmo conceito
a linguagem permite que diferentes conceitos sejam expressos
com a mesma notação
exemplo: a sobrecarga de operadores, multiplicidade de
recursos para uma mesma operação
Linguagens de Programação – p. 46/5
Expressividade
Medida de naturalidade com que uma estratégia de resolução do
problema pode ser transformada em uma estrutura de programa
estruturas de controle, tipos de dados e abstração funcional
Linguagens de Programação – p. 47/5
Ortogonalidade
permitir que qualquer composição seja feita usando as primitivas
básicas
exemplo de falta de ortogonalidade: permitir que funções retornem
somente um subconjunto específico de tipos primitivos
Compromisso entre ortogonalidade e simplicidade
Linguagens de Programação – p. 48/5
Precisão na Definição
Definições sintáticas e semânticas precisas (definições formais)
Linguagens de Programação – p. 49/5
Confiabilidade
o programa faz o que foi programado, reagindo bem a qualquer
instância do problema
características boas: tratamento de exceções, tipagem forte,
modularidade
características ruins: goto, variáveis globais
Linguagens com definições sintáticas e semânticas rigorosas são
mais confiáveis
Linguagens de Programação – p. 50/5
Especificação de Linguagens
A especificação dos aspectos léxicos, sintáticos e semânticos pode
ser
Formal
Informal
Mista
Linguagens de Programação – p. 51/5
Especificação de Linguagens
Aspectos
Léxicos
Sintáticos
Semântico
Mecanismos Formais
Gramáticas Regulares, Autômatos finitos
Expressões Regulares
Gramáticas Livres de Contexto
Autômatos de pilha
Gramáticas de Atributos
Ações Semânticas
Semântica Denotacional
Linguagens de Programação – p. 52/5
Especificação de Linguagens
Especificação Mista
GLC + Ações Semânticas ⇒ Tradução Dirigida pela Sintaxe ⇒
Geração de Código
Linguagens de Programação – p. 53/5
Especificação de Linguagens
Limite entre aspectos léxicos e sintáticos
Tomados em separados pois:
os aspectos léxicos são mais simples
aumenta a legibilidade da Especificação Sintática
maior eficiência na etapa de análise
Linguagens de Programação – p. 54/5
Especificação de Linguagens
Limite entre aspectos sintáticos e semânticos
Não muito claro
Sintaxe independente de contexto
Sintaxe dependente de contexto
Significado Semântico
Na prática considera-se a sintaxe independente do contexto com
aspecto sintático enquanto que as demais são aspectos
semânticos.
Linguagens de Programação – p. 55/5
Download