2009-08-26 6 views
18

Come hanno fatto queste parole chiave e questi concetti prendono vita? Quali erano le forze e i problemi che li hanno fatti apparire? Qual è stata la prima lingua ad averli?Cronologia dei modificatori del controllo di accesso come pubblica/privata/protetta

In realtà, non si tratta solo di public/private/protected, ma piuttosto l'intera gamma di parole chiave che fanno rispettare alcune regole (abstract, final, internal).

Ma, per favore, non presumere le cose. Rispondi se conosci almeno una parte della risposta o della risposta se hai vissuto quei momenti. I riferimenti sono molto apprezzati.

+2

ottima domanda! –

+0

Abbiamo ancora bisogno di un'origine per _interface_. Spero solo che non sia OLE/COM. –

+0

Mi sorprende davvero la mancanza di informazioni su questo argomento. Beh, almeno non sembra trovarlo facilmente. –

risposta

8

Simula (1967), considerato il primo linguaggio OO, ha modificatori chiamati protected and hidden. Presumo che il pubblico sia l'impostazione predefinita, non riesco a ricordare. Utilizza anche virtuale.

E, con grazie a Pavel, Simula ha introdotto le parole chiave più importanti (e concetti) di classe, questo, nuovi tipi, downcasting e di riferimento.

Smalltalk (1980), un linguaggio OO più tardi, ma molto più fondamentale, ci ha dato Metodi rispondere ai messaggi . Questo fondamentalmente è la stessa funzionalità delle funzioni virtuali. Messaggi e Classi sono stati successivamente imitati in C (non OO) per fornire il comportamento polimorfico dell'API di Windows. Ma hanno ancora bisogno di brutte istruzioni di switch e puntatori di funzioni per sostituire l'ereditarietà.

Il primo utilizzo di Proprietà era, per quanto ne so, in Delphi (Object Pascal, < 1994).

+3

Questa è la vera origine. '' Hidden' di Simula era ciò che oggi chiamiamo 'private',' protected' è quello che è e il default era effettivamente pubblico. Simula ha anche introdotto i termini "classe" e "oggetto" nel senso in cui sono utilizzati nell'ODO/OOD di oggi, l'ereditarietà singola per le classi, il termine e il concetto di metodi 'virtuali', la notazione a punti per l'accesso al campo e le chiamate di metodo , l'idea dei downcast controllati e del commutatore di tipi, e la nozione che le classi sono "tipi di riferimento" con identità referenziale intrinseca (al contrario di altri tipi che sono "tipi di valore"). –

+1

Oh, ho dimenticato l'idea di flussi I/O generalizzati come oggetti, e l'idea che gli stream non devono essere solo file - in Simula, le stringhe stesse sono flussi (quindi sono un po 'come "StringBuilder") in C#). –

+2

... e anche la parola chiave 'new' per creare un'istanza di oggetti e' this' per riferirsi all'oggetto stesso all'interno di un metodo. –

0

questo genere di cose inizia con i progettisti di più linguaggi che richiedono "qual è un nome semplice e logico per questo concetto"? poi, nel tempo, alcuni nomi diventano popolari (a volte perché sono buoni nomi, a volte solo perché). aggiungi 20 anni e la maggior parte delle persone finisce per scegliere gli stessi nomi, in base a ciò che hanno visto.

una domanda simile, forse, per chiedere come si aggiungono nuove parole (per esempio) alla lingua inglese.

+1

In realtà sono interessato più al processo che ha portato a quel concetto che alla scelta dei nomi. I nomi contano, ma è interessante vedere quali problemi hanno in quel momento che li hanno resi necessari per questi concetti. Forse c'era un grande progetto che è stato dimenticato nel frattempo. Chissà. –

+1

Simula, come suggerisce il nome, era un linguaggio progettato per la simulazione di processi - originariamente (Simula I) era centrato attorno a "attori", ma i progettisti sentivano che il concetto poteva essere ulteriormente generalizzato, e quindi classi/oggetti nascevano in Simula 67. –

2

pubblico, privato e protetto access modifiers provengono da C++. It seems che pubblico e privato esistevano già in "C con classi", precursore del C++ di breve durata. Questo è probabilmente dettagliato in The design and Evolution of C++.

I think abstract e final provengono da Java e interni da C#.

+0

Grazie per il link. Anche se non del tutto completo, offre uno sfondo. –

0

Per C++, le origini della protezione privata e pubblica provengono dagli esperimenti di Stroustrup con C With Classes, ma da un sistema ancora più vecchio: il computer Cambridge CAP. Questo è descritto nella sezione 2.10 di "The Design & Evolution of C++".

Per quanto riguarda protetto, che ha avuto un passato più torbido & Non ho un buon riferimento per questo.