Buscar

plp-aula01-introducao

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 54 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 54 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 54 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

Paradigmas de 
Linguagens de 
Programação
Prof. Rodrigo Porfírio da Silva Sacchi
Bacharelado em Sistemas de Informação – UFGD
1º. Semestre de 2013
Horário: Sábado das 8:00h as 11:30h
Autora: Profª Valguima Odakura
 
Objetivos
 Reconhecer as características 
essenciais dos principais paradigmas 
de programação e das linguagens 
que implementam tais paradigmas.
 Ser capaz de selecionar o paradigma 
mais adequado para a resolução de 
um determinado problema 
computacional.
 
Plano de aula
 Introdução as linguagens de 
programação:
Revisão.
Princípios.
Paradigmas.
Implementações.
 
Revisão
 
Computador
 O que queremos dizer 
com a palavra 
“computador”?
O computador é uma 
máquina que 
armazena dados 
(números, palavras, 
figuras), interage com 
dispositivos (a tela do 
monitor, o sistema de 
som, a impressora) e 
executa programas.
 
Organização de um 
computador
Memória
CPU
Instruções 
e dados
Resultado das
operações
Dispositivos 
de E/S
Arquitetura de von Neumann
 
Programação
 Programação de computadores é o 
ato de projetar e implementar 
programas de computador.
 O programa determina a sequência 
de etapas necessárias para realizar 
uma tarefa – orienta o computador a 
executar tarefas.
 
Por baixo do seu programa
 Aplicações típicas, como processador de 
texto, podem consistir de milhões de linhas 
de código.
 No entanto, o hardware só pode executar 
instruções de baixo nível, extremamente 
simples.
 Ir de uma aplicação complexa até as 
instruções simples envolve várias camadas 
de software que interpretam ou traduzem 
operações de alto nível nas instruções 
simples do computador.
 
Por baixo do seu programa
 Essas camadas de software são 
organizadas de maneira hierárquica.
Aplicações
Software de Sistemas
Hardware
 
Por baixo do seu programa
 Software de sistemas: software que 
fornece serviços que normalmente são 
úteis, inclusive:
Sistemas operacionais e 
Compiladores.
 
Por baixo do seu programa
 Software de sistemas: 
Sistema operacional: programa de 
supervisão que gerencia os recursos de um 
computador para o benefício dos programas 
executados nessa máquina. Fornece 
interface entre o programa do usuário e o 
hardware e disponibiliza diversos serviços: 
• Manipular operações básicas de E/S.
• Alocar memória. 
• Possibilitar e controlar o compartilhamento do 
computador entre as diversas aplicações que 
o utilizam simultaneamente.
• Exemplos: Windows, Linux e MacOS.
 
Por baixo do seu programa
 Software de sistemas:
Compilador: um programa que 
traduz as instruções de linguagem de 
alto nível para instruções de 
linguagem que o hardware possa 
executar.
 
De linguagem de alto nível para 
a linguagem do hardware
 Uma máquina eletrônica recebe instruções 
através de sinais elétricos.
 Os sinais mais fáceis de serem entendidos 
são ligado e desligado.
 O alfabeto do computador é formado por 
números na base 2 (0 e 1).
 Dígito binário (bit): um dos dois números na 
base 2 que são componentes da informação.
 
De linguagem de alto nível para 
a linguagem do hardware
 Os primeiros programadores se comunicavam 
com os computadores em números binários.
 Depois inventaram novas notações mais 
parecidas com a maneira como os humanos 
pensam.
 Inventou-se programas para traduzir da 
notação simbólica para binário (no princípio, a 
tradução era feita manualmente).
 
De linguagem de alto nível para 
a linguagem do hardware
 Linguagem assembly – uma representação 
simbólica das instruções de máquina.
 O programador deve escrever uma linha para 
cada instrução que a máquina seguirá, 
obrigando o programador a pensar como a 
máquina.
 
De linguagem de alto nível para 
a linguagem do hardware
 Um programa que traduz uma versão 
simbólica de instruções para a versão 
binária é chamado montador 
(assembler):
add A, B
1000110010100000
 
De linguagem de alto nível para 
a linguagem do hardware
 “A descoberta de que um programa poderia 
ser escrito para traduzir uma linguagem mais 
poderosa em instruções de computador foi 
um dos mais importantes avanços nos 
primeiros dias da computação.” 
 
Abstração
 
De linguagem de alto nível para 
a linguagem do hardware
 Linguagem de programação de alto 
nível:
Uma linguagem como C, Fortran ou 
Java, composta de palavras e 
notação algébrica, que pode ser 
traduzida por um compilador para a 
linguagem assembly.
 
De linguagem de alto nível para 
a linguagem do hardware
 Vantagens das linguagens de alto nível:
 Permite que o programador pense em uma 
linguagem mais natural. 
 Maior produtividade do programador.
 Os programas são independentes do computador no 
qual elas são desenvolvidas, já que os compiladores 
e montadores podem traduzir programas de 
linguagem de alto nível para instruções binárias de 
qualquer máquina.
• Linguagens assembly e de máquina dependem 
da arquitetura específica do computador.
 
Perspectiva histórica
 O ENIAC, construído na Segunda Guerra Mundial, foi o 
primeiro computador de finalidade geral:
 Usado para calcular tabelas de disparo de artilharia.
 24 metros de comprimento por 2,5 metros de altura e dezenas 
de centímetros de profundidade.
 Cada um dos 20 registradores de 10 dígitos tinha 60 
centímetros de comprimento.
 Usava 18.000 válvulas.
 Efetuava 1.900 adições por segundo.
ENIAC – Eletronic Numeral 
Integrator and Computer
Projetado por J. Presper Eckert e 
John Mauchly na University of 
Pennsylvania e concluído em 
1946. 
 
Perspectiva histórica
 Atualmente os computadores de bolso:
 Iphone, ipad, ipod, tablets...
 
Paradigmas
 
Paradigmas
 Um paradigma de programação é um 
padrão de resolução de problemas que se 
relaciona a um determinado gênero de 
programas e linguagens. 
 Principais paradigmas:
Programação imperativa.
Programação orientada a objetos.
Programação funcional.
Programação lógica.
 
Programação Imperativa
 A programação imperativa é o paradigma 
mais antigo, fundamentado no modelo 
computacional clássico de von Neumman.
Comandos e variáveis são armazenados 
juntos.
O programa contém uma série de comandos 
para executar cálculos, atribuir valores a 
variáveis, obter entradas, produzir saídas ou 
redirecionar o controle para outro ponto 
nesse série de comandos.
 
Programação Imperativa
 São componentes da programação 
imperativa:
Abstração procedural, as atribuições, 
os laços, as sequências, os 
comandos condicionais e a 
manipulação de exceções.
 Exemplos de linguagens de 
programação imperativas:
Cobol, fortran, C, Ada e Perl.
 
Programação Orientada a 
objeto
 A programação Orientada a Objeto 
(POO) fornece um modelo no qual um 
programa é um coleção de objetos que 
interagem entre si, passando mensagens 
que transformam seu estado. 
 A classificação de objetos, herança e a 
passagem de mensagens são 
componentes fundamentais da POO.
 Exemplos de linguagens de POO:
Smalltalk, C++, Java e C#.
 
Programação funcional
 A programação funcional modela um 
problema como uma coleção de funções 
matemáticas, cada uma com um espaço de 
entrada (domínio) e resultado (faixa).
 Isso separa a programação funcional das 
linguagens que possuem o comando de 
atribuição:
 x = x + 1 (a atribuição não faz sentido na 
programação funcional ou na matemática).
 
Programação funcional
 As funções interagem e combinam 
entre si usando composição 
funcional, condições e recursão. 
 Exemplos de linguagens de 
programaçãofuncional são:
Lisp, Scheme, Haskell e ML.
 
Programação lógica
 A programação lógica (declarativa) 
permite a um programa modelar um 
problema declarando qual resultado o 
programa deve obter, em vez de como ele 
deve ser obtido.
 Interpretar as declarações de um programa 
lógico cria um conjunto de todas as 
soluções possíveis para o problema que ele 
especifica.
 A principal linguagem de programação 
lógica é o Prolog.
 
Métodos de 
Implementação
 
Métodos de implementação
 Qualquer implementação de uma 
linguagem de programação requer que os 
programas nessa linguagem sejam 
analisados e então traduzidos e um formato 
que possa ser:
Executado por um computador (uma 
máquina real).
Executado por um interpretador (um 
software que simule uma máquina virtual e 
seja executado em uma máquina real).
 
Métodos de implementação
 Compilação:
 Traduz programas de linguagens de alto nível para 
linguagem de máquina.
 Tradução lenta.
 Execução rápida.
 Interpretação:
 Programas são interpretados pelo interpretador sem 
a tradução. 
 Execução lenta.
 Sistemas de implementação híbrida:
 Traduzem linguagem de alto nível para uma 
linguagem intermediária projetada para se de fácil 
interpretação.
 Custo de translação baixo.
 Velocidade de execução média.
 
O processo da compilação
Resultados
Unidades
léxicas
Árvores de
análise
Código
intermediário 
Analisador
sintático
Gerador de código 
intermediário
Computador
Tabela de
símbolos
Analisador
léxico
Gerador de 
código 
Otimização
Programa
Fonte
Linguagem
de máquina
Dados de
entrada
Ex: Cobol, 
fortran, C e C+
+
 
Interpretação pura
Dados de
entrada
Resultados
Programa
fonte
Interpretador
Ex: LISP, 
JavaScript
 
Sistemas de implementação 
híbridos
Resultados
Unidades
léxicas
Árvores de
análise
Código
intermediário 
Analisador
sintático
Gerador de código 
intermediário
Analisador
léxico
Programa
Fonte
Dados de
entrada
Interpretador
Ex: Perl, Java
 
Critérios para 
avaliação da 
linguagem
 
Critérios de avaliação de 
linguagem
 Objetivo: examinar cuidadosamente 
os conceitos fundamentais das várias 
construções e da capacidade das 
linguagens de programação.
 
Critérios de avaliação de 
linguagem
 Legibilidade: facilidade com que os 
programas podem ser lidos e 
entendidos. 
Antes de 70 foco na escrita do código.
Na década de 70 foi desenvolvido o 
conceito de ciclo de vida do 
software → manutenção do software 
foi considerada importante.
 
Critérios de avaliação de 
linguagem
 Legibilidade:
Simplicidade global: uma linguagem com um 
grande número de componentes básicos é 
mais difícil de aprender do que com poucos 
desses componentes → programadores 
tendem a aprender subconjunto dela. 
Multiplicidade de recursos complica a 
legibilidade:
cont = cont + 1
cont += 1
cont++
++cont
 
 Operadores em C:
• Equivalentes:
cont = cont + 1
cont += 1
• Operador pós-fixo, incrementa cont depois de ser 
utilizado:
cont++
• Operador pré-fixo, incrementa cont antes de utilizar o 
seu valor :
++cont
 
Critérios de avaliação de 
linguagem
 Legibilidade: 
 Ortogonalidade: um conjunto relativamente pequeno de 
construções primitivas pode ser combinado em um 
número relativamente pequeno de maneiras para 
construir as estruturas de controle e de dados da 
linguagem. 
 Toda combinação possível de primitivas é legal e 
significativa.
• Ex: tipos primitivos (inteiro, real, caractere) e 
operador de tipo ponteiro. O ponteiro deve ser capaz 
de apontar para qualquer tipo de variável ou estrutura 
de dados.
• Falta de ortogonalidade acarreta exceções.
 
Critérios de avaliação de 
linguagem
 Legibilidade: 
 Instruções de controle:
• Revolução da programação estruturada da década 
de 70: uso indiscriminado de instruções goto.
• Programa lido de cima para baixo é mais fácil de 
entender do que o que exige do leitor pular de uma 
instrução a outra não adjacente.
• Ex: Basic e Fortran não tinham controle de goto.
• Restrições para instruções goto:
• Elas devem preceder seus alvos, exceto quando usadas 
para formar laços.
• Seus alvos nunca devem estar muito distantes.
• Seu número deve ser limitado.
 
Critérios de avaliação de 
linguagem
 Legibilidade: 
Tipos de dados e estruturas: 
• Ex: soma_e_muito_grande = 1
 soma_e_muito_grande = true
 (tipo booleano facilita legibilidade)
Considerações sobre a sintaxe: forma dos 
elementos.
• Palavras especiais (while, class, for): 
• Como formar grupo de instruções em construções de 
controle?
• Pascal: begin – end
• C: { }
• Fortran 90 e Ada: end if, end loop
• Simplicidade x legibilidade
 
Critérios de avaliação de 
linguagem
 Legibilidade: 
Considerações sobre a sintaxe:
• Forma e significado: projetar instruções, a fim de 
que sua aparência indique, pelo menos, 
parcialmente sua finalidade.
• A semântica deve seguir diretamente da sintaxe.
• Ex: static em C
• Na definição de uma variável dentro de uma função 
significa que a variável é criada no momento da 
compilação.
• Na definição de uma variável fora de todas as 
funções, significa que esta é visível somente no 
arquivo em que sua definição aparece.
 
Critérios de avaliação de 
linguagem
 Capacidade de escrita: medida de 
quão facilmente uma linguagem pode 
ser usada para criar programas para 
um domínio de problema escolhido.
Não é razoável comparar duas 
linguagens de programação no 
domínio de uma aplicação particular 
quando uma foi projetada para essa 
aplicação e a outra não.
 
Critérios de avaliação de 
linguagem
 Capacidade de escrita:
Simplicidade e ortogonalidade: 
número menor de construções 
primitivas e um conjunto consistente de 
regras para combiná-las é melhor do 
que um número grande de regras. 
Expressividade: linguagem ter formas 
convenientes de especificar 
computações:
• Ex: C cont++ é mais breve que cont = cont 
+ 1
 
Critérios de avaliação de 
linguagem
 Capacidade de escrita:
Suporte para abstração: capacidade de 
definir e, depois, usar estruturas ou operações 
complicadas de uma maneira que permita 
ignorar muitos dos detalhes.
Abstração de dados: árvore binária que 
armazena dados inteiros em seus vértices:
• Fortran 77 → 3 vetores de números inteiros, 
sendo dois para referenciar os vértices 
descendentes.
• C++ e Java → abstração de um vértice na 
forma de uma classe simples com 2 ponteiros 
e um número inteiro.
 
Critérios de avaliação de 
linguagem
 Capacidade de escrita:
Suporte para abstração: 
Abstração de processo: uso de um 
subprograma para implementar algoritmo de 
classificação exigido diversas vezes em um 
programa. Sem o subprograma, o código de 
classificação teria que ser replicado em todos 
os lugares necessários. 
 
Critérios de avaliação de 
linguagem
 Confiabilidade: um programa é confiável 
se ele se comportar seguindo suas 
especificações sob todas as condições.
Verificação de tipos: testar se existem 
erros de tipo, pelo compilador ou durante a 
execução.
Manipulação de exceções: capacidade de 
um programa de interceptar erros em tempo 
de execução, por em prática medidas 
corretivas e prosseguir.
• Ex: C++ e Java incluem essas facilidades. C 
e Fortran não.
 
Critérios de avaliação de 
linguagem
 Custo: o custo final de uma linguagem de 
programação é uma função de muitas de 
suas características:
Custo de treinamento de programadores 
para usar a linguagem:
• Simplicidade, ortogonalidade e experiência do 
programador.Custo de escrever programas na linguagem.
Custo para compilar programas na 
linguagem.
 
Critérios de avaliação de 
linguagem
 Custo:
Custo para executar programas:
• Se linguagem exige muitas verificações de 
tipo durante a execução torna o tempo de 
execução mais lento.
• Compiladores otimizam o código para 
aumentar velocidade de execução.
Custo de manutenção dos programas:
• Para grandes sistemas estima-se que o 
custo de manutenção pode atingir de duas 
a quatro vezes o custo de desenvolvimento. 
 
Critérios de avaliação de 
linguagem
 Os critérios de legibilidade, 
capacidade de escrita e confiabilidade 
não são precisamente definidos, nem 
exatamente mensuráveis. 
 No entanto, são conceitos úteis e 
fornecem valiosas avaliações sobre o 
projeto e sobre as linguagens de 
programação.
 
Referências Bibliográficas
 SEBESTA, Robert W. Conceitos de 
Linguagens de Programação. 5ª Edição. 
Bookman, 2003. Capítulo 1.
 MELO, Ana; Silva, Flávio. Princípios de 
Linguagem de Programação. Editora 
Edgard Blücher, 2003.
 TUCKER, A. NOONAN, R. Linguagens de 
Programação – Princípios e Paradigmas. 
Editora McGrawHill, 2009.

Outros materiais