MAC 441/5714 - Tópicos de Programação Orientada a Objetos
Aula 2
História da Programação Orientada a Objetos
"I invented the term Object-Oriented, and I can tell you I did not have C++ in
mind." - Alan Kay
"The purpose of the Smalltalk project is to provide computer support for the
creative spirit of everyone." - Daniel Ingals, 1981.
Raízes do Conceito de Objetos
- Platão, 375 a.C., teoria das formas: uma forma ideal de uma cama é a base
para todas as camas do mundo (A República).
- Aristóteles, 330 a.C., precursor da herança: "Se falamos dos animais,
é claro que vamos falar as mesmas coisas sobre muitos deles". Então, se duas
classes tem características em comum, Aristóteles sugere que coloquemos estas
características em uma entidade que hoje chamamos de superclasse.
- Carolus
Linnaeus (ou Carl von Linné) em 1753 elaborou provavelmente a primeira
grande hierarquia de classes (toxonomia de plantas) que se tornou um padrão
internacional.
SIMULA
- Linguagem SIMULA criada na Noruega por Ole-Johan Dahl and Kristen Nygaard.
- Derivada do Algol.
- SIMULA I (1962-65) e Simula 67 (1967) foram as primeiras linguagens OO.
- Eram usadas para simulações do comportamento de partículas de gases.
- Os conceitos de objetos, classes e herança apareceram lá embora não
necessariamente com estes nomes.
- Herança apareceu apenas em Simula 67 e se falava apenas em
subclassing.
- Simula passou a ser usada com freqüência da década de 70, sendo inclusive
a linguagem utilizada para desenvolver as primeiras versões de Smalltalk.
- Veja uma interessante descrição do papel de Simula na origem de orietação a
objetos nas palavras dos próprios criadores da linguagem.
Smalltalk
- XEROX PARC, 1970 a 1980: um lugar único na história da Ciência da
Computação.
- Projeto Dynabook: um ambiente novo de computação para adultos e
crianças com características altamente revolucionárias.
- Deste projeto sairam
- Interface Gráfica (com bitmaps)
- Sistemas de Janelas
- Mouse
- Redes via Modem e via Ethernet
- Placas de Som
- etc., etc.
- Alan Kay, pesquisador de Utah, então propõe a criação de vários
aplicativos novos para tal computador: editor de textos, programas para
desenho, para modelagem de objetos tri-dimensionais, etc.
- Ele foi então convidado a entrar no projeto e criar uma nova linguagem de
programação que fosse fácil de programar e que tivesse a sintaxe muito
simples.
- Programar nesta linguagem deveria ser tão fácil quanto bater um papo furado
(small talk) em inglês.
- Kay se inspirou em
- LOGO: baseada em interface gráfica e destinada a crianças.
- LISP: alto poder para manipulação de símbolos (as linguagens até então
manipulavam apenas números), sintaxe super simples. Até hoje todo método
Smalltalk devolve um valor, assim como uma função LISP.
- Sketchpad,
um sistema gráfico interativo do MIT desenvolvido por Ivan Sutherland em sua
tese de doutoramento em 1963.
- No final de 1972 a primeira versão de Smalltalk estava pronta. Ainda não
possuia herança.
- Em 1974, Smalltalk passou a incorporar interfaces gráficas e bitmaps. A
partir daí foi criado o primeiro sistema para gerenciamento de janelas.
- 1976: introduziu-se o conceito de herança, máquina virtual e bytecodes. A
máquina virtual desvinculava o programa Smalltalk do hardware.
- Paradoxo: O Dynabook nunca chegou a se tornar um produto comercial
mas revolucionou o mundo da computação, ditando grande parte do que usamos
hoje.
- O projeto foi concluído mas a XEROX continuou investindo no
Smalltalk. Neste ponto, ela passou a divulgar a linguagem ao público e 3
livros foram escritos (ver bibliografia).
- Os livros são hoje conhecidos pelas suas capas: Orange Book,
referência básica da linguagem, Blue Book, manual de programação, e
Green Book, documentação da implementação da linguagem e da máquina
virtual.
- O sistema foi amplamente divulgado, em fitas magnéticas, e era chamado de
Smalltalk-80.
- Mais tarde a IBM criou a sua versão, Smalltalk V, que foi a primeira a
rodar em DOS. Se tornou popular no final da década de 80. Hoje em dia se chama
VisualAge for Smalltalk.
- Em 1987, a XEROX criou a empresa Parc Place para cuidar do Smalltalk. No
final dos anos 90, a Parc Place foi comprada pela Cincom que hoje comercializa
o Smalltalk que estamos usando nesta disciplina.
- Em 1996 surgiu o projeto Squeak cujo objetivo é desenvolver uma versão de
software livre para Smalltalk no ambiente Linux.
- O Squeak foi desenolvido por um pequeno grupo de desenvolvedores,
incluindo o Alan Kay, o pai da linguagem.
Evolução das linguagens
- No final dos anos 80, Bjarne Stroustrup estendeu a linguagem C com alguns
conceitos de objetos e criou C++.
- Em termos de orientação a objetos, pode-se
dizer que C++ está no extremo oposto de Smalltalk.
- Self é uma linguagem criada em meados dos anos 80 por David Ungar e
Randall B. Smith na Sun. Sua maior virtude é a simplicidade (e tudo o que vem
com ela: flexibilidade, agilidade, etc.). Veja página de leituras recomendadas.
- Em 1995, a Sun lança o ambiente Java, que inclui a linguagem Java,
altamente influenciada por Smalltalk mas com sintaxe parecida com C++.
- Java apresenta um crescimento enorme tanto no meio acadêmico quanto
industrial.
- A Microsoft se sente ameaçada e tenta criar a sua própria versão de Java
com algumas incompatibilidades em relação à versão padrão controlada pela
Sun. A Sun reclama na justiça e Bill gates declara Java linguagem non
grata na Microsoft.
- Microsoft lança sua versão de Java: C#
- C# é mais complexa do que Java, voltando a incorporar alguns aspectos de
C++ que Java tinha optado por não incluir. Com estes aspectos adicionais,
perde em elagância e clareza mas ganha em desempenho.
- Python, uma linguagem dinâmica desenvolvida ao longo da década de
1990 e 2000 foi
influenciado pelas linguagens ABC, C, Java, Lisp, Haskell, Modula-3 e Perl.
- Ruby foi lançada em 12/2005 e foi influenciada por Perl, Smalltalk, Eiffel
e Lisp.
- A motivação de seu criador, Yukihiro Matsumoto, era produzir uma linguagem
que fosse mais poderosa que Perl e mais orientada a objetos do que Python.
Ruby passou a se tornar popular a partir de 2005, com o Ruby on Rails.
O que faz de uma linguagem Orientada a Objetos?
- Era um assunto controverso nos anos 80.
- Em 87, Peter Wegner, publicou um artigo na OOPSLA que resolveu a questão
(pelo menos entre aqueles que concordam com o Wegner :-)
- Para uma linguagem ser Orientada a Objetos ela precisa:
- ser baseada em objetos, ou seja, deve ser fácil programar objetos
que encapsulam dados e operações;
- ser baseadas em classes, ou seja, cada objeto pertence a (ou é
fabricado a partir de) uma classe; e
- permitir herança, ou seja, deve ser fácil agrupar classes em
hierarquias de subclasses e superclasses.
- Outros estudiosos (chatos?) acrescentam outros itens à lista: (eu não
concordo)
- enlace dinâmico, tardio (late binding)
- coleta automática de lixo
- herança múltipla
- agregação
- A linguagem Self é uma grande exceção entre as linguagens claramente
orientada a objetos: ela não possui classes.
- Como veremos mais prá frente nesta disciplina, Self usa delegação.
Bibliografia
- Conhecendo o Smalltalk. Abdala e Wangenheim.
- Smalltalk, Objects, and Design. Chamond Liu.
- Página "How Object-Oriented Programming Started" de
Ole-Johan Dahl e Kristen Nygaard.
Próxima Aula
Aula Anterior
Página de MAC 441/5714
Página do Fabio
Página do DCC