Buscar

Introdução às Linguagens de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Linguagens de Programação
Introdução
Prof. Otávio Calaça Xavier
otavio@inf.ufg.br
2
Tópicos da Anteriores
● Aula 01
● Razões para estudar conceitos de linguagens de 
programação
● Domínios de programação
● Critérios de avaliação da linguagem
3
Tópicos da Aula
● Influências sobre o projeto da linguagem
● Categorias de linguagem
● Balanço no projeto de linguagens
● Métodos de implementação
4
Influências sobre o Projeto da Linguagem
● Arquitetura do computador: linguagens são 
desenvolvidas em função da arquitetura mais 
atual (hoje von Neumann)
5
Influências sobre o Projeto da Linguagem
● Linguagens imperativas dominantes por causa da 
arquitetura
● Dados e programas mantidos na memória
● Memória separada da CPU
● Variáveis modelam células de memória
● Instruções e dados canalizados (piped) da memória para a 
CPU
6
Ciclo Fetch-Execute
● Iteração é eficiente
● Desencoraja o uso de recursão
● Impacto em linguagens funcionais
initialize the program counter
repeat forever
fetch the instruction pointed by the counter
increment the counter
decode the instruction
execute the instruction
end repeat
7
Influências sobre o Projeto da Linguagem
● Metodologias de programação: novas 
metodologias de desenvolvimento levam a 
novos paradigmas de programação e a 
extensões, ou mesmo novas linguagens de 
programação
● Orientação a objetos
8
Influências sobre o Projeto da Linguagem
● Anos 1950 e início dos anos 1960: aplicações simples; 
preocupação com a eficiência da máquina
● Fim dos anos 1960: eficiência das pessoas torna-se 
importante; legibilidade, melhores estruturas de controle
● Programação estruturada
● Projeto top-down e refinamento
● Fim dos anos 1970: orientação ao processo para orientação 
aos dados
● Abstração de dados
● Meados dos anos 1980: programação orientada a objetos
● Abstração de dados + herança + polimorfismo
9
Categorias de Linguagem
● Imperativa
● Características centrais são variáveis, declarações de 
atribuição, iteração
● Inclui as linguagens que suportam orientação a objetos
● Inclui linguagens de script
● Inclui linguagens visuais
● Exemplos: C, Java, Perl, JavaScript, Visual BASIC 
.NET, C++
10
Categorias de Linguagem
● Funcional
● Realiza computações aplicando funções aos parâmetros 
fornecidos
● Exemplos: LISP, Scheme
(defun triple (X)
 "Compute three times X." ; Inline comments can
 (* 3 X)) ; be placed here.
11
Categorias de Linguagem
● Lógica
● Baseada em regras (regras são especificadas sem 
uma ordem particular)
● Exemplo: Prolog
luz(acesa) :- interruptor(ligado).
ancestral(X,Y) :- mãe(X,Y).
ancestral(X,Y) :- pai(X,Y).
ancestral(X,Y) :- mãe(X,Z),ancestral(Z,Y).
ancestral(X,Y) :- pai(X,Z),ancestral(Z,Y).
12
Categorias de Linguagem
● Marcação/híbrida
● Linguagens de marcação (markup) estendidas para 
suportar programação
● Exemplos: JSTL, XSLT
13
JSTL
<c:choose>
 <c:when test="${EL_EXPR1}"> ... </c:when>
 <c:when test="${EL_EXPR2}"> ... </c:when>
 ...
 <c:otherwise> ... </c:otherwise>
</c:choose>
<c:forEach var="x" items="${M}" >
 ${x.key}: ${x.value}
</c:forEach>
<c:out value="EL-EXPRESSION" />
<c:set var="x" value="EL-EXPRESSION" />
<c:if test="EL-EXPRESSION" > ... </c:if>
14
Balanço no Projeto de Linguagens
● Confiabilidade vs Custo de execução
● Em Java todas as referências aos elementos de 
arrays são verificadas quanto à indexação correta. 
Isso aumenta os custos de execução.
15
Balanço no Projeto de Linguagens
● Legibilidade vs Redigibilidade
● APL fornece operadores muito poderosos (e um 
grande número de símbolos novos), permitindo que 
computações complexas sejam escritas em um 
programa compacto. No entanto, o custo da baixa 
legibilidade é alto.
 FATORIAL [ ]⎕ ∇
 Z ← FATORIAL N
[1] → (N ≠ 0) / A
[2] → 0,Z ← 1
[3] A:Z←N×FATORIAL(N-1)
 
16
Balanço no Projeto de Linguagens
● Redigibilidade vs Confiabilidade
● Ponteiros do C++ são poderosos e muito flexíveis, 
mas não são confiáveis. Java não adotou 
ponteiros.
● Alguns conflitos são óbvios, outros são mais 
sutis.
17
Métodos de Implementação
● Compilação
● Programas são traduzidos para a linguagem de 
máquina
● Interpretação pura
● Programas são interpretados por outro programa 
conhecido por interpretador
● Implementação híbrida
● Meio-termo entre os compiladores e os 
interpretadores.
18
Visão em Níveis
19
Compilação
● Traduz programas de alto nível (código fonte) 
para o código de máquina (linguagem de 
máquina)
● Tradução lenta, execução rápida
● Processo de compilação tem várias fases
20
Compilação
21
Compilação
22
Compilação
● Alguns compiladores C++ transformavam o 
código em C em vez de código intermediário
● Muitos compiladores são self-hosting, i. e., são 
escritos na própria linguagem que compilam
● Problema do “ovo e a galinha”?
● Técnica de bootstrapping
23
Interpretação Pura
● Não há tradução
● Implementação mais fácil de programas
● Erros em tempo de execução podem ser facilmente e 
imediatamente mostrados
● Execução mais lenta
● 10 a 100 vezes mais lenta que de programas compilados
● Requer mais espaço
● Atualmente pouco empregadas em linguagens de alto nível
● Uso com algumas linguagens de script para web
● Ex.: JavaScript e PHP
24
Implementação Híbrida
● Meio-termo entre compiladores e interpretadores puros
● Um programa em uma linguagem de alto nível é traduzido para 
uma linguagem intermediária que permita a interpretação fácil
● Mais rápido que a interpretação pura
● Programas em Perl são parcialmente compilados para 
detectar erros antes da interpretação
● Em Java, a forma intermediária (byte code) fornece 
portabilidade para qualquer máquina que tenha um 
interpretador e um sistema de execução
● Java Virtual Machine
25
Implementação Híbrida
26
JIT – Just-in-Time
● Inicialmente traduz os programas para uma linguagem 
intermediária
● É feita a compilação dos subprogramas (estão na 
linguagem intermediária) para código de máquina 
quando são chamados
● A versão em código de máquina é mantida para 
chamadas subsequentes
● Java e .NET oferecem compilador JIT
● Outras linguagens estão compilando para essas 
plataformas a fim de ter ganhos de portabilidade e 
desempenho
27
Pré-processadores
● Pré-processadores são normalmente usados para 
especificar que código de outro arquivo deve ser 
incluído
● Um pré-processador processa um programa 
imediatamente antes do programa ser compilado
● Exemplo conhecido: pré-processador C
● #include, #define, #if, etc.
● Macros do usuário
– Cuidado com efeito colateral!
28
Pré-processadores
#define dobro(x) (x + x)
x = 2;
y = dobro(++x);
#define calc(x, y) (x + y * 2)
z = calc(2, 1+5);
#define inc(x, y) x++; y++;
if (z > 10) inc(x, y)
29
Pré-processadores
#define dobro(x) (x + x)
x = 2;
y = dobro(++x);
#define dobro(x) (x + x)
x = 2;
y = (++x + ++x);
#define calc(x, y) (x + y * 2)
z = calc(2, 1+5);
#define calc(x, y) (x + y * 2)
z = (2 + 1+5 * 2);
#define inc(x, y) x++; y++;
if (z > 10) inc(x, y)
#define inc(x, y) x++; y++;
if (z > 10) x++; y++;
30
Resumo
● Influências sobre o projeto da linguagem
● Arquitetura e metodologia
● Categorias de linguagem
● Imperativa, funcional, lógica e marcação/híbrida
● Balanço no projeto de linguagens
● Combinar características conflitantes
● Métodos de Implementação
● Compilação, interpretação e híbrido
	Slide 1
	Tópicos da Anteriores
	Tópicos da Aula
	Influências sobre o Projeto da Linguagem
	Influências sobre o Projeto da Linguagem
	Ciclo Fetch-ExecuteInfluências sobre o Projeto da Linguagem
	Influências sobre o Projeto da Linguagem
	Categorias de Linguagem
	Categorias de Linguagem
	Categorias de Linguagem
	Categorias de Linguagem
	JSTL
	Balanço no Projeto de Linguagens
	Balanço no Projeto de Linguagens
	Balanço no Projeto de Linguagens
	Métodos de Implementação
	Visão em Níveis
	Compilação
	Compilação
	Compilação
	Compilação
	Interpretação Pura
	Implementação Híbrida
	Implementação Híbrida
	JIT – Just-in-Time
	Pré-processadores
	Pré-processadores
	Pré-processadores
	Resumo

Continue navegando