O que eles chamavam de Programação Orientada a Objetos antes de Alan Kay inventar o termo?

22

Alan Kay afirma que "eu inventei o termo" orientado a objetos "e posso dizer que não tinha C ++ em mente". O que ele tinha em mente, é claro, era Smalltalk. Mas ele não inventou a programação orientada a objetos; ele pegou as idéias básicas da Simula. Portanto, se o termo ainda não havia sido inventado, o que eles originalmente chamavam de programação orientada a objetos no Simula?

Mason Wheeler
fonte

Respostas:

39

Na verdade, Alan Kay não tinha o Smalltalk em mente quando criou o termo "programação orientada a objetos":

Em Utah, logo após o dia 66 de novembro, quando, influenciado pelo Sketchpad, Simula, o design do ARPAnet, o Burroughs B5000 e minha formação em Biologia e Matemática, pensei em uma arquitetura para programação. Provavelmente foi em 1967, quando alguém me perguntou o que eu estava fazendo e eu disse: "É uma programação orientada a objetos".

A concepção original tinha as seguintes partes.

  • Pensei nos objetos como células biológicas e / ou computadores individuais em uma rede, capazes apenas de se comunicar com mensagens (então as mensagens surgiram logo no início - demorou um pouco para ver como fazer as mensagens em uma linguagem de programação com eficiência suficiente para seja útil).
  • Eu queria me livrar dos dados. O B5000 quase fez isso através de sua arquitetura HW quase inacreditável. Percebi que a metáfora da célula / computador inteiro se livraria dos dados e que "<-" seria apenas mais um token de mensagem (demorei um pouco para pensar nisso, porque realmente pensei em todos esses símbolos como nomes para funções e procedimentos.
  • Minha formação em matemática me fez perceber que cada objeto poderia ter várias álgebras associadas a ele, e poderia haver famílias delas, e que elas seriam muito, muito úteis. O termo "polimorfismo" foi imposto muito mais tarde (acho que por Peter Wegner) e não é muito válido, pois realmente vem da nomenclatura de funções e eu queria muito mais do que funções. Eu inventei o termo "genérico" para lidar com comportamentos genéricos de forma quase algébrica.
  • Não gostei da maneira como o Simula I ou o Simula 67 herdaram (embora eu pensasse que Nygaard e Dahl eram apenas tremendos pensadores e designers). Então, decidi deixar de fora a herança como um recurso interno até entender melhor.

Smalltalk foi o resultado dessa concepção, emprestando e estendendo os conceitos de "objeto" e "classe" de Simula, que Simula por sua vez herdou da ALGOL, conforme descrito em "O desenvolvimento das linguagens Simula" de Kristen Nygaard e Ole-Johan Dahl (1978, página 253):

No ALGOL, os blocos (incluindo procedimentos) são vistos externamente como operações generalizadas. Ao introduzir mecanismos para o sequenciamento quase paralelo, essencialmente o mesmo construto poderia desempenhar o papel de processos em paralelo e, por meio de mecanismos para nomear instâncias de bloco e acessar seu conteúdo, eles poderiam funcionar como objetos de dados generalizados. Os benefícios essenciais da combinação de dados e operações em uma única construção já estavam lá para serem explorados.

Um resultado dessa exploração foi a descoberta de que "atributos de procedimento" podem ser úteis. O exemplo a seguir de uma classe de objetos de carro "abstratos" é citado no documento de Definição de linguagem (Dahl e Nygaard 1965), seção. 5.3

Outra inspiração, especialmente para a subclasse, foi a classe de discos da CAR Hoare (página 258):

A ideia da subclasse de Hoare (68) foi um ponto de partida natural, mas havia duas dificuldades:

  1. Precisávamos de subclasses de processos com ações próprias e pilhas de dados locais, não apenas de registros de dados puros.
  2. Também precisávamos agrupar propriedades comuns do processo de forma que elas pudessem ser aplicadas posteriormente, em uma variedade de situações diferentes, não necessariamente conhecidas previamente.

Muito tempo foi gasto durante o outono de 1966 na tentativa de adaptar a construção da classe de discos de Hoare para atender às nossas necessidades, sem sucesso. A solução veio repentinamente, com a idéia de "prefixar", em dezembro de 1966. Estávamos pensando em termos de cabine de atol em uma ponte, com uma fila de carros que eram caminhões ou ônibus. (Este exemplo reaparece em (Dahl e Nygaard 1968)).

Os termos "classe" e "objeto" também aparecem no SIMULA 67 COMMON BASE LANGUAGE de Ole-Johan Dahl, Bjorm Myhrhaug e Kristen Nygaard (páginas 4-5):

O conceito de bloco corresponde à noção intuitiva de "sub-problema" ou "sub-algoritmo", que é uma unidade útil de decomposição em áreas de aplicação ortodoxas.

Um bloco é uma descrição formal ou "padrão" de uma estrutura de dados agregada e algoritmos e ações associados.

...

Um conceito de bloco estendido é introduzido por meio de uma declaração de "classe" e mecanismo de interação associado, como "referências a objetos" (ponteiros), acesso remoto ", operação" quase paralela "e bloco" concatenação ".

As aulas são discutidas em mais detalhes no capítulo 1.3.3 (página 5):

Um novo conceito central no Simula 67 é o "objeto". Um objeto é um programa independente (instância de bloco), com seus próprios dados e ações locais definidos por uma "declaração de classe". A declaração de classe define um padrão de programa (dados e ação) e os objetos em conformidade com esse padrão são considerados "pertencentes à mesma classe".

...

Portanto, embora o termo "orientação a objetos" ainda não tenha sido inventado, "classe" e "objeto" foram usados ​​de maneira semelhante ao uso moderno antes de Alan Kay começar a desenvolver o Smalltalk em 1969.

Ivan Sutherland chega a identificar Simula como a primeira linguagem de programação orientada a objetos, no Sketchpad: Um sistema de comunicação gráfica homem-máquina (página 4), também reconhecendo as influências de CAR Hoare, Douglas T. Ross , ALGOL e Sketchpad:

No entanto, a tentativa de Sutherland de remover a divisão entre usuários e programadores não foi o único sistema que, ao não fazê-lo, deu o salto imaginativo para um novo paradigma de programação. O Simula de Nygaard e Dahl [7] foi a primeira linguagem de programação convencional incorporando os princípios de orientação a objetos, mas a implementação do Sketchpad da herança baseada em classes e instâncias (embora não chamada de objetos) antecedeu o Simula por vários anos.

Parece ter havido uma influência comum através do trabalho de Douglas T. Ross, mencionado nos reconhecimentos desta dissertação e também citado no relatório técnico do MIT Lincoln Laboratory. Ross fez parte do comitê Algol 68 com a CAR Hoare em meados da década de 1960, onde seu trabalho anterior sobre uma estrutura de dados semelhante a um registro (chamado de plex) influenciou as idéias de Hoare sobre tipos de dados abstratos [3], posteriormente creditados por Nygaard e Dahl como a origem dos mecanismos de definição de classe em Simula [7].

O projeto seminal Dynabook de Alan Kay, que levou à Xerox Star e à explosão de interesse em programação orientada a objetos por meio de sua linguagem Smalltalk, foi diretamente influenciado pelo Sketchpad. Kay escreveu que a gênese de Smalltalk estava na aparência coincidente em sua mesa, tanto de uma fita de distribuição de Simula quanto de uma cópia da tese do Sketchpad de Sutherland [5]. Kay reconheceu que os dois sistemas se baseavam nos mesmos conceitos de tipo subjacentes (aparentemente derivados de duas rotas diferentes do plex de Ross) e que estes poderiam formar a base de um sistema de programação mais amplamente utilizável. Ao comparar essas duas rotas de influência, o Simula era um projeto muito maior que o Sketchpad, corretamente reconhecido como a primeira linguagem de programação orientada a objetos,

No entanto, Alan Kay, obviamente, considera Smalltalk a primeira linguagem orientada a objetos :

Embora tenha ancestrais nobres, a contribuição do Smalltalk é um novo paradigma de design - que chamei de orientação a objetos - para atacar grandes problemas do programador profissional e possibilitar pequenos para o usuário iniciante. O projeto orientado a objetos é uma tentativa bem-sucedida de melhorar qualitativamente a eficiência da modelagem de sistemas dinâmicos cada vez mais complexos e de relacionamentos com os usuários possibilitados pela explosão de silício.

e tendo cunhado o termo, acho que não há muito debate lá.

Para finalmente responder à sua pergunta: Alguns dos conceitos principais de orientação a objetos existiam no Simula e em linguagens anteriores como Algol e LISP, mas o paradigma em si não existia, portanto, não havia realmente a necessidade de um nome.

O Smalltalk foi projetado tendo em mente a orientação a objetos, pelo menos o que Alan Kay considerava orientação a objetos :

OOP para mim significa apenas mensagens, retenção e proteção local e ocultação de processos estatais e vinculação extrema de todas as coisas. Isso pode ser feito no Smalltalk e no LISP. Possivelmente existem outros sistemas nos quais isso é possível, mas eu não os conheço.

A arquitetura pode parecer uma amálgama de conceitos anteriores, mas seus conceitos centrais foram introduzidos pelo Smalltalk, marcando assim a primeira implementação do paradigma.

yannis
fonte
2
+1 Como sempre, excelente resposta Yannis! Eu aprendi um pouco com isso.
Jonathan Henson
6
Na verdade, há muito debate e uma boa razão para isso. Apesar da alegação auto-engrandecedora de Alan Kay de um "novo paradigma", praticamente não há como definir "orientação a objetos" que inclua Smalltalk, mas exclua Simula. A idéia "tudo é um objeto" estava presente em algumas implementações (e é principalmente um conceito no Smalltalk - como uma otimização, pequenos objetos inteiros têm uma representação praticamente indistinguível do que algo como C ou Pascal usaria).
Jerry Coffin
1
@JerryCoffin Eu não discordo que a maioria dos conceitos e princípios estavam lá, nada de novo sob o sol, em The Early History of Smalltalk Kay até faz referência a Platão como uma inspiração para orientação a objetos, entre uma tonelada de outras influências. Pessoalmente, continuarei pensando no Smalltalk como tendo introduzido o paradigma, porque foi a primeira implementação a ser projetada com o paradigma em mente, enquanto nas implementações anteriores os conceitos relacionados apresentavam recursos, principais ou secundários, mas não a filosofia de condução que trouxe adiante a linguagem.
yannis 31/03
1
@JerryCoffin (cont ...) Mas isso é território de guerra de chamas, e eu realmente não acho que isso importe. Penso que a citação de Sutherland que incluí apresenta adequadamente o fato de que nem todos concordam que Kay "inventou" o paradigma, e minha opinião pessoal sobre o assunto não passa de uma nota de rodapé.
yannis
5
Na verdade, o conceito central não é "toda entidade é um objeto", mas "toda ação é um envio de mensagem". Alan Kay até diz que lamenta chamá-lo de "orientado a objetos" e que algo como "orientado a mensagens" teria sido um termo melhor.
Jörg W Mittag