Ho letto The Early History of Smalltalk e ci sono alcune menzioni di "incarico" che mi fanno mettere in dubbio la mia comprensione del suo significato:
Sebbene OOP provenisse da molte motivazioni, due erano centrali. Quello su larga scala era quello di trovare uno schema di modulo migliore per sistemi complessi che comportassero il nascondimento di dettagli, e quello su piccola scala era trovare una versione più flessibile di assegnazione e quindi tentare di eliminarlo del tutto.
(dal 1960-66 - Early OOP e altre idee formative degli anni sessanta , Sezione I)
Quello che ho ottenuto da Simula è che ora puoi sostituire attacchi e assegnazioni con obiettivi . L'ultima cosa che volevi che un programmatore facesse è confondere con lo stato interno anche se presentato in modo figurato. Invece, gli oggetti dovrebbero essere presentati come siti di comportamenti di livello superiore più appropriati per l'uso come componenti dinamici . (...) È un peccato che gran parte di ciò che oggi si chiama "programmazione orientata agli oggetti" sia semplicemente una programmazione vecchio stile con costrutti più elaborati. Molti programmi sono caricati con operazioni di tipo "assegnazione" ora eseguite con procedure annesse più costose.
(dallo stile "orientato agli oggetti" , sezione IV)
Ho ragione a interpretare l'intenzione come se gli oggetti fossero destinati a essere facciate e qualsiasi metodo (o "messaggio") il cui scopo è quello di impostare una variabile di istanza su un oggetto (cioè un "incarico") sta sconfiggendo lo scopo? Questa interpretazione sembra essere supportata da due successive dichiarazioni nella Sezione IV:
Quattro tecniche usate insieme - stato persistente, polimorfismo, istanziazione e metodi come obiettivi per l'oggetto - spiegano gran parte del potere. Nessuno di questi richiede un "linguaggio orientato agli oggetti" da utilizzare - ALGOL 68 può quasi essere trasformato in questo stile - e OOPL si concentra semplicemente sulla mente del progettista in una direzione particolarmente fruttuosa. Tuttavia, fare correttamente l'incapsulamento è un impegno non solo per l'astrazione dello stato, ma per eliminare dalla programmazione metafore orientate allo stato.
...e:
Le dichiarazioni di assegnazione, anche astratte, esprimono obiettivi di livello molto basso, e per realizzarli sarà necessario un numero maggiore di obiettivi. In generale, non vogliamo che il programmatore stia scherzando con lo stato, simulato o meno.
Sarebbe giusto dire che esempi opachi e immutabili vengono incoraggiati qui? O sono semplicemente i cambiamenti diretti dello stato a essere scoraggiati? Per esempio, se ho una BankAccount
classe, è ok per avere GetBalance
, Deposit
e Withdraw
metodi di istanza / messaggi; assicurati solo che non ci sia un SetBalance
metodo / messaggio di istanza?