Alegadamente, Alan Kay é o inventor do termo "orientado a objetos". E ele é freqüentemente citado como tendo dito que o que chamamos de OO hoje não é o que ele quis dizer.
Por exemplo, eu encontrei isso no Google:
Eu inventei o termo 'orientado a objetos' e posso dizer que não tinha C ++ em mente
- Alan Kay, OOPSLA '97
Lembro-me vagamente de ouvir algo bastante esclarecedor sobre o que ele quis dizer. Algo ao longo das linhas de "passagem de mensagem".
Você sabe o que ele quis dizer? Você pode preencher mais detalhes sobre o que ele quis dizer e como ele difere do OO comum de hoje? Por favor, compartilhe algumas referências, se você tiver alguma.
Obrigado.
object-oriented
history
Charlie Flowers
fonte
fonte
Respostas:
http://www.purl.org/stefan_ram/pub/doc_kay_oop_en
fonte
A maioria, se não tudo, do que Alan Kay quis dizer com orientação a objetos está incorporada na linguagem Smalltalk.
Além disso, em http://en.wikipedia.org/wiki/Message_passing#Influences_on_other_programming_models :
fonte
"Nem sequer fizemos toda a ideia no PARC. Muitas das idéias de Carl Hewitt Actors que foram desencadeadas pelo Smalltalk original estavam mais no espírito de OOP do que nos Smalltalks subsequentes. Partes significativas de Erlang são mais como uma linguagem OOP real o Smalltalk atual e, certamente, as linguagens baseadas em C que foram pintadas com "OOP paint". "
Retirado do comentário de Alan Kay em:
http://computinged.wordpress.com/2010/09/11/moti-asks-objects-never-well-hardly-ever/
fonte
Um dos principais pontos que aprendi ao seguir os trabalhos de Alan Kay e outros, como Jim Coplien, é que a verdadeira programação orientada a "objetos" trata da modelagem de computadores e software em termos de modelos mentais HUMAN / USER, em vez de ser apenas uma ferramenta para PROGRAMADORES.
Pelo que entendi, a visão de Alan de OOP estava tornando o computador uma ferramenta que permite que um usuário humano faça o que quiser: todos os recursos do computador são diretamente expostos ao usuário final por meio de um modelo interativo intuitivo. Eu deveria poder visualizar e esculpir objetos e interações de tempo de execução DIRETAMENTE, não apenas através do código.
Aqui está um post sobre meus planos de tentar uma versão disso em JavaScript como prova de conceito: http://www.cemetech.net/forum/viewtopic.php?p=234494#234494
De uma perspectiva de desenvolvimento / programação de software, Jim Coplien fala sobre como o código pode e DEVE se parecer com o modelo mental do usuário. Ou seja, o código lê da mesma maneira que soaria por uma pessoa descrevendo seu comportamento. Isso é amplamente conseguido pensando em termos de OBJETOS, e não em CLASSES e TIPOS. O comportamento é descrito em termos dos papéis desempenhados por objetos, não como parte da definição de IDENTIDADE de um objeto. Você deve poder modelar interações em termos de objetos, identificados pelo ROLE que eles desempenham em uma interação. É assim que os modelos mentais humanos funcionam: garçom, cliente, caixa, conta de origem, conta de destino ... Esses são papéis, não tipos, e você deseja definir métodos para "qualquer objeto que esteja desempenhando esse papel no momento" ",
fonte