Buscar

plp2014-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ª. Valguima Odakura 
Bacharelado em Sistemas de Informação – 
UFGD 
1º. Semestre de 2014 
Horário: Sábados das 8h-11h 
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 nessa 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ção 
funcional 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 ser 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.

Outros materiais