Buscar

PLP aula 1

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 77 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 77 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 77 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 Programação
UNIFACS
Prof. Sergio Martins Fernandes
sergio.fernandes@unifacs,br
71 99958-0897 (WhatsApp)
Sobre	a	disciplina
• Objetivos
– Apresentar	os	conceitos	fundamentais	de	linguagens	de	programação
– Fornecer	elementos	que	permitam	avaliar	uma	linguagem	de	programação,	bem	
como	a	sua	aplicabilidade	de	acordo	com	a	natureza	do	problema
• Ementa
– Visão	Geral	Sobre	o	Tema;
– Evolução	das	Principais	Linguagens	de	Programação;
– Nomes,	Vinculações,	Verificação	de	Tipos	e	Escopos;
– Tipos	de	Dados;
– Expressões	e	Instruções	de	Atribuição;
– Estruturas	de	Controle;
– Subprogramas;
– Tipos	de	Dados	Abstratos;
– Programação	Orientada	a	Objeto;
– Programação	Funcional;
– Programação	Lógica,	
Bibliografia	básica
Avaliações 
• Avaliação	intermediária
– Prova	individual	(valendo	8)	+	trabalho	em	dupla	
(valendo	2)
• Avaliação	de	final	de	período
– Prova	individual	(valendo	8)	+	trabalho	em	dupla	
(valendo	2)
Paradigmas de Linguagens de Programação – Sergio Fernandes
Roteiro da Aula
• Introdução
• Plankalkül de Zuse
• Programação de hardware mínima: pseudocódigos
• O IBM 704 e Fortran
• Programação funcional: LISP
• O primeiro passo em direção à sofisticação: ALGOL 60
• Informatizando os registros comerciais: COBOL
• Programação de Sistemas: C
• Tudo para todos: PL/I
• Linguagem dinâmica: APL
• O início da abstração de dados: SIMULA 67
• Projeto ortogonal: ALGOL 68
• Programação baseada em lógica: Prolog
• Programação orientada a objetos: Smalltalk
• Combinando recursos imperativos e orientados a objetos: C++
• Uma linguagem orientada a objetos baseada no paradigma imperativo: Java
• Linguagens de scripting
• Uma linguagem baseada em C para o novo milênio: C#
• Linguagens híbridas de marcação/programação
Computador ENIAC – novembro 1945
• Electronic	
Numerical	
Integrator	and	
Computer
• 18	mil	válvulas
• 70	mil	resistores
• 10	mil	capacitores
• 6	mil	switches	
• 1500	relays
• 162	m2
• 5000	operações	
por	segundo
Paradigmas de Linguagens de Programação – Sergio Fernandes
Contexto 
•Computadores dos anos 40 e 50 eram MUITO 
menos utilizáveis que os atuais
– Lentos, não confiáveis, caros, memórias extremamente 
pequenas, 
– Sem software para suportar a programação
– Programação feita exclusivamente em código de máquina
• Tedioso
• Sujeito a erros
• Baixa legibilidade
• Uso de endereços absolutos de memória
– Caso o programa foi alterado, com inclusão ou exclusão de linhas, todos os 
endereços tinham que ser modificados
Paradigmas de Linguagens de Programação – Sergio Fernandes
Genealogia das principais linguagens 
de programação
Paradigmas de Linguagens de Programação – Sergio Fernandes
Por que tantas linguagens?
• Propósitos diferentes
• Avanços tecnológicos
• Interesses comercias
• Cultura e conhecimento científico
9
Evolução centrada em níveis crescentes de 
abstração
• Linguagens	de	máquina
– Endereços	físicos	e	códigos	de	operações	
• Linguagens	Assembly	(de	montagem)
– Mnemônicos	e	labels	(rótulos)	simbólicos
• Linguagens	de	“alto	nível”
– Variáveis	e	atribuição	(versus	acesso	direto	à	memória)
– Estruturas	de	dados	(versus	estruturas	de	
armazenamento)
10
Linguagens de máquina
• Programacão	em	linguagens	de	máquina
üUma forma de escrever um programa é atribuir um valor 
binário a cada instrução e representar o programa como uma 
sequência dessas instruções binárias
üUm programa desse tipo é chamado Programa em 
Linguagem de Máquina, ou programa objeto
Exemplo:
0011 1110 ;	Carregue	o	registrador	A	com	o
0000 0101 ;	valor	5
0000 0110 ;	Carregue	o	registrador	B		com	o
0000 0110 ;	valor	10
1000 0000 ;	A		<- A		+		B
0011 1010 ;	armazene	o	resultado
0110 0100 ;	na	posição	de	memória	
0000 0000 ;	cujo	endereço	é	100
0110 0110 ;	encerre	o	processamento
Linguagem de programação de montagem 
(assembly)
• Uso	de	símbolos	na	programação	para	melhorar	a	
legibilidade
• Dar	nomes	simbólicos	a	cada	instrução
• Esses	nomes	são	chamados	mneumônicos	e	um	
programa	escrito	usando	esses	símbolos	é	
chamado	programa	em	linguagem	de	máquina
Exemplo:
• LOAD			A,	5 ;	load	reg	A	com	5
• LOAD				B,	10 ;	load	reg	B	com	10
• ADD		A,	B ;	A	=	A	+	B
• LOAD		(100),	A ;	salvar	o	resultado	no	end.	100
• HALT ;	Encerrrar	o	processamento
Paradigmas de Linguagens de Programação – Sergio Fernandes
Evolução centrada em níveis crescentes de 
abstração
– Estruturas de controle (versus jumps e gotos)
– Estrutura de blocos como forma de encapsulamento
– Generalização e parametrização (abstração de tipos 
de valores)
15
Plankalkül de Zuse
• Plankalkül =	programas	de	cálculos	em	alemão
• Autor	da	linguagem:	Konrad	Zuse
• Desenvolvida	em	1945,	mas	não	publicada	até	1972
• Nunca	foi	implementada
• Estruturas	de	dados	avançadas
– Ponto flutuante, vetores, registros (que poderiam incluir registros aninhados)
• Comando	semelhante	ao	FOR	(iteração)
• A	descrição	da	linguagem	contemplava	também	diversos	
algoritmos	escritos	em	Plankalkül
– Ordenação de vetores de números
– Operações com inteiros e ponto flutuante, inclusive raiz quadrada
– ...
Paradigmas de Linguagens de Programação – Sergio Fernandes
Sintaxe de Plankalkül
• Sentenças em Plankalkül possuiam duas a três linhas de código
• Uma sentença de atribuição que atribui o valor da expressão A[4] + 1 
para A[5] 
| A + 1 => A
V | 4 5 (índices)
S | 1.n 1.n (tipos de dados)
Paradigmas de Linguagens de Programação – Sergio Fernandes
Programação de Hardware Mínima: 
Pseudocódigos
• Pseudocódigo é o nome genérico de linguagens de programação surgidas no 
final dos anos 40, começo dos anos 50
– Não o significado que atualmente se atribui ao termo
• Antes das linguagens Pseudocódigo: O que estava errado ao usar código de 
máquina?
– Baixa legibilidade
• Instruções eram especificadas através de códigos numéricos
• Exemplo: código 14 = Add
– Endereçamento de memória em termos absolutos tornava as modificações de 
programas tediosas e passíveis de erros
• Inserir uma instrução no meio do programa tornavam necessário corrigir os endereços 
referenciados por todas as outras instruções subsequentes
– Deficiências de máquina – sem indexação ou ponto-flutuante
• Recursos necessários pela maior parte dos programas da época
• Motivação para o desenvolvimento de linguagens um pouco mais alto nível
Paradigmas de Linguagens de Programação – Sergio Fernandes
Pseudocódigos: Short Code 
• Short Code foi desenvolvida por John Mauchly em 1949 para o computador 
BINAC 
– Posteriormente portada para o UNIVAC 1, o primeiro computador comercial 
vendido nos Estados Unidos
– Expressões foram codificadas
• E não mais escritas em código binário de baixo nível
• Exemplo:
01 - 06 abs value 1n (n+2)nd power
02 ) 07 + 2n (n+2)nd root
03 = 08 pause 4n if <= n
04 / 09 ( 58 print and tab
– Variáveis eram denominadas em códigos de dois bytes (X0, Y0, por exemplo)
– A Linguagem era interpretada, não compilada, o que a tornava 50 vezes mais 
lenta que a execução em código de máquina
– Exemplo:
• Dadas as variáveis X0 e Y0, a expressão X0 = SQRT(ABS(Y0)) seria codificada assim
00 X0 03 20 06 Y0
Paradigmas de Linguagens de Programação – Sergio Fernandes
Pseudocódigos: Speedcoding
• Speedcoding foi desenvolvido por John Backus em 1954 para 
o IBM 701
– Transformava o computador numa calculador virtual de ponto flutuante 
de 3 endereços
• Resolvia problema fundamental das linguagens de máquina
– Pseudoinstruções para operações aritméticas e funções matemáticas
– Desvios condicionais e incondicionais
– Facilidade para incrementar os registradores de endereço 
automaticamente
– Memória usável restante após carregar o interpretador de apenas 700 
palavrasParadigmas de Linguagens de Programação – Sergio Fernandes
Pseudocódigos: Trabalhos relacionados
• O sistema de “compilação” da UNIVAC
– Desenvolvido por uma equipe liderada por Grace Hopper
– Pseudocódigo expandido em código de máquina
• Da mesma forma que as macros são expandidas em linguagem de montagem
– Abordava baixo desempenho das linguagens interpretadas pseudocódigo
• David J. Wheeler (Universidade de Cambridge) 
– Desenvolveu um método de usar blocos de endereços realocáveis para 
resolver parcialmente o problema do endereçamento absoluto
Paradigmas de Linguagens de Programação – Sergio Fernandes
IBM 704 e Fortran
• Fortran 0: 1954 – não implementado
• Fortran I: 1957
– Primeira linguagem de alto nível, compilada, para ambiente comercial
– Desenvolvido para o IBM 704, que tinha registros de indexação e cálculo 
de ponto-flutuante em hardware
• Até então, cálculo de operações de ponto flutuante era efetuado em software
– Isso demandava um tempo enorme, em relação a qual o tempo gasto com a interpretação do código se tornava 
insignificante – por isso a demanda por compilação das linguagens não era significativa
– Levou à ideia de linguagens de programação compiladas, porque não 
havia o “esconderijo” para o custo da interpretação
– Ambiente no qual a linguagem Fortran foi desenvolvida:
• Computadores com memórias pequenas, e não confiáveis
• Aplicações eram científicas
• Não havia maneiras eficientes de programar computadores
• Velocidade do código objeto era o objetivo principal
– Pois o custo dos computadores era muito superior ao custo dos programadores
Paradigmas de Linguagens de Programação – Sergio Fernandes
Visão geral de Fortran I
• Primeira versão implementada do Fortran
– Nomes de variáveis podem ter até seis caracteres
– Sentença de repetição (DO)
– Formatação de entrada e saída
– Sub-rotinas definidas pelos usuários
– Sentença de seleção IF
– Não há declaração de tipos de variáveis
• Variáveis cujo nome começa com i, j, k, l, m, n são inteiras
• As demais são de ponto flutuante
Paradigmas de Linguagens de Programação – Sergio Fernandes
Visão geral de Fortran I
• Primeira versão implementada do FORTRAN 
– Sem compilação separada para os subprogramas
– Compilador lançado em abril de 1957
– Programas com mais de 400 linhas raramente são compilados 
corretamente, especialmente devido à pouca confiabilidade do 704
– O código era muito rápido – para a época
– Rapidamente se tornou amplamente usada
Paradigmas de Linguagens de Programação – Sergio Fernandes
Fortran II
• Distribuído em 1958
– Compilação independente de subrotinas / subprogramas
• Evolução mais importante, porque, sem esse recurso, qualquer alteração em um 
programa implicaria em que todo ele deveria ser recompilado
• Essa capacidade reduziu consideravelmente o processo de compilação
– Muito relevante, devido também ‘a baixa confiabilidade do hardware
– Corrigiu falhas
Paradigmas de Linguagens de Programação – Sergio Fernandes
Fortran IV
• Evoluiu entre 1960-62
– Declarações de tipo explícitas
– Sentenças de controle de laços lógicos (if)
– Nomes de subprogramas podem ser parâmetros
– Padrão ANSI em 1966
Fortran 77
• Tornou-se	o	novo	padrão	em	1978
– Manipulação de cadeias (strings) de caracteres
– Sentenças de controle de laços lógicos
– Um If com uma cláusula opcional Else
Exemplo de código em Fortran 77
SUBROUTINE	SUB1(X,DUMSUB)
INTEGER	N,	X,	Y
EXTERNAL	DUMSUB
COMMON	/GLOBALS/	N
Y	=	0
IF(X	.LT.	N)THEN
X	=	X	+	1
Y	=	X**2
PRINT	*,	'x	=	',	X,	',	y	=	',	Y
CALL	DUMSUB(X,DUMSUB)
PRINT	*,	'x	=	',	X,	',	y	=	',	Y
END	IF
END
• Exemplo	de	código
PROGRAM	MAIN
INTEGER	N,	X
EXTERNAL	SUB1
COMMON	/GLOBALS/	N
X	=	0
PRINT	*,	'Enter	number	of	
repeats'
READ	(*,*)	N
CALL	SUB1(X,SUB1)
END
Paradigmas de Linguagens de Programação – Sergio Fernandes
Fortran 90
• Drasticamente diferente do Fortran 77
– Módulos
– Vetores dinâmicos
• A alocação dinâmica é feita em tempo de execução
• Isto permite que o espaço em memória seja alocado apenas quando necessário
• Além disso, a alocação dinâmica permite aumentar ou até diminuir a quantidade de 
memória alocada.
– Ponteiros
– Registros
– Sentença CASE
– Parâmetro de verificação de tipo
• Houveram versões posteriores ao Fortran 90, mas alterações não foram 
muito significativas
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação de Fortran
• Compiladores altamente otimizados (todas as versões antes de 90)
– Tipos e armazenamento para todas as variáveis são fixados antes 
da execução
• Mudou drasticamente para sempre a forma como os computadores 
são usados
• Caracterizada como a língua franca do mundo da computação
Paradigmas de Linguagens de Programação – Sergio Fernandes
O Primeiro Passo em Direção à Sofisticação: 
ALGOL
• Ambiente de desenvolvimento
– FORTRAN chegou (apenas) para IBM 700
– Várias outras linguagens foram desenvolvidas, todas para máquinas 
específicas, e arquiteturas específicas
• A comunicação entre os usuários se tornou difícil
– Nenhuma linguagem universal para comunicação de algoritmos
– Nenhuma linguagem portátil; todas eram dependentes das máquinas
• ALGOL foi o resultado dos esforços para criar uma linguagem universal
Paradigmas de Linguagens de Programação – Sergio Fernandes
Processo do projeto inicial
• ACM (americana) e GAMM (européia) se reuniram por quatro dias em 
Zurique (de 27 de maio a 1º de junho de 1958)
• Essa reunião definiu os objetivos da linguagem:
– Ser o mais próxima possível da notação padrão matemática
– Programas legíveis, com necessidade de pouca explicação adicional
– Boa para a descrição de algoritmos em publicações acadêmicas ou da 
indústria
– Ser traduzível em código de máquina
Paradigmas de Linguagens de Programação – Sergio Fernandes
ALGOL 58
• Descendente do Fortran
– Generalizou muitos recursos do Fortran
– Adicionou novas construções e conceitos
• Para não amarrar a linguagem a nenhuma máquina em particular
• Para torná-la mais flexível e poderosa
• Formalizou o conceito de tipo de dados
• Mas apenas variáveis que não fossem de ponto flutuante deveriam ser 
explicitamente declaradas
• Identificadores podiam ter qualquer tamanho
• O limite inferior dos vetores podia ser especificado pelo programador
• Sentenças de seleção aninhadas eram permitidas
• Declarações compostas (begin ... end)
• Vírgula como separador de declarações
• Operador de atribuição era :=
• if tinha uma cláusula else-if
Paradigmas de Linguagens de Programação – Sergio Fernandes
Implementação do ALGOL 58
• Não pretendia ser um produto finalizado para implementação, mas 
variações dele foram (MAD, JOVIAL)
• Embora a IBM tenha sido inicialmente entusiasta, todo o suporte foi 
descontinuado em meados de 1959
– Por conta do investimento já efetuado na linguagem Fortran
Paradigmas de Linguagens de Programação – Sergio Fernandes
Visão geral do ALGOL 60
• Modificação do ALGOL 58 em seis dias de encontros em Paris
• Novos recursos
– Estrutura de bloco (escopo local)
– Duas formas diferentes de passagem de parâmetros a subprogramas
• Por nome e por valor
– Procedimentos recursivos
– Vetores dinâmicos na pilha
• Dimensões do vetor definidas em variáveis, e alocação só ocorre em tempo de 
execução
– Ainda sem sentenças de entrada e saída e sem manipulação de strings
• Consequentemente, entrada e saída dependentes de implementação
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação do ALGOL 60
• Sucessos
– Única maneira formal aceitável de comunicar algoritmos por mais 
de 20 anos
– Todas as linguagens de programação imperativas desde 60 são 
baseadas nela
– Primeira linguagem independente de máquina 
– Primeira linguagem cuja sintaxe foi formalmentedescrita em Backus-Naur 
Form (BNF)
• Meta linguagem criada naquale momento por Backus e levemente modificada por Naur, 
para descrição formal de linguagens de programação
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação do ALGOL 60
• Fracassos
– Nunca atingiu uso disseminado, especialmente nos Estados Unidos
– Motivos
• Entrada e saída dependentes de implementação fizeram com que os 
programas tivessem uma portabilidade ruim
• Muito flexível – difícil de implementar
• Forte estabelecimento de Fortran
• Descrição formal de sintaxe
– Hoje vista como um ponto forte da linguagem, mas na época considerada complexa
• Falta de apoio da IBM
Exemplo de código em ALGOL 60
procedure	Absmax(a)	Size:(n,	m)	Result:(y)	Subscripts:(i,	k);
value n,	m;	array a;	integer n,	m,	i,	k;	real	y;
comment The	absolute greatest element of the matrix a,	of size n by m
is transferred to y,	and the subscripts of this element to i and k;
begin integer p,	q;
y :=	0;	i :=	k :=	1;
for	p:=1	step 1	until n do
for	q:=1	step 1	until m	do
if abs(a[p,	q])	>	y then
begin y :=	abs(a[p,	q]);
i :=	p;	k :=	q
end
end Absmax
Paradigmas de Linguagens de Programação – Sergio Fernandes
Informatizando os Registros Comerciais: 
COBOL
• Ambiente de desenvolvimento
– UNIVAC estava começando a usar FLOW-MATIC
• Linguagem comercial compilada para aplicações comerciais
• Linguagem proprietária da UNIVAC, concorrente da IBM
• FLOW-MATIC influenciou a linguagem COBOL
– USAF (força aérea americana) estava começando a usar AIMACO
– IBM estava desenvolvendo COMTRAN
• Havia o design, mas não ainda a implementação
Paradigmas de Linguagens de Programação – Sergio Fernandes
Perspectiva história do COBOL
• Baseado em FLOW-MATIC
• Características de FLOW-MATIC 
– Nomes com mais de 12 caracteres, com hifens
– Nomes em inglês para operações aritméticas (sem expressões 
aritméticas)
• Com base na premissa que linguagens científicas deveriam ter notação matemática, e 
linguagens comerciais deveriam ser notação em inglês
– Premissa revolucionária na época
– Dados e código eram completamente separados
– A primeira palavra em cada sentença era um verbo
Paradigmas de Linguagens de Programação – Sergio Fernandes
O processo do projeto do COBOL
• Primeira reunião (no Pentágono) – Maio de 1959
• Objetivos
– Utlizar o inglês o máximo possível
– Ser fácil de usar, mesmo ao custo de ser menos poderosa
• Ampliar a base de usuários de computador
– Não ser orientada pelos problemas atuais do compilador
• Membros da comissão do projeto foram fabricantes de computadores e 
membros do Departamento de Defesa Americano (DoD)
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação do COBOL
• Contribuições
– Primeira construção para macros de uma linguagem de alto nível
• Trecho de código definido num ponto do programa e referenciado em outros pontos
• Ao se referenciar a macro, o código definido previamente é incorporado no ponto em 
que é referenciado, em tempo de compilação
– Estruturas de dados hierárquicas (registros)
– Sentenças de seleção aninhadas
– Nomes longos (até 30 caracteres), com hifens
– Divisão de dados (data division)
• Nesta divisão são definidos os registros dos arquivos manipulados pelo programa
• E variáveis internas, que também podem ser estruturas de dados
Paradigmas de Linguagens de Programação – Sergio Fernandes
COBOL: influência do DoD
• Primeira linguagem requerida pelo DoD
– Teria falhado sem o DoD
• Pois os primeiros compiladores eram muito ineficientes
• Posteriormente os compiladores foram aprimorados
• Ainda assim, o idioma mais utilizado em aplicações de negócios
Exemplo de código COBOL
$	SET	SOURCEFORMAT"FREE"
IDENTIFICATION	DIVISION.
PROGRAM-ID.		Seq2Rel.
AUTHOR.		MICHAEL	COUGHLAN.
*	Creates a	Relative file	from a	sequential file.
ENVIRONMENT	DIVISION.
INPUT-OUTPUT	SECTION.
FILE-CONTROL.
SELECT	SupplierFile ASSIGN	TO	"RELSUPP.DAT"
ORGANIZATION	IS	RELATIVE
ACCESS	MODE	IS	RANDOM
RELATIVE	KEY	IS	SupplierKey
FILE	STATUS	IS	Supplierstatus.
SELECT	SupplierFileSeq ASSIGN	TO	"SEQSUPP.DAT"
ORGANIZATION	IS	LINE	SEQUENTIAL.
DATA	DIVISION.
FILE	SECTION.
FD		SupplierFile.
01		SupplierRecord.
02	SupplierCode PIC	99.
02	SupplierName PIC	X(20).
02	SupplierAddress PIC	X(50).
FD		SupplierFileSeq.
01		SupplierRecordSeq.
88	EndOfFile VALUE	HIGH-VALUES.
02	SupplierCodeSeq PIC	99.
02	SupplierNameSeq PIC	X(20).
02	SupplierAddressSeq PIC	X(50).
WORKING-STORAGE	SECTION.
01		SupplierStatus PIC	X(2).
1 SupplierKey PIC	99.
Exemplo de código COBOL
PROCEDURE	DIVISION.
Begin.
OPEN	OUTPUT	SupplierFile.
OPEN	INPUT	SupplierFileSeq.
READ	SupplierFileSeq
AT	END	SET	EndOfFile TO	TRUE
END-READ
PERFORM	UNTIL	EndOfFile
MOVE	SupplierCodeSeq TO	SupplierKey
MOVE	SupplierRecordSeq TO	SupplierRecord
WRITE	SupplierRecord
INVALID	KEY	DISPLAY	"Supplier status	=	"	SupplierStatus
END-WRITE
READ	SupplierFileSeq
AT	END	SET	EndOfFile TO	TRUE
END-READ
END-PERFORM.				
CLOSE		SupplierFile,	SupplierFileSeq.
STOP	RUN.
Paradigmas de Linguagens de Programação – Sergio Fernandes
Programação funcional: LISP
• List Processing Language
– Projetada no MIT por McCarthy
• Pesquisa de inteligência artificial (IA) precisava de uma linguagem para
– Processar dados em listas (em vez de vetores)
• Mais fácil inserir ou eliminar elementos da lista do que de vetores
– Computação simbólica (em vez de numérica)
• Algoritmos que manipulam expressões matemáticas / simbólicas
– Computação de expressões que contêm variáveis que não possuem valores específicos e são, 
portanto, manipuladas como símbolos
• Apenas dois tipos de dados: átomos e listas
• Lista
– Especificada pela delimitação dos elementos em parêntesis
Paradigmas de Linguagens de Programação – Sergio Fernandes
Programação funcional: LISP
• Lisp é uma linguagem orientada a expressões simbólicas
– Não há distinção entre expressões e comandos
– Código e data são escritos como expressões
– Expressão avaliada produz um valor, que pode ser embutido em outras 
expressões
• Programação funcional
– Todas as computações em um programa puramente funcional são realizadas 
por meio de aplicações de funções a argumentos
• LISP é usada para IA porque suporta manipulação de símbolos e expressões 
simbólicas
• Áreas da IA que demandam computação simbólica
– Prova de teoremas
– Representação e avaliação de conhecimento
– Sistemas especialistas
Paradigmas de Linguagens de Programação – Sergio Fernandes
Representação interna de duas listas 
em LISP
Representando as listas (A B C D)
e (A (B C) D (E (F G)))
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação de LISP
• Pioneira na programação funcional
– Sem necessidade de variáveis ou atribuição 
– Controle por recursão e expressões condicionais
• Recursão elimina a necessidade de estruturas de laços
• Ainda a linguagem dominante em IA
• COMMON LISP e Scheme são dialetos contemporâneos de LISP
• ML, Miranda e Haskell são linguagens relacionadas
Paradigmas de Linguagens de Programação – Sergio Fernandes
Exemplo de código LISP
• Função para cálculo de fatorial
(define factorial (n)
(if (= n 0) 1
(* n (factorial (- n 1)))))
• Função para reverter uma lista
(define -reverse (list)
(let ((return-value '()))
(dolist (e list) (push e return-value))
return-value))
Paradigmas de Linguagens de Programação – Sergio Fernandes
Exemplo de código LISP
• Função que compara duas listas e retorna true se forem idênticas
; LISP Example function
; The following code defines a LISP predicate function
; that takes two lists as arguments and returns True
; if the two lists are equal, and NIL (false) otherwise
(DEFUN equal_lists (lis1 lis2)
(COND
((ATOM lis1) (EQ lis1 lis2))((ATOM lis2) NIL)
((equal_lists (CAR lis1) (CAR lis2))
(equal_lists (CDR lis1) (CDR lis2)))
(T NIL)
)
)
Paradigmas de Linguagens de Programação – Sergio Fernandes
Tudo para todos: PL/I
• Desenvolvida por IBM e SHARE
• Situação da computação em 1964 (do ponto de vista da IBM)
– Aplicação científica
• Computadores IBM 1620 e 7090
• FORTRAN
• Grupo de usuário SHARE
– Aplicação de negócios
• Computadores IBM 1401 e 7080
• COBOL
• Grupo de usuário GUIDE
Paradigmas de Linguagens de Programação – Sergio Fernandes
Perspectiva histórica
• Em 1963 
– Programadores científicos passaram a precisar de recursos mais 
elaborados de entrada e saída, como COBOL tinha; as aplicações de 
negócios precisavam de dados de ponto-flutuante e vetores para sistemas 
de gerenciamento de informação
– Começou a parecer que as instalações de computação logo precisariam 
de duas equipes técnicas e de computadores diferentes 
• A solução óbvia 
– Construir um novo computador para fazer os dois tipos de aplicações
– Projetar uma nova linguagem para as aplicações
Paradigmas de Linguagens de Programação – Sergio Fernandes
O processo de projeto
• Desenvolvido em cinco meses pelo Comitê 3 x 3
– Três membros da IBM, três membros do SHARE
• Projeto inicial
– Uma extensão do Fortran IV
• Inicialmente chamado de NPL (New Programming Language - Nova 
Linguagem de Programação)
• Nome mudado para PL/I em 1965
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação de PL/I
• Contribuições
– Permitido aos programas criar subprogramas executados 
concorrentemente
– Possível detectar e manipular exceções
– Permitida a utilização de subprogramas recursivamente
– Ponteiros foram incluídos como um tipo de dados
– Porções de uma matriz podiam ser referenciadas
• Preocupações
– Muitos dos novos recursos foram mal concebidos
– Muito grande e muito complexa
Paradigmas de Linguagens de Programação – Sergio Fernandes
Uma das primeiras linguagens dinâmicas: APL
• Caracterizada por tipagem dinâmica e alocação dinâmica de 
armazenamento
• Variáveis são essencialmente não tipadas
– Uma variável adquire um tipo quando é atribuído um valor a ela
• O armazenamento é alocado a uma variável apenas quando é atribuído 
um valor a ela
Paradigmas de Linguagens de Programação – Sergio Fernandes
APL: A Programming Language
• Projetada na IBM por Ken Iverson, em torno de 1960
• Alta expressividade (grande número de operadores, grande número 
de operações unitárias em vetores)
– Programas difíceis de ler
• Influência importante para o desenvolvimento de planilhas eletrônicas, 
programação funcional e pacotes de funções matemáticas
• Ainda em uso; mudanças mínimas
Teclado com caracteres especiais APL
Paradigmas de Linguagens de Programação – Sergio Fernandes
APL: exemplos de código
• A função apresentada a seguir calcula todos os números primos entre 1 
e R
(~R∊R∘.×R)/R←1↓ιR
• A seguir, uma função que extrai todas as tags HTML da expressão 
inicial, apresentando apenas o texto que a expressão formata
txt←'<html><body><p>This is ''emphasized'' 
text</p></body></html>'⎕←{⍵/⍨~{⍵∨≠\⍵}⍵∊'<>'}txt
This is emphasized text.
Paradigmas de Linguagens de Programação – Sergio Fernandes
O Início da abstração de dados: SIMULA 67
• Projetada inicialmente para simulação, na Noruega, por Nygaard e Dahl
• Nunca foi muito utilizada
• Baseada no ALGOL 60 e no SIMULA I
• SIMULA I era voltada exclusivamente para simulações
• SIMULA 67 estendeu SIMULA I tornando-se uma linguagem de 
propósitos gerais
• Contribuições
– Corrotinas – espécie de subprograma
– Classes, objetos e herança
• Importante historicamente, como a primeira linguagem orientada a 
objetos
Paradigmas de Linguagens de Programação – Sergio Fernandes
Projeto ortogonal: ALGOL 68
• A partir do desenvolvimento continuado do ALGOL 60
• Fonte de uma série de novas ideias (embora a própria linguagem nunca 
tenha alcançado grande uso)
• Projeto baseado no conceito de ortogonalidade
– Alguns conceitos primitivos mais o uso irrestrito de mecanismos de 
combinação
– Exemplo: 
• Conceitos primitivos – tipos de dados definidos pela linguagem
• Combinação: criação de estruturas de dados pelos usuários da linguagem
– Essas estruturas de dados permitem criar na linguagem abstrações de conceitos / entidades do 
mundo real
– Todas as linguagens criadas posteriormente incorporaram esses recursos
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação do ALGOL 68
• Contribuições
– Estruturas de dados definidas pelo usuário
• Já citadas
– Tipos de referência
– Vetores dinâmicos (vetores flex)
• Dimensão do vetor definida em tempo de execução, através de alocação dinâmica de 
valores
• Comentários
– Menos uso do que o ALGOL 60
– Teve forte influência nas linguagens subsequentes, especialmente Pascal, 
C e Ada
Paradigmas de Linguagens de Programação – Sergio Fernandes
Pascal - 1971
• Projetada por Wirth (ex-membro do comitê do ALGOL 68)
• Projetada para ser usada como veículo educacional
• Pequena, simples, nada realmente novo
• O maior impacto foi no ensino de programação
– Do meio dos anos 1970 até o fim dos 1990, foi a linguagem mais usada 
para o ensino de programação
Paradigmas de Linguagens de Programação – Sergio Fernandes
C - 1972
• Projetada para a programação de sistemas (no Bell Labs, por Dennis 
Richie)
• Evoluída a partir de BCLP, B e ALGOL 68
• Poderoso conjunto de operadores, mas verificação de tipos pobre
– Por exemplo, parâmetros passados para funções poderiam não ter os 
tipos checados
• Primeira linguagem de alto padrão implementada no UNIX
• Muitas áreas de aplicação
• Eficiente, por isso usada em sistemas embarcados
Paradigmas de Linguagens de Programação – Sergio Fernandes
Programação baseada em lógica: Prolog
• Projetada, por Comerauer e Roussel (Universidade de Aix-Marseille), 
com ajuda de Kowalski (Universidade de Edimburgo)
• Não procedural
• Pode ser resumida como sendo um tipo de base de dados inteligente
• Altamente ineficiente, pequenas áreas de aplicação, como IA
Paradigmas de Linguagens de Programação – Sergio Fernandes
Programação baseada em lógica: Prolog
• A linguagem Prolog comporta fatos, regras, e um mecanismo de 
inferência
• Exemplo
– Fatos:
• Mother (Joanne, Jake), Father (Vander, Joanne)
– Regra:
• Grandparent(X, Z) := Parent (X, Y), Parent (Y, Z).
• Uma execução do programa poderia consultar algo como
• Granfather (Bob, Darcy)
Paradigmas de Linguagens de Programação – Sergio Fernandes
Programação orientada a objetos: Smalltalk
• Projetada na Xerox PARC, inicialmente por Alan Kay, depois por Adele 
Goldberg
• Primeira linguagem de programação a oferecer suporte completo à 
programação orientada a objetos
• Pioneira no design da interface gráfica do usuário
Paradigmas de Linguagens de Programação – Sergio Fernandes
Combinando recursos imperativos e 
programação orientada a objetos: C++
• Projetada no Bell Labs por Stroustrup em 1980
• Desenvolvida a partir de C e SIMULA 67 
• Facilidades para programação orientada a objetos, emprestadas 
do SIMULA 67
• Fornece manipulação de exceções
• Linguagem grande e complexa, em parte porque suporta programação 
procedural e orientada a objetos
• Cresceu rapidamente em popularidade
• Padrão ANSI aprovado em novembro de 1997
• Versão da Microsoft (lançado com .NET em 2002): Managed C++
Paradigmas de Linguagens de Programação – Sergio Fernandes
Uma linguagem orientada a objetos baseada 
no paradigma imperativo: Java
• Projetada na Sun no início dos anos 1990
– C e C++ não eram satisfatórios para dispositivos eletrônicos embarcados
• Baseada em C++
– Significantemente simplificada
– Suporta apenas programaçãoorientada a objetos
• Mas tem tipos de dados primitivos
– Tem referências, mas não tem ponteiros
• Ponteiros apontam para endereços de memória, referências apontam para objetos
• Ponteiros podem ser objeto de operações aritméticas (baixa confiabilidade), referências 
não
– Inclui forma simples de controle de concorrência
Paradigmas de Linguagens de Programação – Sergio Fernandes
Avaliação de Java
• Eliminou muitos recursos inseguros de C++
• Suporta concorrência
• Bibliotecas de classes para interfaces gráficas com o usuário, acesso a 
bases de dados e redes
• Portabilidade: Máquina Virtual Java (JVM), compiladores Just-in-Time
(JIT)
• Amplamente usado para programação Web
• Uso aumentou mais rapidamente do que qualquer linguagem anterior
Paradigmas de Linguagens de Programação – Sergio Fernandes
Uma Linguagem baseada em C Para o Novo 
Milênio: C#
• Parte da nova plataforma de desenvolvimento .NET (2000)
• Baseada em C++ , Java e Delphi
• Fornece uma linguagem para o desenvolvimento de software baseado 
em componentes
• Todas as linguagens do .NET usam o chamado Common Type System 
(CTS – Sistema de Tipos Comum), que fornece uma biblioteca de 
classes comum
Paradigmas de Linguagens de Programação – Sergio Fernandes
Linguagens de Scripting
• Linguagens de scripting
– Linguagem de programação que suporta scripts
– Script
• Programa escrito para ambiente de execução específico 
que pode interpretar (em vez de compilar) e automatizar a 
execução de tarefas
– Que poderiam, alternativamente, ser executadas uma por uma por 
um operador humano
Paradigmas de Linguagens de Programação – Sergio Fernandes
Linguagens de Scripting para Web
• Perl
– Desenvolvida por Larry Wall — lançada primeiro em 
1987
– Variáveis são estaticamente tipadas e implicitamente 
declaradas
– Três espaços de nomes distintos para variáveis, 
denotados pelo primeiro caractere de nomes de 
variáveis
– Teve uso difundido para programação CGI na Web
– Também usado como ferramenta de administração 
de sistema em UNIX
Paradigmas de Linguagens de Programação – Sergio Fernandes
Linguagens de Scripting para Web
• Perl
– Desenvolvida por Larry Wall — lançada primeiro em 1987
– Evoluiu muito, e hoje está próxima de uma linguagem de 
programação convencional
• É compilada
• Tem todos os recursos para que seja aplicável a diversos contextos 
computacionais
– Variáveis são estaticamente tipadas e implicitamente declaradas
– Três espaços de nomes distintos para variáveis, denotados pelo 
primeiro caractere de nomes de variáveis
– Teve uso difundido para programação CGI na Web
– Também usado como ferramenta de administração de sistema em 
UNIX
Paradigmas de Linguagens de Programação – Sergio Fernandes
Linguagens de Scripting para Web
• JavaScript
– Começou na Netscape, mas depois se tornou um 
projeto conjunto da Netscape com a Sun 
Microsystems
– Permite aos documentos HTML validarem dados de 
entrada e requisitarem a execução de programas no 
servidor; usado na criação de documentos HTML 
dinâmicos
– Puramente interpretada
– Relacionado ao Java somente por meio de sintaxe 
similar
Paradigmas de Linguagens de Programação – Sergio Fernandes
Linguagens de Scripting para Web
• PHP
– PHP: Hypertext Preprocessor (Processador de Hipertexto), 
projetado por Rasmus Lerdorf
– Linguagem de scripting do lado do servidor embutida em HTML, 
geralmente utilizados para processamento de formulários e acesso 
de dados pela Web
– Puramente interpretada
– HíbridaL suporta conceitos de orientação a objetos mas também 
programação estrutural
• Python
– Linguagem de scripting orientada a objetos
– Com verificação de tipos, mas tipada dinamicamente
– Usada para programação em CGI e administração de sistemas
– Suporta listas, tuplas e dicionários
Paradigmas de Linguagens de Programação – Sergio Fernandes
Linguagens de Scripting para Web
• Ruby
– Projetada no Japão por Yukihiro Matsumoto (também conhecido como 
“Matz”)
– Começou como um substituto para Perl e Python
– Linguagem de scripting orientada a objetos pura
• Todos os dados são objetos
– A maioria dos operadores são implementados como métodos, que podem 
ser redefinidos pelo código do usuário
– Puramente interpretada

Outros materiais