Buscar

Métodos de Implementação de Linguagens de Programação

Prévia do material em texto

Paradigmas de Linguagens
Aula 2 – Introdução aos paradigmas de 
linguagens
UFPB – Campus IV – 2018.1
Prof. Ana Liz
Prof. Wagner Emanoel Costa
Especificação de Linguagem de Programação
Ao se criar uma LP é necessário definir:
como escrever programas nessa linguagem 
como os programas válidos devem se comportar
Documentos descritivos que estabeleçam de 
maneira precisa como essas duas atividades devem 
ser realizadas
Tais documentos formam a especificação da LP
2
Especificação de Linguagem de Programação
A especificação de uma LP requer a descrição 
de:
Léxico
Sintaxe 
Semântica
3
Especificação de Linguagem de Programação
A especificação de uma LP requer a descrição 
de:
Léxico
vocabulário que pode ser utilizado para formar 
sentenças na linguagem.
Sintaxe 
Semântica
4
Especificação de Linguagem de Programação
A especificação de uma LP requer a descrição de:
Léxico
Sintaxe 
 conjunto de regras que determinam quais sentenças podem 
ser formadas a partir da combinação dos itens léxicos
léxico e sintaxe estão relacionados com a forma dos programas, 
isto é, como expressões, comandos, declarações e outros 
elementos da LP podem ser combinados para formar programas 
válidos. 
Semântica
5
Especificação de Linguagem de Programação
A especificação de uma LP requer a descrição 
de:
Léxico
Sintaxe 
Semântica
descreve como as construções sintaticamente 
corretas são interpretadas ou executadas. 
Define o significado dos programas, isto é, como eles 
se comportam quando executados por computadores
6
Exemplo – Comando em Python
a = b 
Léxico: a, = e b fazem parte do 
vocabulário da LP. 
Sintaxe: designa um comando válido de 
atribuição. 
Semântica: que este comando deve ser 
executado de modo a substituir o valor de a
pelo valor atual de b
7
Sintaxe e Semântica
A sintaxe de uma LP influencia como os 
programas são escritos pelo programador, 
lidos por outros programadores e analisados
pelo computador. 
A semântica de uma LP influencia como os 
programas são criados pelo programador, 
entendidos por outros programadores e 
interpretados pelo computador.
8
Gramática de uma LP
A sintaxe da LP é descrita por uma gramática
Ex de gramática para formação de expressões 
aritméticas elementares:
<expressão> ::= <valor>|<valor><operador><expressão> 
<valor> ::= <número>|<sinal><número> 
<número> ::= <semsinal>|<semsinal>.<semsinal> 
<semsinal> ::= <dígito>|<dígito><semsinal> 
<dígito> ::= 0|1|2|3|4|5|6|7|8|9
<sinal> ::= + | -
<operador> ::= +|-|/|* 
9
Padronização da linguagem
Necessidade de padronização
Quais elementos devem fazer parte da 
linguagem e como eles devem se comportar
Garantir portabilidade
Promovida por instituição especializada: 
ISO (International Standards Organization)
IEEE (Institute of Electrical and Electronics Engineers)
ANSI (American National Standards Institute) 
 NIST (National Institute for Standards and Technology)
10
MÉTODOS DE IMPLEMENTAÇÃO DE 
LPS
11
Métodos de Implementação de LPs
Todo programa é traduzido para a linguagem 
de máquina para ser executado. 
Programa tradutor determina como os 
programas na LP serão implementados 
Como o código fonte traduzido se comportará 
efetivamente quando executado no computador.
12
“Programa 
tradutor”
Código fonte
Código de 
Máquina
Métodos de Implementação de LPs
13
Compilação
Tradução integral do programa fonte para o 
código de máquina. 
Uma vez traduzido, o programa em 
linguagem de máquina pode ser executado 
diretamente
14
Compilação
Algol
C
C++
Commom Lisp
Delphi
Fortran
Ocaml
Pascal
Visual Basic
Visual Prolog
Ada
D
Cobol
15
Exemplos de linguagens compiladas
Compilação
Vantagens:
Otimização da eficiência na execução dos 
programas
Não é necessário fazer qualquer tradução durante a 
execução
Parte das verificações de erros já foram efetuadas 
durante a compilação
16
Compilação
Vantagens:
 Requerer apenas o código executável para 
execução do programa 
Não é necessário possuir o código fonte do programa 
para sua execução
17
Compilação
Desvantagens:
Não portabilidade do código executável para 
máquinas com arquitetura diferenciada na qual 
ele foi compilado. 
Ex: um programa em C compilado sobre o ambiente 
Linux não é executado sobre o ambiente Windows e 
vice-versa.
18
Compilação
Desvantagens:
Depuração 
O código executável normalmente não guarda 
referências ao texto do código fonte
Indicações de erro de execução não pode ser 
identificada com a informação da linha 
correspondente no código fonte que ocasiona o erro.
Entretanto já existem programas que permitem a 
depuração de programas compilados
19
Interpretação pura
Interpretador age como simulador de um pc 
virtual que entende as instruções da LP 
Cada instrução do código fonte é traduzida para 
linguagem de máquina quando ela é executada 
Imediatamente após a tradução, o código gerado é 
executado 
Na interpretação, não existe separação entre a 
tradução e execução
20
Exemplo de linguagens interpretadass
Interpretação
Action Script
Basic
JavaScript
Lisp 
Lua
PHP
ASP
Python
Ruby
Scheme
Smalltalk
21
Interpretação
Vantagens 
Facilidade para prototipação
Pode-se executar comandos e partes do programa 
assim que são construídos, verificando se atuam 
corretamente
Facilidade de depuração 
As mensagens de erro podem se referir diretamente a 
linha do código fonte 
22
Interpretação
Desvantagens 
Execução muito mais lenta do programa
Necessidade do interpretador:
• Decodificar comandos da LP
• Verificar erros do programa
• Gerar código em linguagem de máquina durante a própria execução 
do programa. 
Exemplo: estrutura de repetição
Na compilação os comandos internos de uma repetição só 
necessitam ser traduzidos e verificados uma única vez
Na interpretação pura, de modo geral, esse processo se repete 
para cada ciclo de execução da repetição. 
23
Interpretação
Desvantagens
Maior consumo de espaço de memória
Devem ser mantidos em memória uma tabela de 
símbolos, o código fonte e o próprio programa 
interpretador 
24
Híbrido (compilado e interpretado)
Processo que combina tanto a execução eficiente 
quanto a portabilidade de programas
Existência de um código intermediário, mais fácil 
de ser interpretado e não específico de uma 
plataforma computacional
Dividido em duas etapas: 
1. compilação para um código intermediário 
2. interpretação deste código
25
Híbrido
Vantagem: 
Código intermediário não é específico para uma 
plataforma
Programas já compilados para este código podem ser 
portados para diferentes plataformas sem necessidade 
de adaptação ou recompilação
 Necessário um interpretador do código 
intermediário instalado na plataforma onde se 
executará o programa
26
Exemplo: Java
O código intermediário é chamado de bytecode
O interpretador de bytecode é a JVM (JAVA Virtual 
Machine). 
Cada plataforma computacional necessita sua 
própria JVM para que o programa em bytecode
possa ser executado
27
28
Implementação de LPs - Comparação
 Compilação
Eficiência
Problemas com Portabilidade e Depuração
 Interpretação Pura
Flexibilidade, Portabilidade e Facilidade para Prototipação e
Depuração
Problemas com Eficiência e Maior Consumo de Memória
Raramente Usada
 Híbrido
Compromisso com as Vantagens e Desvantagens dos Outros Métodos
JVM
HISTÓRICO DAS LINGUAGENS DE 
PROGRAMAÇÃO
29
30
Evolução de LPs
Dificuldade de programação em linguagens de
máquina
Foco das primeiras linguagens era eficiência de
processamento e consumo de memória
Baixa Produtividade de Programação
Histórico das Linguagens de 
Programação
Década de 1960 
Programação baseada na arquitetura do hardware 
existente 
Computadores caros e inacessíveis 
Sequência de instruções 
Sem preocupação com reutilização de código 
3132
Origem de LPs
Exemplos de linguagens na década de 60:
FORTRAN (1957)
aplicações numéricas e científicas
LISP (1959)
programação funcional
ALGOL (1960)
programação estruturada e acadêmica
COBOL (1960)
aplicações comerciais
BASIC (1964)
ensino para leigos
Histórico das Linguagens de 
Programação
Década de 1970: surgimento da Engenharia de 
Software 
Abstração de dados: definição de tipos 
Abstração de controle: comandos, procedimentos 
Inicia preocupação com “programming in the large”: 
módulos e programação Estruturada
Equipe de programação
Cada membro da equipe tem um papel e desenvolve bem seu 
trabalho 
33
34
Origem de LPs
PASCAL (1971)
ensino de programação estruturada
simplicidade
C (1972)
 implementação de UNIX
PROLOG (1972)
 programação lógica
SMALLTALK (1972)
programação orientada a objetos
Histórico das Linguagens de 
Programação
Década de 1980: modularização 
Ênfase em mecanismos de LP e abstrações 
Correção de programas: verificação de tipos, 
exceções 
Programação concorrente e distribuída e tempo 
real 
Implementação de Tipos Abstratos de Dados
Programação orientada a objetos (herança) 
35
Histórico das Linguagens de 
Programação
Década de 1990: base na Arquitetura 
Estruturação de dados: encapsulamento 
Estruturação da computação: classe 
Estruturação do programa: classes e objetos 
Programação para Internet: plataforma neutra 
36
37
Origem de LPs
ADA (1983)
programação concorrente
Clipper (1984)
Uso diverso
C++ (1985)
disseminação da programação orientada a objetos
Python (1991)
JAVA (1995)
Commom Lisp (1994)
PARADIGMAS DE PROGRAMAÇÃO
Divisão clássica da literatura
Introdução 38
39
Paradigmas de LPs
Paradigmas 
Imperativo Declarativo
Estruturado Orientado a 
Objetos
Concorrente Funcional Lógico
Conjunto de características que servem para categorizar um grupo 
de linguagens
40
Paradigmas de LPs
Imperativo
Processo de mudanças de estados
Estado representa uma configuração qualquer da memória do
computador
Especificar como um processamento deve ser feito no
computador
Variável, Valor e Atribuição
Células de Memória
41
Paradigmas de LPs (imperativo)
Estruturado
Refinamentos 
sucessivos
Blocos aninhados 
de comandos
Desestímulo ao uso 
de desvio 
incondicional
def is_prime(number):
divisors = 0
for n in xrange(2, 
number):
if number % n == 0:
divisors += 1
if divisors:
return False
return True
42
Paradigmas de LPs (imperativo)
Orientado a Objetos
Abstração de Dados
 Classes
Abstrações que definem uma estrutura de dados e
um conjunto de operações que podem ser
realizadas sobre elas (métodos).
Objetos são instâncias de classes
43
Paradigmas de LPs (imperativo)
Concorrente
Processos executam simultaneamente e concorrem por
recursos
Podem utilizar uma única unidade de processamento
ou várias unidades em paralelo (mesmo pc ou distribuído)
Multi Processos
Conceito de thread
44
Paradigmas de LPs (imperativo)
Concorrente (conceito de thread)
Paradigmas de LPs (imperativo)
Concorrente
Servidores costumam ser multithreads ou 
multiprocesso
Ex: Servidores Web e de RPC
Quando um servidor recebe uma mensagem, ele atende a essa 
mensagem usando uma thread separada
Permite que o servidor atenda várias requisições simultâneas
Editor de texto
Threads para exibir gráfico, fazer correção ortográfica, ler 
teclado
45
46
Paradigmas de LPs
Declarativo
Especificações sobre a Tarefa a Ser Realizada
Abstrai-se de Como o Computador é Implementado
Em geral, não existem atribuições a variáveis dos
programas
As variáveis declarativas são incógnitas e não
representam células de memória
47
Paradigmas de LPs (Declarativo)
Lógico
Predicados
Dedução Automática
Exemplo de código em Prolog:
cachorro(pluto)
cachorro(snoop)
?- cachorro(X)
X = pluto;
X = snoop;
false 
48
Paradigmas de LPs (Declarativo)
Funcional
Operam apenas sobre funções que recebem listas de
valores e retornam um valor
Define uma função que retorne um valor como a
resposta do problema.
Um programa funcional é uma chamada de função que
normalmente chama outras funções para gerar um valor
de retorno.
Uso de recursão
49
Paradigmas de LPs (Declarativo)
Funcional
Exemplo de código Commom Lisp:
 Ex1 - imprimir soma:
(print (+ 3 4 5 6) )
Resultado: 18
 Ex2- função quadrado:
(defun quadrado (x)
(print(* x x))
)
Referência
VAREJÃO, Flávio Miguel. Linguagens de 
programação java, C e C++ e outras: 
conceitos e técnicas. Rio de Janeiro: Elsevier, 
2004.
50

Continue navegando