Una forma di incapsulamento Javascript è quella di ambito . Non ci sono moduli come tali - le persone si limitano a inserire cose all'interno di una funzione ( (function(){ ... })(this)
) e le cose all'interno di quella funzione non possono essere utilizzate all'esterno. Puoi nasconderne un po 'in ambito locale, e molti linguaggi l'hanno avuto (anche se probabilmente, senza le funzioni di prima classe questo non è sufficiente per incapsulamento di dati).
Una volta che iniziamo a menzionare funzioni e cronologia di prima classe, cadiamo fermamente nel parlare di Lisp. E c'è anche molto da dire.
Early Fortran (per il 704) non aveva subroutine o scope. Era Fortran II che ha introdotto queste cose .
Mi scuso per aver scritto Lisp (1958) con una sola frase ... e senza dire molto su Fortran (1957), o Fortran II (1958). Lisp ha avuto chiusure e Fortran II sembra avere qualche scope lessicale ...
Quando parli di incapsulamento e programmazione strutturata il nome che dovrebbe saltarti addosso è Niklaus Wirth .
Ciò che pensiamo spesso come incapsulamento sono cose come variabili private all'interno di un modulo. Certo, c'erano cose che potevano entrare e uscire dall'ambito che non potevano essere accessibili al di fuori dell'ambito. Ma non avevi "qui c'è questo modulo di codice che ha alcune cose che non puoi vedere da quelle parti".
Era Modula 2 (1978) che ci ha portato la sintassi come:
DEFINITION MODULE M1;
EXPORT QUALIFIED a, b, c, P;
Dove si potrebbe successivamente accedere a M1.a
e M1.b
ma non a M1.d
(perché non è stato esportato).
Potresti anche fare:
MODULE M2;
FROM M1 IMPORT a, P;
Alcuni linguaggi sembrano decisamente Pythonish ...
MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
WriteString("Hello World!");
END Hello.
Questo è qualcosa di più che nascondere qualcosa che non rientra nello spazio dei nomi clobber. Ciò sta nascondendo la visibilità di alcune variabili, procedure o funzioni da altri moduli. ( Esercitazione su moduli all'interno di Modula-2 ) Questo tipo di incapsulamento è ciò a cui spesso pensiamo ora e vediamo nelle lingue come C ++ (1983), Java (1995) e C # (2000).
Modula non era l'unica lingua per nascondere una qualche forma di dati. Simula era un linguaggio precoce orientato agli oggetti che aveva alcuni incapsulamenti di dati:
Questaparticolareestensioneeradaun'estensionesuccessivaallalinguada intorno al 1972 . Questo si è fatto strada nello standard di Simula 87 (l'originale Simula 67 aveva tutto come pubblico e mancava l'incapsulamento ). Questo linguaggio ha una strong influenza su C ++ ( Conversazione con Bjarne Stroustrup , Perché ho creato C ++ ).
Questo blocco di protezione per un identificatore consentiva a una classe di specificare se le sue sottoclassi - Hidden
potevano essere utilizzate solo nella classe in cui la sua dichiarata e Protected
potevano essere utilizzate solo dove era dichiarata e le sue sottoclassi.
Un'altra menzione da un altro linguaggio orientato agli oggetti vecchi - Smalltalk (1972).
In Smalltalk, tutte le variabili di istanza erano protette (visibili solo alla classe e alle sue sottoclassi) e tutti i metodi erano pubblici ( Modello oggetto Smalltalk ). Questo potrebbe essere usato per preformare qualche incapsulamento.
È stata considerata una cattiva forma accedere a una variabile di istanza della superclasse da una sottoclasse o a invocare un metodo nel 'privato' categoria ).
Lettura correlata: