Come hanno chiamato la programmazione orientata agli oggetti prima che Alan Kay inventasse il termine?


22

Alan Kay afferma che "ho inventato il termine" orientato agli oggetti "e posso dirti che non avevo in mente C ++." Ciò che aveva in mente, ovviamente, era Smalltalk. Ma non ha inventato la programmazione orientata agli oggetti; ha avuto le idee di base da Simula. Quindi, se il termine non fosse stato ancora inventato, come si chiamavano in origine programmazione orientata agli oggetti in Simula?

Risposte:


39

In realtà Alan Kay non aveva in mente Smalltalk quando gli venne in mente il termine "programmazione orientata agli oggetti":

Nello Utah qualche tempo dopo il 66 novembre, quando, influenzato da Sketchpad, Simula, dal design di ARPAnet, dal Burroughs B5000 e dal mio background in Biologia e Matematica, ho pensato a un'architettura per la programmazione. Probabilmente fu nel 1967 quando qualcuno mi chiese cosa stavo facendo e io dissi: "È una programmazione orientata agli oggetti".

La sua concezione originale aveva le seguenti parti.

  • Ho pensato che gli oggetti fossero come cellule biologiche e / o singoli computer in una rete, in grado di comunicare solo con i messaggi (quindi la messaggistica è arrivata all'inizio - ci è voluto un po 'di tempo per vedere come fare la messaggistica in un linguaggio di programmazione in modo abbastanza efficiente da essere utile).
  • Volevo sbarazzarmi dei dati. Il B5000 ha quasi fatto questo tramite la sua architettura HW quasi incredibile. Mi sono reso conto che la metafora della cellula / intero computer si sarebbe sbarazzata dei dati e che "<-" sarebbe stato solo un altro token di messaggio (mi ci è voluto un po 'di tempo per pensarlo perché ho davvero pensato a tutti questi simboli come nomi per funzioni e procedure.
  • Il mio background matematico mi ha fatto capire che ogni oggetto poteva avere diverse algebre associate ad esso, e che potevano esserci famiglie di questi, e che sarebbero stati molto utili. Il termine "polimorfismo" è stato imposto molto più tardi (penso da Peter Wegner) e non è del tutto valido, dal momento che proviene davvero dalla nomenclatura delle funzioni, e volevo molto più delle funzioni. Ho inventato un termine "generalità" per trattare comportamenti generici in una forma quasi algebrica.
  • Non mi piaceva il modo in cui Simula I o Simula 67 avevano ereditato (anche se pensavo che Nygaard e Dahl fossero solo grandi pensatori e designer). Così ho deciso di escludere l'eredità come funzionalità integrata fino a quando non ho capito meglio.

Smalltalk è stato il risultato di questa concezione, prendendo in prestito ed estendendo i concetti di "oggetto" e "classe" da Simula, che Simula a sua volta ha ereditato da ALGOL, come descritto in "Lo sviluppo delle lingue di Simula" di Kristen Nygaard e Ole-Johan Dahl (1978, pagina 253):

In ALGOL, i blocchi (comprese le procedure) sono visti esternamente come operazioni generalizzate. Introducendo meccanismi per il sequenziamento quasi parallelo, ~ essenzialmente lo stesso costrutto potrebbe svolgere il ruolo di processi in parallelo, e attraverso meccanismi per la denominazione di istanze di blocco e l'accesso al loro contenuto potrebbero funzionare come oggetti dati generalizzati. I vantaggi essenziali della combinazione di dati e operazioni in un unico costrutto erano già lì per essere esplorati.

Un risultato di questa esplorazione è stata la scoperta che "attributi di procedura" potrebbero essere utili. Il seguente esempio di una classe di oggetti auto "astratti" è citato dal documento Definizione della lingua (Dahl e Nygaard 1965), setta. 5.3.

Ulteriore ispirazione, specialmente per la sottoclasse, è stata la classe discografica di CAR Hoare (pagina 258):

L'idea della sottoclasse di Hoare (68) era un punto di partenza naturale, ma c'erano due difficoltà:

  1. Avevamo bisogno di sottoclassi di processi con azioni proprie e pile di dati locali, non solo di record di dati puri.
  2. Dovevamo anche raggruppare le proprietà dei processi comuni in modo tale da poterle applicare in un secondo momento, in una varietà di situazioni diverse, non necessariamente note in anticipo.

Nell'autunno del 1966 trascorse molto tempo nel tentativo di adattare il costrutto della classe discografica di Hoare per soddisfare le nostre esigenze, senza successo. La soluzione arrivò all'improvviso, con l'idea di "prefisso", nel dicembre del 1966. Pensavamo in termini di cabina dell'atollo su un ponte, con una fila di macchine che erano camion o autobus. (Questo esempio riappare in (Dahl e Nygaard 1968)).

I termini "classe" e "oggetto" appaiono anche in SIMULA 67 LINGUA BASE COMUNE di Ole-Johan Dahl, Bjorm Myhrhaug e Kristen Nygaard (pagine 4-5):

Il concetto di blocco corrisponde alla nozione intuitiva di "sotto-problema" o "sotto-algoritmo" che è un'unità utile di decomposizione nelle aree di applicazione ortodosse.

Un blocco è una descrizione formale o "modello" di una struttura di dati aggregata e degli algoritmi e azioni associati.

...

Un concetto di blocco esteso viene introdotto attraverso una dichiarazione di "classe" e meccanismi di interazione associati come "riferimenti a oggetti" (puntatori), accesso remoto ", operazione" quasi parallela "e" concatenazione "dei blocchi.

Le lezioni sono discusse in modo più dettagliato nel capitolo 1.3.3 (pagina 5):

Un nuovo concetto centrale in Simula 67 è l '"oggetto". Un oggetto è un programma autonomo (istanza di blocco), con i propri dati e azioni locali definiti da una "dichiarazione di classe". La dichiarazione di classe definisce un modello di programma (dati e azione) e si dice che gli oggetti conformi a quel modello "appartengono alla stessa classe".

...

Quindi, sebbene il termine "orientato agli oggetti" non sia stato ancora inventato, sia la "classe" che l '"oggetto" sono stati usati in modo simile al loro uso moderno prima che Alan Kay iniziasse a sviluppare Smalltalk nel 1969.

Ivan Sutherland arriva a identificare Simula come il primo linguaggio di programmazione orientato agli oggetti, su Sketchpad: un sistema di comunicazione grafica uomo-macchina (pagina 4), riconoscendo anche le influenze di CAR Hoare, Douglas T. Ross , ALGOL e Sketchpad:

Tuttavia, il tentativo di Sutherland di rimuovere la divisione tra utenti e programmatori non è stato l'unico sistema che, non riuscendo a farlo, ha fornito il salto immaginario a un nuovo paradigma di programmazione. Simula [7] di Nygaard e Dahl è stato il primo linguaggio di programmazione convenzionale che incorpora i principi dell'orientamento agli oggetti, ma l'implementazione di Sketchpad di eredità basata su classe e istanza (sebbene non chiamata oggetti) ha preceduto Simula di diversi anni.

Sembra esserci stata un'influenza comune attraverso il lavoro di Douglas T. Ross, che è menzionato nei riconoscimenti di questa tesi e anche citato nel rapporto tecnico del MIT Lincoln Laboratory basato su di esso. Ross fece parte del comitato Algol 68 con CAR Hoare a metà degli anni '60, dove i suoi precedenti lavori su una struttura di dati record (chiamata plex) influenzarono le idee di Hoare sui tipi di dati astratti [3], in seguito accreditati da Nygaard e Dahl come l'origine dei meccanismi di definizione delle classi in Simula [7].

Il progetto fondamentale di Alab Kay Dynabook, che ha portato sia alla Xerox Star sia all'esplosione di interesse per la programmazione orientata agli oggetti attraverso il suo linguaggio Smalltalk, è stato direttamente influenzato da Sketchpad. Kay ha scritto del fatto che la genesi di Smalltalk risiede nell'apparizione casuale sulla sua scrivania sia di un nastro di distribuzione di Simula sia di una copia della tesi di Sketchpad di Sutherland [5]. Kay riconobbe che i due sistemi erano basati sugli stessi concetti di tipo sottostanti (apparentemente derivati ​​attraverso due percorsi diversi dal plex di Ross) e che questi potevano costituire la base di un sistema di programmazione più ampiamente utilizzabile. Nel confrontare questi due percorsi di influenza, Simula è stato un progetto molto più ampio di Sketchpad, giustamente riconosciuto come il primo linguaggio di programmazione orientato agli oggetti,

Tuttavia, Alan Kay, ovviamente, considera Smalltalk come il primo linguaggio orientato agli oggetti :

Sebbene abbia davvero nobili antenati, il contributo di Smalltalk è un nuovo paradigma progettuale - che ho chiamato orientato agli oggetti - per attaccare grandi problemi del programmatore professionista e rendere possibili quelli piccoli per l'utente inesperto. La progettazione orientata agli oggetti è un tentativo riuscito di migliorare qualitativamente l'efficienza della modellazione dei sistemi dinamici sempre più complessi e delle relazioni dell'utente rese possibili dall'esplosione di silicio.

e dopo aver coniato il termine, penso che non ci sia molto dibattito qui.

Per rispondere finalmente alla tua domanda: alcuni dei concetti chiave dell'orientamento agli oggetti esistevano su Simula e su linguaggi precedenti come Algol e LISP, ma il paradigma stesso non esisteva, quindi non c'era davvero bisogno di un nome.

Smalltalk è stato progettato pensando all'orientamento agli oggetti, almeno quello che Alan Kay ha pensato come orientamento agli oggetti :

OOP per me significa solo messaggistica, conservazione locale, protezione e occultamento del processo statale ed estremo vincolo tardivo di tutte le cose. Può essere fatto in Smalltalk e in LISP. Probabilmente ci sono altri sistemi in cui ciò è possibile, ma non ne sono consapevole.

L'architettura può sembrare una fusione di concetti precedenti, ma i suoi concetti centrali sono stati introdotti da Smalltalk, segnando così la prima implementazione del paradigma.


2
+1 Come sempre, ottima risposta Yannis! Ho imparato parecchio da questo.
Jonathan Henson,

6
In realtà, c'è molto dibattito e una buona ragione per questo. Nonostante la pretesa auto-esaltante di Alan Kay di un "nuovo paradigma", non c'è praticamente modo di definire "orientato agli oggetti" che includa Smalltalk ma escluda Simula. L'idea "tutto è un oggetto" era presente in alcune implementazioni (ed è principalmente un concetto anche in Smalltalk - poiché un'ottimizzazione, piccoli oggetti interi hanno una rappresentazione che è praticamente indistinguibile da ciò che potrebbe usare qualcosa come C o Pascal).
Jerry Coffin,

1
@JerryCoffin Non sono in disaccordo sul fatto che la maggior parte dei concetti e dei principi fossero lì, niente di nuovo sotto il sole, in The Early History of Smalltalk Kay fa persino riferimento a Platone come fonte d'ispirazione per l'orientamento agli oggetti, tra una tonnellata di altre influenze. Personalmente continuerò a pensare che Smalltalk abbia introdotto il paradigma, perché è stata la prima implementazione a essere progettata tenendo presente il paradigma, mentre nelle implementazioni precedenti i concetti correlati in cui funzionalità, core o minori, ma non la filosofia guida che ha portato la lingua.
yannis,

1
@JerryCoffin (cont ...) Che comunque è territorio di guerra delle fiamme, e non credo davvero che importi. Penso che la citazione di Sutherland che ho incluso adeguatamente presenti il ​​fatto che non tutti sono d'accordo sul fatto che Kay abbia "inventato" il paradigma, e la mia opinione personale sulla questione non è altro che una nota a piè di pagina.
yannis,

5
In realtà, il concetto centrale non è "ogni entità è un oggetto" ma piuttosto "ogni azione è un messaggio inviato". Alan Kay dice anche che si rammarica di averlo definito "orientato agli oggetti" e che qualcosa come "orientato ai messaggi" sarebbe stato un termine migliore.
Jörg W Mittag,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.