Da dove provengono i tre principi di OOP

6

È facile trovare l'origine del termine OOP coniato da Alan Kay quando ha creato Smalltalk, ma non riesco a trovare se durante la creazione del linguaggio ha anche creato i 3 principi di OOP (Encapsulation, Ereditarietà, Polimorfismo). Soprattutto perché lui è molto più incentrato sul messaggio che passa aspetto della lingua .

Quindi da dove provengono i 3 pilastri? Era Smalltalk e Alan Kay o qualche altro?

    
posta Ziv 20.12.2014 - 22:09
fonte

2 risposte

10

Alan Kay potrebbe aver creato il termine, ma la programmazione orientata agli oggetti non ha avuto origine con Smalltalk; è nato con Simula, una variante ALGOL con classi e molti dei concetti che consideriamo oggi sono i principi OOP di base, tra cui ereditarietà e metodi virtuali (polimorfismo).

L'incapsulamento (privato, protetto, pubblico) non era nella Simula originale, ma è stato aggiunto al TOPS-10 versione, e in seguito è stata integrata in Simula 87. Da lì, questi concetti chiave si sono diffusi al resto del mondo orientato agli oggetti.

Per tutti i discorsi di Alan Kay sull'invenzione di OOP, lo stile di Simula ha avuto successo. OOP Smalltalk-style ha fallito largamente nel mercato delle idee ovunque e ogni volta che è stato introdotto, con una notevole eccezione. Objective-C utilizza OOP in stile Smalltalk, e ha riscontrato un buon successo in iOS, perché Apple ha costruito l'intera API attorno ad esso e quindi lo ha spinto verso la gola dei loro sviluppatori. Al di fuori dell'ecosistema Apple, però, Objective-C è usato come qualsiasi altra implementazione di passaggio OOP-by-message.

    
risposta data 21.12.2014 - 05:23
fonte
7

Sia l'incapsulamento che il polimorfismo sono conseguenze del passaggio dei messaggi. (Se tutto ciò che si può fare è inviare un messaggio e attendere una risposta, allora non si può sapere cosa fa il ricevitore per generare la risposta (incapsulamento) e il diverso ricevitore può rispondere in modo diverso allo stesso messaggio (polimorfismo).)

Alan Kay amava l'ereditarietà, ma non lo considerava fondamentale. In effetti, progettò la prima versione di Smalltalk senza ereditarietà, perché non riusciva a capire come fare l'eredità senza classi, e non gli piacevano le classi più di quanto gli piacesse l'ereditarietà. Fu solo quando Dan Ingalls arrivò con la progettazione di metaclassi che il dottor Kay trovò le classi almeno in qualche modo accettabili. In ogni caso, considera l'ereditarietà semplicemente un metodo di riutilizzo del codice, non qualcosa di inerente a OO.

    
risposta data 21.12.2014 - 04:38
fonte

Leggi altre domande sui tag