Che cosa significa l'autore di Code Complete quando parla di nascondere i dati globali?

25

Nella sezione 6.4 di Code Complete 2nd Edition c'è un paragrafo su come nascondere i dati globali. Ciò a cui sono particolarmente interessato, è che McConnell (l'autore del libro) fornisce esempi dei vantaggi di nascondere i dati globali. C'è un esempio che non riesco a capire. Non ho la versione inglese del libro, quindi proverò a tradurre il testo.

Hiding global data. (...) You can change the structure of the data without modifying the program.

Che cosa significa McConnell? Sta parlando di cambiare i dati globali? In tal caso, perché non dovresti modificare il tuo programma quando usi metodi per recuperare quei dati? O forse si sta riferendo a qualcos'altro qui?

Apprezzerei molto se qualcuno potesse chiarire la mia confusione. Se potessi anche fornire un esempio, sarebbe fantastico (gli esempi sono fantastici, lo sai).

    
posta Kapol 01.05.2014 - 11:48
fonte

1 risposta

44

L'autore sta parlando della struttura dei dati globali e di come la modifica di tale struttura avrebbe un impatto sul codice che la utilizza.

Se i dati globali sono accessibili direttamente, la modifica della struttura dei dati implica potenzialmente la necessità di modificare tutto il codice che li utilizza.

Se i dati globali sono accessibili solo tramite un'interfaccia (ad esempio un insieme di funzioni), la modifica della struttura implica solo la modifica di tali accessori. Il resto del codice non deve cambiare.

Come esempio semplice sarebbe il codice che inizia con una matrice di numeri interi (un static int[] in alcune classi Java per esempio). Se quell'array è accessibile a livello globale, la gente inizierà a usarlo con la sintassi dell'array (cioè Global.cool_stuff[x] = 1; ). Se per qualche motivo vuoi cambiare quell'array in un tipo di raccolta (vettore, elenco, qualunque cosa), devi modificare tutto il codice che usa questo pezzo di dati globali poiché è diventato, almeno sintatticamente, non valido.

Se quei dati fossero stati accessibili solo tramite una serie di funzioni accessor / mutator ("nascoste dietro" un'interfaccia), allora avresti solo bisogno di cambiare quel piccolo insieme di funzioni. Il codice che utilizza effettivamente i dati può rimanere invariato.

    
risposta data 01.05.2014 - 12:12
fonte

Leggi altre domande sui tag