¿Qué quiere decir el autor de Code Complete cuando habla de ocultar datos globales?

25

En la sección 6.4 de Code Complete 2nd Edition hay un párrafo sobre cómo ocultar datos globales. Lo que me interesa particularmente es que McConnell (el autor del libro) da ejemplos de los beneficios de ocultar datos globales. Hay un ejemplo que no puedo entender. No tengo la versión en inglés del libro, así que intentaré traducir el texto.

Ocultar datos globales. (...) Puede cambiar la estructura de los datos sin modificar el programa.

¿Qué quiere decir McConnell con eso? ¿Está hablando de cambiar los datos globales? Si es así, ¿por qué no tendría que modificar su programa cuando utiliza métodos para recuperar esos datos? ¿O tal vez se está refiriendo a algo más aquí?

Apreciaría mucho si alguien pudiera aclarar mi confusión. Si también pudieras proporcionar un ejemplo, sería genial (los ejemplos son increíbles, ya sabes).

Kapol
fuente

Respuestas:

44

El autor habla de la estructura de los datos globales y de cómo cambiar esa estructura afectaría el código que la usa.

Si los datos globales son accesibles directamente, entonces cambiar la estructura de datos implica potencialmente tener que cambiar todo el código que los usa.

Si solo se puede acceder a los datos globales a través de una interfaz (por ejemplo, un conjunto de funciones), entonces cambiar la estructura implica solo cambiar estos accesores. El resto del código no tiene que cambiar.

Como ejemplo simple, sería un código que comienza con una matriz de enteros ( static int[]por ejemplo, una clase de Java). Si esa matriz es accesible globalmente, la gente comenzará a usarla con la sintaxis de la matriz (es decir Global.cool_stuff[x] = 1;). Si por alguna razón desea cambiar esa matriz a un tipo de colección (vector, lista, lo que sea), entonces tiene que cambiar todo el código que usa este dato global ya que se ha vuelto, al menos sintácticamente, inválido.

Si esos datos solo hubieran sido accesibles a través de un conjunto de funciones de acceso / mutación ("oculto detrás" de una interfaz), entonces solo necesitaría cambiar ese pequeño conjunto de funciones. El código que realmente usa los datos puede permanecer sin cambios.

Estera
fuente