Historia Linguagens Da Programacao
Historia Linguagens Da Programacao
Historia Linguagens Da Programacao
Linguagens de Programação
Rosana Braga
Links interessantes
TC – DEI, 2005/2006
Mas... E antes de termos linguagens?
TC – DEI, 2005/2006
Algoritmo – Ano 825
Abdullah al-Khwarizmi (Persia)
Algoritmi de numero Indorum procedimento
para realização de cálculos com os algarismos
indianos (que tornaram-se os algarismos
arábicos)
Bem mais fácil do que somar números
romanos!
A primeira programadora: Ada Lovelace
http://celebratingada.com/
http://factmyth.com/factoids/ada-lovelace-wrote-the-first-computer-program/
Primeira linguagem: Plankalkul (1946)
subrotina
condicional
O problema da abstração
int a, b, c;
a = 83;
b = -2;
c = a + b;
Compilação
Programa Programa
numa em
Linguagem de Compilador Código
Alto Nível Máquina
Máquina
Virtual
Gcd.class java
JIT
Paradigmas de Programação
Atualmente existem quatro paradigmas de
linguagens de programação em uso comum:
Imperativas (e.g. C, Pascal, Fortran)
Funcionais (e.g. LISP, Scheme)
Lógicas/Declarativas (e.g. Prolog)
Orientadas-a-Objetos (e.g. Java, C++, C#)
printf(“%d”, fatorial);
}
Personalidades… John Backus
John Backus, desenvolveu o
FORTRAN circa 1957, na IBM
Foi a primeira linguagem de alto
nível digna desse nome
FORmula TRANslating
Era previsto levar 6 meses a fazer,
levou mais de 2 anos – ninguém
sabia as técnicas básicas de
implementar um compilador,
aprenderam aqui.
BNF: Backus-Naur Form -> usada
para descrever Algol no ano seguinte
COBOL (1960)
Necessidade de linguagem para
facilitar a escrita de programas para
a indústria: comitê CODASYL
Programas em COBOL tinham 3
grandes divisões: dados,
procedimentos e ambiente
Em dezembro de 1960 ocorreu um
marco histórico: dois computadores
de fabricantes diferentes rodaram o
mesmo programa, modificando
apenas a divisão de ambiente
Portabilidade!!
Dennis Ritchie (& Brian Kernighan)
Em 1967, M. Richards desenvolve a linguagem
BCPL
Em 1970, Ken Thompson implementa o núcleo
sistema operacional UNIX em Assembly!
Dennis Ritchie A primeira linguagem/compilador escrita para Unix foi
a B, uma variante do BCPL
Dennis Ritchie (Bell Labs) reconhece a necessidade
de implementar o próprio sistema operacional
usando uma linguagem de alto nível: inventa o C,
uma evolução do B
Brian Kernighan A linguagem C é altamente apropriada para
programação de sistema
Dennis Ritchie e Brian Kernighan escrevem a bíblia
do C: “The C Programming Language”
Linguagens Funcionais
Não existem atribuições de variáveis: tudo é
feito invocando funções
Tradicionalmente são utilizadas em cálculo
simbólico / Inteligência Artificial
Tipicamente tem suporte direto para
trabalharem com Listas de Símbolos
Exemplos: LISP, ML, Scheme
A primitiva básica é a
lista!
(+ (* 2 4) (/ 4 3))
LISP
Criado por John McCarthy em 1959
A principal ideia era a manipulação de
símbolos utilizando listas diretamente na
linguagem
LISP = LIST PROCESSING
(+ 5 (* 2 5))
A primeira tentativa chamava-se FLPL (Fortran
List Processing Language)
As funcionalidades que McCarthy queria
eram:
Expressões condicionais (ifs)
Recursividade
Listas
Garbage Collection
Escreveu um artigo onde definia o LISP e
a sua função base eval
Uma aluno dele notou que era possível
implementar o eval na prática, o que deu
origem ao LISP!
Programação Lógica
O programador não diz como é que se resolve um
problema. Apenas diz:
Quais são os fatos
Quais são os teoremas que descrevem o sistema
O interpretador/compilador encarrega-se de encontrar a
solução para as interrogações feitas ao programa
?- avo(carlos, X).
X = jose;
no
?- irmao(carlos, X).
X = miguel;
no
PROLOG – Calcular um Fatorial
Fatos e Teoremas
fat(N,1) :-
N =:= 1.
fat(N, Resultado) :-
N > 1,
K is N-1,
fat(K, FatK),
Resultado is N*FatK.
Programação Orientada a Objetos
Motivação: Os grandes problemas da
programação imperativa, estruturada:
Grande Acoplamento!
Baixa Coesão!
i()
f() g() h() j()
k()
Dados f()
h() g()
Programação Orientada a Objetos
A principal ideia dos objetos é que:
Apenas as funções relacionadas com os dados os acessam
Reduzir o acoplamento e aumentar a coesão, isto é, permitir a
construção de software em projetos de larga escala, de forma
consistente e fácil de gerenciar
Além disso, é muito mais natural pensar em termos de objetos
e suas relações do que em termos de dados e algoritmos
Programação estruturada:
PROGRAMA = DADOS + ALGORITMOS
Programação orientada a Objetos
PROGRAMA = OBJETOS + RELAÇÕES
Classes e Objetos (Java)
class Pessoa {
private String nome;
private int idade;
cliente1.identifica();
cliente2.identifica();
Um pouco de História… Alan Kay
Um dos pais da programação orientada a
objetos
SmallTalk, Laboratórios da XEROX em Palo Alto,
1972
Também inventou o conceito de computador
pessoal, GUI e Portátil… (sim, para além da
programação orientada aos objetos…)
A ideia de computador pessoal era RADICAL!
"There is no reason anyone would want a computer
in their home." (Ken Olsen, Digital Equipment Corp,
1977)