You are on page 1of 78

Paradigmas de Linguagens de

Programao

PLP-2017
Prof. Dr. Ruiter Braga Caldas
Viso Geral de Linguagens
e
Paradigmas de Programao
Objetivos:
Apresentao dos conceitos das linguagens de programao
(LP) modernas;
Sintaxe e Semntica das LP;
Diferentes paradigmas de programao: Funcional,
Procedural, Orientao por Objetos e Lgico;
Estudo comparativo das LP;
Elementos das LP modernas: sistemas de tipos, estruturas de
dados e de controle, ambiente de execuo; reflexo;
programao de alta-ordem funcional, lgica e OO; meta-
programao;
Aspectos de projeto de LP.
Avaliao:
A avaliao ser feita com base em 2 (duas) listas de
exerccios (L1 e L2) e um trabalho prtico (TP) realizados
ao longo do perodo, concluindo com uma prova final (PF).
As duas 2 listas so com atividades prticas.
A Mdia Parcial (MP) ser calculada da seguinte maneira:
MP = (L1 + 2 L2 + 3 TP) / 6
A Mdia Final (MF) ser calculada a partir da seguinte
frmula:
MF = (2 MP + PF) / 3
Avaliao:
Segundo resoluo No. 023/2017- CONSEPE, considera-se
aprovado os alunos que atenderem aos dois critrios a
seguir:
Tiverem frequncia igual ou maior a 75% nas atividades
contidas no plano (equivale a um nmero mximo de 14
horas-aula de faltas, para esta disciplina)
Mdia final igual ou superior a 5,00 (cinco).
Ao aluno que conseguir alcanar a MEE igual ou superior a
8.00, fica facultado realizar a prova final, sem prejuzo da
nota da MF, em caso de no realizao da PF.
Bibliografia:

SEBESTA, Robert. Conceitos de


Linguagens de Programao. Editora
Bookman, 9a. ed., 2010.
Questes:
Trabalho? Turno? O que faz?
Qual foi a sua primeira linguagem e h quanto tempo?
Que linguagens voc conhece? Qual usa melhor?
Que conceitos abaixo voc acredita conhecer?
grafos, pilhas, expresses regulares, gramticas de livre contexto,
automatos, no determinismo, hashing, polimorfismo, lgica das
proposies/predicados, rvores, registradores, mquinas virtuais ,
sobrecarga, threads, conjuntos, assembler, garbage collection,
relaes, interpretadores/compiladores, shell script, checagem
esttica/dinmica de tipos, lock/semforos, quantificadores, funes
lambda, co-rotinas, reflexo, funo annima, coero
Paradigmas de Linguagens de
Programao

O termo paradigma significa modelo, isto , a definio de um


padro a ser seguido. Esse conceito, que nasceu em 1900 e
relacionava-se inicialmente somente linguagem e comunicao
humana, passou mais tarde a ser adotado tambm na Computao.
Um paradigma de programao, assim, determina a forma como o
programador deve estruturar as instrues em uma dada linguagem
a fim de gerar um programa capaz de executar uma determinada
tarefa.
Dois so os principais paradigmas da programao atualmente, a
programao imperativa e a programao declarativa, cada qual
sendo subdividida em novos paradigmas.
Captulo 1

Aspectos Preliminares
Conceitos de Linguagens de Programao Robert W. Sebesta

Tpicos do Captulo 1
Razes para estudar conceitos de linguagens de programao
Domnios de programao
Critrios de avaliao de linguagens
Influncias no projeto de linguagens
Categorias de linguagens
Trade-offs no projeto de linguagens
Mtodos de implementao
Ambientes de programao
Conceitos de Linguagens de Programao Robert W. Sebesta

Razes para estudar conceitos


de linguagens de programao
Capacidade aumentada para expressar ideias
Embasamento melhorado para escolher linguagens apropriadas
Habilidade aumentada para aprender novas linguagens
Melhor entendimento da importncia da implementao
Melhor uso de linguagens j conhecidas
Avano geral da computao
Conceitos de Linguagens de Programao Robert W. Sebesta

Razes para estudar conceitos


de linguagens de programao
Capacidade aumentada para expressar ideias
Conhecimento amplo dos recursos de linguagem reduz as
limitaes no desenvolvimento de software;
A melhor compreenso das funes e implementao das
estruturas de uma linguagem de programao nos leva a usar
a linguagem de modo a extrair o mximo de sua
funcionalidade e eficincia;
Recursos ou facilidades podem ser simulados.
Conceitos de Linguagens de Programao Robert W. Sebesta

Razes para estudar conceitos


de linguagens de programao
Embasamento melhorado para escolher linguagens apropriadas
Algumas linguagens so mais apropriadas para resolver
determinados problemas;
Escolher a melhor linguagem para um problema especfico
devido ao conhecimento de novos recursos difcil para:
Programadores antigos;
Desenvolvedores sem educao formal;
Conceitos de Linguagens de Programao Robert W. Sebesta

Razes para estudar conceitos


de linguagens de programao
Melhor entendimento da importncia da implementao
Leva a um entendimento do porqu das linguagens serem
projetadas de determinada maneiras
Melhora as escolhas que podemos fazer entre as linguagens
de programao e as consequncias das opes;
Nos permite desenvolver programas mais eficientes;
Conceitos de Linguagens de Programao Robert W. Sebesta

Razes para estudar conceitos


de linguagens de programao
Habilidade aumentada para aprender novas linguagens
Na computao, o aprendizado contnuo fundamental;
Compreender os conceitos gerais das linguagens torna mais
fcil entender como eles so incorporados na linguagem que
est sendo aprendida;
TIOBE Index for July 2017:
Conceitos de Linguagens de Programao Robert W. Sebesta

Razes para estudar conceitos


de linguagens de programao
Avano geral da computao
Nem sempre as linguagens mais populares so melhores, por
qu?
Imposio!
Por que existem vrias linguagens de programao?
Resoluo especfica de problemas.
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao
Aplicaes cientficas
Aplicaes empresariais
Inteligncia artificial
Programao de sistemas
Software para a Web
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao
Aplicaes cientficas
Os primeiros computadores que surgiram na dcada de 40 foram projetados e
utilizados para aplicaes cientificas.
Nesta categoria se enquadram todos os problemas que necessitam um grande
volume de processamento, com operaes geralmente feitas em ponto flutuante
e com poucas exigncias de entrada e sada.
Uma da preocupaes primarias neste tipo de aplicao a eficincia.
As aplicaes cientficas incentivaram a criao de algumas
linguagens de alto nvel, como por exemplo o Fortran:
program teste
real a, b, s
read *, a, b s=a+b
print *, a, ' + ' , b print *, ' = ' , s
end
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao
Aplicaes empresariais

O desenvolvimento de aplicaes comerciais teve inicio na


dcada de 50.

A primeira linguagem bem sucedida para o desenvolvimento de


aplicaes comerciais foi o COBOL (em 1960).

As linguagens de programao comerciais se caracterizam pela


facilidade de elaborar relatorios e armazenar numeros decimais
e dados de caracteres.
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao
Exemplo Cobol

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME PIC A(30).
01 WS-ID PIC 9(5) VALUE '12345'.

PROCEDURE DIVISION.
A000-FIRST-PARA.
DISPLAY 'Hello World'.
MOVE 'TutorialsPoint' TO WS-NAME.
DISPLAY "My name is : " WS-NAME.
DISPLAY "My ID is : " WS-ID.
STOP RUN.
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao

Inteligncia artificial
O desenvolvimento de aplicaes para inteligncia artificial teve inicio no
final da dcada de 50.
Essas aplicaes caracterizam-se pelo uso de computaes simbolicas em
vez de numricas (so manipulados nomes e no numeros);
A primeira linguagem desenvolvida para IA foi a funcional LISP (1959).
No incio dos anos 70 surge a programao logica: Prolog.
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao

Inteligncia artificial

Exemplo Lisp: Exemplo PROLOG:

(defun fatorial (num) pai(fred, marcos).


(cond ((zerop num) 1) pai(ricardo, pedro).
(t (* num (fatorial (- num 1)))) pai(pedro, paulo).
) avo(X,Y) :- pai(X, Z), pai(Z, Y).
)
(setq n 6) ?- avo(X, paulo).
(format t "Fatorial ~d = ~d" n (fatorial
n))
Conceitos de Linguagens de Programao Robert W. Sebesta

Domnios de programao
Programao de sistemas
O software bsico (sistema operacional) deve possuir eficincia na execuo
por propiciar suporte a execuo de outros aplicativos.
As linguagens de programao para este tipo de sistema devem oferecer
execuo rpida e ter recursos de baixo nvel que permitam ao software fazer
interface com os dispositivos externos.
O sistema operacional UNIX foi desenvolvido quase inteiramente em C
(tornando-o fcil de portar para diferentes mquinas).
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrios de avaliao de linguagens

Um dos criterios mais importantes para julgar uma


linguagem de programacao e a facilidade com que os
programas sao lidos e entendidos.

Antes dos anos 70: linguagens foram criadas pensado


em termos de escrita de codigo.
Ef ci iencia e legibilidade da maquina;
As linguagens foram projetadas mais do ponto de
vista do computador do que do usuario.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrios de avaliao de linguagens


Na decada de 70 foi desenvolvido o conceito de ciclo de
vida de software:
Projeto;
Implementacao;
Teste;
Verif icacao;
Manutencao do software;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrios de avaliao de linguagens


Legibilidade: facilidade com a qual os programas podem ser lidos
e entendidos
Facilidade de escrita: facilidade com a qual uma linguagem pode
ser usada para criar programas para um dado domnio
Confiabilidade: conformidade com as especificaes
Custo: o custo total definitivo de uma linguagem
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

A facilidade de manuteno determinada em grande parte,


pela legibilidade dos programas, dessa forma ela se tornou uma
medida importante da qualidade dos programas e das
linguagens.

A legibilidade deve ser considerada no contexto do domnio do


problema.
Um programa escrito em uma linguagem no apropriada para
o domnio do problema se mostra antinatural, "enrolado" e
difcil de ser lido.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Simplicidade geral
A simplicidade geral de uma linguagem de programao afeta
fortemente sua legibilidade;
Uma linguagem com um grande numero de componentes bsicos
mais difcil de ser manipulada do que uma com poucos desses
componentes.
Os programadores que precisam usar uma linguagem grande
tendem a aprender um subconjunto dela e ignorar seus outros
recursos.
Isso pode ser um problema quando o leitor do programa aprende
um conjunto diferente de recursos daquele que o autor aplicou em
seu programa.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Simplicidade geral
Uma segunda caracterstica que complica a legibilidade a
multiplicidade de recursos
(mais que uma maneira de realizar uma operao particular);
Exemplo em C:
count = count + 1 Mesmo significado
quando usadas em
count += 1 expresses separadas!
count++
++count
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Simplicidade geral
Um terceiro problema a sobrecarga de operadores, na qual
um unico smbolo tem mais que um significado.
Apesar de ser um recurso util, pode ser prejudicial a
legibilidade se for permitido aos usurios criar suas proprias
sobrecargas.
Exemplo: sobrecarregar o + para adicionar inteiros, reais,
concatenar strings, somar vetores...
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Simplicidade geral
A simplicidade de linguagens, no entanto pode ser levada ao
extremo, por exemplo a forma e o significado da maioria das
instrues em Assembly so modelos de simplicidade,
entretanto torna os programas em Assembly menos legveis.
Falta instrues de controle mais complexas, o que torna
necessrio o uso de mais comandos para expressar
problemas do que os necessrio em linguagens de alto nvel.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Exemplo Programa Assembly


section .text
mov edx,1
global _start
mov ebx,1
_start:
mov eax,4
mov eax,'3'
int 0x80
sub eax,'0'
mov eax,1
mov ebx,'4'
int 0x80
sub ebx,'0'
section .data
add eax,ebx
msg db "Resultado:",0xA,0xD
add eax,'0'
len equ $ - msg
mov [sum],eax
segment .bss
mov ecx,msg
sum resb 1
mov edx,len
mov ebx,1
mov eax,4
int 0x80
mov ecx,sum
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Ortogonalidade
A ortogonalidade diz respeito a possibilidade de combinar
entre si, sem restries, os componentes bsicos da
linguagem para construir estruturas de controle e dados.

Exemplo: permitir combinaes de estruturas de dados,


como arrays de estruturas;

Contra exemplo: no permitir que um array seja usado


como parmetro para uma funo;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Ortogonalidade
A linguagem C possui dois tipos de dados
estruturados, arrays e registros (struct), sendo que:

Registros podem ser retornados de funes,


arrays no.
Parmetros so passados por valor, a menos que
sejam arrays que obrigatoriamente so
passados por referncia.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Instrues de controle:
A revoluo da programao estruturada da dcada de 70 foi,
em parte, uma reao a m legibilidade causada pelas limitadas
instrues de controle das linguagens das dcadas de 50 e 60.
Reconheceu-se que o uso indiscriminado de instrues goto
reduz criticamente a legibilidade de programas.
Em certas linguagens, entretanto, instrues goto que se
ramificam para cima, as vezes, so necessrias;
Exemplo: goto usado na construo de laos while em
FORTRAN.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Instrues de controle:
Restringir instrues goto das seguintes maneiras pode tornar os
programas mais legveis:
As instrues goto devem preceder seus alvos, exceto
quando usadas para formar laos;
Os seus alvos nunca devem estar to distantes;
O numero de usos deve ser limitado;
A partir do final da dcada de 60, as linguagens projetadas
passaram a ter instrues de controle suficientes e portanto a
necessidade da instruo goto foi quase eliminada.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Tipos de dados e estruturas:


A presena de facilidades adequadas para definir tipos de
dados e estruturas de dados em uma linguagem outro
auxlio significativo para a legibilidade.
Exemplo: supondo que um tipo numrico seja usado
para um sinalizador porque no h nenhum tipo
booleano na linguagem:
terminou = 1, no to claro como terminou = true
Outro avano: tipos enumerados.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Consideraes sobre sintaxe:


A sintaxe ou a forma dos elementos de uma linguagem tem
um efeito significativo sobre a legibilidade dos programas.
Exemplos de opes de projeto sinttico que afetam a
legibilidade:
Formas identificadoras: restringir os identificadores a
tamanhos muitos pequenos prejudica a legibilidade,
impedindo que variveis sejam nomeadas com
nomes conotativos.
Exemplos:
FORTRAN77:mximo 6 caracteres;
BASIC ANSI: uma letra ou uma letra e um numero;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avalio: legibilidade

Consideraes sobre sintaxe:


Exemplos de opes de projeto sinttico que afetam a legibilidade:
Palavras especiais: a aparncia de um programa e sua
consequente legibilidade so fortemente influenciadas pelas formas
das palavras especiais de uma linguagem (begin, end, for...);
Exemplos: Pascal exige pares de begin/end para formar grupos em
todas as construes de controle, a linguagem C usa chaves;
Ambas as linguagens sofrem porque os grupos de instrues so
sempre encerrados da mesma maneira, o que torna difcil determinar
qual grupo est sendo finalizado quando um end ou } aparece;
O FORTAN 90 e o ADA tornam isso mais claro, usando uma sintaxe de
fechamento distinta para cada tipo de grupo de instruo. (if...end if /
loop...end loop);
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: facilidade de escrita


A capacidade de escrita a medida da facilidade em que
uma linguagem pode ser usada para criar programas para
um domnio de problema escolhido;

A maioria das caractersticas da linguagem que afetam a


legibilidade tambm afetam a capacidade de escrita;

Deve ser considerada no contexto do domnio de problema-


alvo da linguagem.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: facilidade de escrita

Construo de uma Interface Grfica:


Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: facilidade de escrita


Simplicidade e ortogonalidade:
Se uma linguagem de programao tem um grande numero
de construes, alguns programadores no estaro
familiarizados com todas;
Pode acarretar o uso incorreto de alguns recursos e uma
utilizao escassa de outros que podem ser mais elegantes
ou eficientes do que os usados;
Podem ocorrer usos de recursos desconhecidos com
resultados no esperados.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: facilidade de escrita


Suporte para abstrao:
Abstrao: capacidade de definir e, depois usar
estruturas ou operaes complicadas de uma maneira
que permita ignorar muito dos detalhes.
Exemplo: uso de funes provenientes de bibliotecas;
Tipos de Abstrao:
Abstrao de Processo: algoritmos em geral;
Abstrao de Dados: tipos de dados e estruturas de
dados.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: facilidade de escrita


Expressividade:
Formas convenientes de especificar computaes, onde
uma expresso representa muitas computaes.
Exemplos:
i++, ao invs de i = i + 1;
for ao invs do while;
cin do C++ ao invs de nextInt do Java

int v; int v;
cin >> v; Scanner entrada;
entrada = new Scanner(System.in);
v = entrada.nextInt();
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: confiabilidade


Um programa confiavel se ele se comportar de acordo
com suas especificaes sob todas as condies.

Recursos que afetam a confiabilidade:


Verificao de Tipos;
Manipulao de Excees;
Apelidos (Aliasing);
Legibilidade e Facilidade de Escrita;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: confiabilidade


Verificao de Tipos:
Visa testar se existem erros de tipos de dados no programa
por meio do compilador ou durante a execuo do
programa;
A verificao de tipos durante a compilao a mais
indicada. Quanto antes for detectado o erro, menos caro
fazer todos os reparos necessrios.
Exemplo:Java
A verificao de tipos em C bastante fraca:
int vet[50];
vet[100] = 8.5;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: confiabilidade


Manipulao de Excees:
Capacidade de um programa de interceptar erros em tempo
de execuo, por em prtica medidas corretivas e, depois,
prosseguir.
Exemplos em C++ e Java:

try {
try {
... }
... }
catch(Exception e)
catch (Exception &exception)
{
{
... }
... }
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: confiabilidade


Apelidos(Aliasing):
Consiste em ter um ou mais mtodos, ou nomes, distintos
para fazer referncia a mesma rea de memoria.
Exemplos em C:
union Data{
char c = 'x'; char *p; int i;
p = &c; float f;
*p = 'z'; char str[20];
};
union Data data;
data.i = 10;
data.f = 220.5;
strcpy(data.str, "Programa");
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: confiabilidade


Legibilidade e Facilidade de Escrita:

Tanto a legibilidade como a facilidade de escrita


influenciam a confiabilidade.
Quanto mais fcil escrever um programa, mais
probabilidade ele tem de estar correto.
Programas de difcil leitura complicam tambm sua escrita
e sua modificao.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: custo


Custo final de uma linguagem de programao uma
funo de muitas de suas caractersticas.

Custo de Treinamento: cresce em funo da


simplicidade e da ortogonalidade da linguagem e da
experincia dos programadores;

Custo da Escrita: Os esforos originais para projetar e


implementar linguagens de alto nvel foram motivados
pelos desejos de diminuir os custos para criar software;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: custo


Custo do Sistema de Implementao: uma linguagem
de programao cujo sistema de implementao seja
caro, ou rode somente em hardware caro, ter muito
menos chance de tornar-se popular;

Custo do Projeto da Linguagem: se uma linguagem de


programao exigir muitas verificaes de tipos durante
a execuo, proibir a execuo rpida do codigo;

Custo de Compilao: problema amenizado com o


surgimento de compiladores otimizados e de
processadores mais rpidos.
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: custo


Custo da M confiabilidade: falhas podem ocasionar
insucesso do software e aes judiciais;

Custo de Manuteno: depende principalmente da


legibilidade. O custo de manuteno pode atingir de
duas a quatro vezes o custo de desenvolvimento;
Conceitos de Linguagens de Programao Robert W. Sebesta

Critrio de avaliao: outros


Portabilidade
A facilidade com a qual os programas podem ser movidos de uma
implementao para outra
Generalidade
A aplicabilidade a uma ampla faixa de aplicaes
Bem definida
Em relao a completude e a preciso do documento oficial que
define a linguagem
Conceitos de Linguagens de Programao Robert W. Sebesta

Como Escolher uma Linguagem?


Implementao:
Disponibilidade quanto a plataforma;
Eficincia: velocidade de execuo do programa objeto;

Competncia:
Experincia do programador;
Competncia do grupo envolvido;

Portabilidade:
Necessidade de executar em vrias mquinas diferentes;
Conceitos de Linguagens de Programao Robert W. Sebesta

Como Escolher uma Linguagem?


Sintaxe:
Certos tipos de aplicao acomodam-se melhor em certas
sintaxes;

Semntica:
Algumas linguagens so mais adequadas para
processamento concorrente, outras so mais otimizadas para
recursividade;
Conceitos de Linguagens de Programao Robert W. Sebesta

Como Escolher uma Linguagem?

Ambiente de programao:
Ferramentas para desenvolvimento de software diminuem o
esforo de programao;
Existncia de bibliotecas;

Modelo de computao
O Paradigma Logico pode ser mais adequado para algumas
aplicaes de inteligncia artificial, enquanto que o
Paradigma Orientado a Objeto mais adequado para
aplicaes comerciais;
Conceitos de Linguagens de Programao Robert W. Sebesta

Influncias no projeto de linguagens


Arquitetura de computadores
Linguagens so projetadas considerando a principal arquitetura de
computadores, chamada de arquitetura de von Neumann
Metodologias de projeto de programas
Novas metodologias de desenvolvimento de software (por exemplo,
desenvolvimento de software orientado a objeto) levaram a novos
paradigmas de programao e, por extenso, a novas linguagens
de programao
Conceitos de Linguagens de Programao Robert W. Sebesta

Influncias na arquitetura de
computadores
Principal arquitetura de computadores: von Neumann
Linguagens imperativas, mais populares, por causa dos
computadores von Neumann
Dados e programas armazenados na memoria
A memoria separada da CPU
Instrues e dados so canalizadas a partir da memoria para CPU
Base para linguagens imperativas
Variveis modelam as clulas de memoria
Sentenas de atribuio so baseadas na operao de envio de dados
e instrues
Iterao eficiente
Conceitos de Linguagens de Programao Robert W. Sebesta

Arquitetura Von Neumann


Conceitos de Linguagens de Programao Robert W. Sebesta

Arquitetura Von Neumann


Ciclo de obteno e execuo (em um computador com
arquitetura
von Neumann)

inicialize o contador de programa


repita para sempre
obtenha a instruo apontada pelo contador de
programa
incremente o contador de programa
decodifique a instruo
execute a instruo
fim repita
Conceitos de Linguagens de Programao Robert W. Sebesta

Influncias na metodologia de programa


Anos 1950 e comeo dos 1960: Aplicaes simples; preocupao
com a eficincia da mquina
Final dos anos 60: Eficincia das pessoas se tornou importante;
legibilidade, melhores estruturas de controle
Programao estruturada
Projeto descendente (top-down) e de refinamento passo a passo
Final dos anos 70: Da orientao aos procedimentos para uma
orientao aos dados
Abstrao de dados
Meio dos anos 80: Programao orientada a objetos
Abstrao de dados + herana + vinculao dinmica de mtodos
Conceitos de Linguagens de Programao Robert W. Sebesta

Categorias de linguagens
Imperativa
Caractersticas centrais so variveis, sentenas de atribuio e de iterao
Inclui linguagens que suportam programao orientada a objeto
Inclui linguagens de scripting
Inclui as linguagens visuais
Exemplos: C, Java, Perl, JavaScript, Visual BASIC .NET, C++
Funcional
Principais meios de fazer os clculos pela aplicao de funes para determinados
parmetros
Exemplos: LISP, Scheme
Logica
Baseada em regras (regras so especificadas sem uma ordem em particular)
Example: Prolog
De marcao/programao hbrida
Linguagens de marcao estendida para suportar alguma programao
Exemplos: JSTL, XSLT
Conceitos de Linguagens de Programao Robert W. Sebesta

Trade-Offs no projeto de linguagens


Confiabilidade x custo de execuo
Exemplo: Java exige que todas as referncias aos elementos de um
vetor sejam verificadas para garantir que os ndices esto em suas
faixas legais
Legibilidade x facilidade de escrita
Exemplo: APL inclui um poderoso conjunto de operadores (e um
grande numero de novos smbolos), permitindo que computaes
complexas sejam escritas em um programa compacto, com o custo
de baixa legibilidade
Facilidade de escrita (flexibilidade) x confiabilidade
Exemplo: Ponteiros de C++ so poderosos e flexveis, mas no so
confiveis
Conceitos de Linguagens de Programao Robert W. Sebesta

Mtodos de implementao
Compilao
Programas so traduzidos para linguagem de mquina
Interpretao pura
Programas so interpretados por outro programa chamado
interpretador
Sistemas de implementao hbridos
Um meio termo entre os compiladores e os interpretadores puros
Conceitos de Linguagens de Programao Robert W. Sebesta

Viso em camadas de um computador


O Sistema operacional e
as implementaes de
linguagem so
colocados em camadas
superiores a interface de
linguagem de mquina
de um computador
Conceitos de Linguagens de Programao Robert W. Sebesta

Compilao
Traduz programas (linguagem de fonte) em codigo de mquina
(linguagem de mquina)
Traduo lenta, execuo rpida
Processo de compilao tem vrias fases:
anlise lxica: agrupa os caracteres do programa fonte em
unidades lxicas
anlise sinttica: transforma unidades lxicas em rvores de anlise
sinttica (parse trees), que representam a estrutura sinttica do
programa
anlise semntica: gera codigo intermedirio
gerao de codigo: codigo de mquina gerado
Conceitos de Linguagens de Programao Robert W. Sebesta

O processo de compilao
Conceitos de Linguagens de Programao Robert W. Sebesta

Terminologias de compilao adicionais


Mdulo de carga (imagem executvel): o codigo de usurio e de
sistema juntos
Ligao e carga: o processo de coletar programas de sistema e
lig-los aos programas de usurio
Conceitos de Linguagens de Programao Robert W. Sebesta

Gargalo de Von Neumann


A velocidade de conexo entre a memoria de um computador e
seu processador determina a velocidade do computador
Instrues de programa normalmente podem ser executadas mais
rapidamente do que a velocidade de conexo, o que resulta em
um gargalo
Conhecido como gargalo de von Neumann; o fator limitante
primrio na velocidade dos computadores
Conceitos de Linguagens de Programao Robert W. Sebesta

Interpretao pura
Sem traduo
Fcil implementao de programas (mensagens de erro em tempo
de execuo podem referenciar unidades de codigo fonte)
Execuo mais lenta (tempo de execuo de 10 a 100 vezes mais
lento do que nos sistemas compilados)
Geralmente requer mais espao
Raramente usada em linguagens de alto nvel
Volta significativa com algumas linguagens de scripting para a
Web (como JavaScript e PHP)
Conceitos de Linguagens de Programao Robert W. Sebesta

Processo de interpretao pura


Conceitos de Linguagens de Programao Robert W. Sebesta

Sistemas de implementao hbridos


Um meio termo entre os compiladores e os interpretadores puros
Uma linguagem de alto nvel traduzida para uma linguagem
intermediria que permite fcil interpretao
Mais rpido do que interpretao pura
Exemplos
Programas em Perl eram parcialmente compilados para detectar
erros antes da interpretao
As primeiras implementaes de Java eram todas hbridas; seu
formato intermedirio, byte code, fornece portabilidade para
qualquer mquina que tenha um interpretador de bytecodes e um
sistema de tempo de execuo associado (juntos, so chamados de
Mquina Virtual Java)
Conceitos de Linguagens de Programao Robert W. Sebesta

Sistema de implementao hbrido


Conceitos de Linguagens de Programao Robert W. Sebesta

Sistemas de implementao Just-in-Time


Inicialmente traduz os programas para uma linguagem
intermediria
Ento, compila os mtodos da linguagem intermediria para
linguagem de mquina quando esses so chamados
A verso em codigo de mquina mantida para chamadas
subsequentes
Sistemas JIT so agora usados amplamente para programas Java
As linguagens .NET tambm so implementadas com um sistema
JIT
Conceitos de Linguagens de Programao Robert W. Sebesta

Pr-processadores
As instrues de pr-processador so comumente usadas para
especificar que o codigo de outro arquivo deve ser includo
Um pr-processador um programa que processa um programa
imediatamente antes de o programa ser compilado para expandir
macros embutidos
Um exemplo conhecido: pr-processador de C
expande #include, #define e macros similares
Conceitos de Linguagens de Programao Robert W. Sebesta

Ambientes de programao
Coleo de ferramentas usadas no desenvolvimento de software
UNIX
Um ambiente de programao mais antigo
Agora bastante usado por meio de uma interface grfica com o
usurio (GUI) que roda sobre o UNIX
Microsoft Visual Studio .NET
Grande e complexo
Usado para desenvolver software em qualquer uma das cinco
linguagens .NET
NetBeans
Usado primariamente para o desenvolvimento de aplicaes Web
usando Java, mas tambm oferece suporte a JavaScript, Ruby e
PHP
Conceitos de Linguagens de Programao Robert W. Sebesta

Resumo
O estudo de linguagens de programao valioso por
diversas razes:
Aumenta nossa capacidade de usar diferentes construes
ao escrever programas
Permite que escolhamos linguagens para os projetos de
forma mais inteligente
Torna mais fcil o aprendizado de novas linguagens
Critrios mais importantes para a avaliao de linguagens:
Legibilidade, facilidade de escrita, confiabilidade e custo
geral
Conceitos de Linguagens de Programao Robert W. Sebesta

Resumo

As principais influncias no projeto de linguagens so a


arquitetura de mquina e as metodologias de projeto de
software

Os principais mtodos de implementar linguagens de


programao so a compilao, a interpretao pura e a
implementao hbrida

You might also like