Alan Kay não inventou objetos

As pessoas continuam a argumentar que as linguagens modernas orientadas a objetos não são, de fato, "orientadas a objetos" porque não atendem à definição de OOP Alan Kay. Na minha opinião, isso faz sentido, embora eu não concorde com a conclusão. Recentemente, conheci pessoas que dizem que foi Kay quem inventou os objetos. Na verdade, isso não é verdade.


Alan Kay não inventou objetos. Eles estavam em Simula , o que leva ao Smalltalk-72 como a principal fonte de inspiração (p. 117). Uma edição de 1981 da Byte, uma revista popular que popularizou Smalltalk e OOP, disse que "a idéia básica de objetos, mensagens e classes veio do SIMULA". Ele diz que o Simula permite que os usuários criem "sistemas orientados a objetos", que podem ser demais, mas mesmo assim. A equipe do Smalltalk conhecia bem o sistema de objetos Simula e se inspirou nele.


Uma das razões pelas quais esse mito ainda está vivo foi o que o próprio Kay disse em 1998 :


Apenas lembro que, no último OOPSLA, tentei transmitir a todos que o Smalltalk não é apenas uma biblioteca de sintaxe ou classe, mas nem mesmo classes. Lamento muito que tenha cunhado anteriormente o termo "objetos" para este tópico, pois faz com que muitas pessoas se concentrem em uma idéia menor.

E ainda nesta entrevista, ele continua:


Quero dizer, eu inventei o termo "objetos". Como criamos objetos primeiro, não havia outros objetos para radicalizar isso.

Mais tarde, ele parou de dizer isso , mas as pessoas ainda continuam usando essa citação como um fato.


Alan Kay inventou o termo "Programação Orientada a Objetos"


Isto é absolutamente verdade.


OOP estava em classes e objetos


Recentemente, muitos continuam a argumentar que o POO não está realmente em classes e objetos e que, de fato, as mensagens mais importantes são. Em um post de 1998, depois que Kay disse que se arrepende de "objetos", ele também diz que "uma ótima idéia é enviar mensagens". Ele ainda escreve :


OOP para mim são apenas mensagens, retenção e proteção local, ocultando o estado e depois vinculando tudo. Isso pode ser feito no Smalltalk e no LISP. Provavelmente existem outros sistemas onde isso é possível, mas eu não os conheço.

No início da OOP, as mensagens eram amplamente consideradas importantes, principalmente para as instalações de manutenção. Veja como Don Ingalls explica o POO em sua introdução ao Smalltalk-76 :


Smalltalk é mais orientado a objetos do que orientado a funções, e isso muitas vezes confunde as pessoas com experiência em ciência da computação. Por exemplo, <someobject>+4 significa enviar +4 objeto como uma mensagem. A principal diferença é que tudo é controlado pelo objeto, não + . Se <someobject> for um número inteiro 3, o resultado será um número inteiro 7. No entanto, se <someobject> for a sequência 'Meta' , o resultado poderá ser Meta4 . Assim, a carga semântica acompanha os objetos do sistema e o código permanece uma forma abstrata, simplesmente direcionando o fluxo de mensagens.

Na Microeletrônica e no Computador Pessoal, Kay fala sobre um sistema de mensagem para ação no qual "toda ação pertence a uma família" e fala sobre a expansão de atividades no "ponto de vista" das relações com os objetos como a fronteira do futuro. No manual Smalltalk-72, ele escreve (p. 18):


A idéia principal ao escrever programas de conversação pequena é definir classes que lidam com os relacionamentos entre objetos no ambiente criado.

Ao visualizar fontes iniciais, forma-se a figura de que OOP consiste em três idéias principais: classes que definem o protocolo e implementação, objetos como instâncias de classes e mensagens como meio de comunicação. A ideia de que classes e objetos eram secundários a mensagens surgiu muito mais tarde.


Smalltalk foi a primeira linguagem real orientada a objetos


A ACM apresentou a Turing Premiere a Dahl e Nyugor e chamou-as de "coautores da OLP". Byte também escreve que Simula era orientada a objetos e, no artigo "A revolução do computador ainda não aconteceu", Kay chama o Sketchpad de "muito orientado a objetos". Na minha opinião, isso não reconhece adequadamente os méritos do Smalltalk. Ao contrário de outros sistemas, no Smalltalk:


  • Não havia primitivas sem objeto: números eram objetos, erros eram objetos, classes eram objetos, mensagens eram objetos.
  • Você pode passar uma mensagem para qualquer objeto, incluindo outras mensagens.
  • Métodos e implementações foram associados a objetos, não a uma sessão.

O último ponto é o mais complicado e possivelmente o mais importante, embora ninguém realmente explique o que o torna tão especial. No Simula, invocar um método ausente causa um erro. Isso faz parte da especificação Simula. No Smalltalk-80, se nenhum método corresponder à mensagem, o objeto padrão retornará uma mensagem doesNotUnderstand . O chamador pode responder, transmitir uma mensagem ou sinalizar um erro. Uma classe também pode substituir a ação padrão e fazer algo diferente de retornar doesNotUnderstand .


Isso também significa que o sistema de mensagens não depende da estrutura interna dos objetos. Eles nem precisam fazer parte de um projeto. Conclui-se que você pode fazer coisas como enviar mensagens para objetos escritos em diferentes idiomas , enviar definições de objetos por email , enviar mensagens via SMS, etc. Na minha opinião, esse é precisamente o poder das "mensagens", mas ao mesmo tempo é um dos aspectos menos estudados.


Smalltalk teve um contexto ambiental


As pessoas não inventam ferramentas espontaneamente. Eles têm situações e tarefas específicas e estão tentando encontrar uma solução para esses problemas. Inovações em Smalltalk e OOP não são excepção.


Alan Kay estava interessado no tópico de computadores pessoais. Seu trabalho no FLEX, Dynabook e Smalltalk se baseia nisso. Na sua opinião, o PC deveria estar completamente sob o controle do usuário; tudo, desde a lógica do núcleo do sistema até a renderização gráfica, poderia ser configurado e explorado durante a operação. A passagem de mensagens e a ligação tardia resolvem vários problemas. Se uma criança instalar um novo jogo, preciso recompilar todo o sistema operacional para usar o novo programa? Não: possibilite enviar uma mensagem arbitrária a qualquer objeto e conte com o processamento do protocolo durante o trabalho para concluir a tarefa. (*) Se uma pessoa violar a lógica do sistema de som, todo o sistema operacional deve cair? Claro que não, então deixe os objetos decidirem como processar as mensagens. Objetos funcionam bem aqui.


Ole Dahl e Kirsten Nyugor tentaram resolver um problema completamente diferente. Eles estavam interessados ​​na simulação . Um estudo no guia Simula está modelando a propagação da infecção entre uma população fixa. O sistema está completamente fechado: você tem um conjunto fixo de código, executa a simulação e obtém o resultado. Para eles, as mensagens são inúteis. Mas a capacidade de definir simulações em termos de outras simulações, de especializar entidades e modelar o tempo como um objeto de primeira classe é incrivelmente útil. Objetos também apresentam bom desempenho aqui.


Então, quem usou os objetos "corretamente"? Esta é uma pergunta irracional. Eles fizeram coisas diferentes porque tinham tarefas diferentes. Nossa idéia moderna de POO é uma síntese de todas as suas idéias, bem como as de Adele Goldberg, Barbara Liskov, David Parnassus, Bertrand Meyer, Gul Ag e muitas outras. Mas nenhum deles pode dizer o que é "OOP". Os conceitos evoluem, assim como as tarefas.


tl; dr


As entrevistas realizadas há mais de 30 anos não são boas fontes.




* Talvez isso faça do Powershell o sucessor espiritual do Smalltalk.

Source: https://habr.com/ru/post/pt455638/


All Articles