Que signifie l'auteur de Code Complete lorsqu'il parle de masquer des données globales?

25

Dans la section 6.4 de Code Complete 2nd Edition, il y a un paragraphe sur le masquage des données globales. Ce qui m'intéresse particulièrement, c'est que McConnell (l'auteur du livre) donne des exemples des avantages de cacher des données globales. Il y a un exemple que je ne peux pas comprendre. Je n'ai pas la version anglaise du livre, je vais donc essayer de traduire le texte.

Masquage des données globales. (...) Vous pouvez changer la structure des données sans modifier le programme.

Qu'est-ce que McConnell veut dire par là? Parle-t-il de changer les données mondiales? Si c'est le cas, pourquoi n'auriez-vous pas à modifier votre programme lorsque vous utilisez des méthodes pour récupérer ces données? Ou peut-être fait-il référence à autre chose ici?

J'apprécierais grandement si quelqu'un pouvait dissiper ma confusion. Si vous pouviez également fournir un exemple, ce serait formidable (les exemples sont géniaux, vous savez).

Kapol
la source

Réponses:

44

L'auteur parle de la structure des données globales et de l'impact de la modification de cette structure sur le code qui les utilise.

Si les données globales sont accessibles directement, la modification de la structure des données implique potentiellement de devoir modifier tout le code qui les utilise.

Si les données globales ne sont accessibles que via une interface (par exemple un ensemble de fonctions), alors changer la structure implique seulement de changer ces accesseurs. Le reste du code n'a pas à changer.

Un exemple simple serait le code qui commence par un tableau d'entiers (un static int[]dans une classe Java par exemple). Si ce tableau est accessible globalement, alors les gens commenceront à l'utiliser avec la syntaxe du tableau (ie Global.cool_stuff[x] = 1;). Si, pour une raison quelconque, vous voulez changer ce tableau en un type de collection (vecteur, liste, peu importe), vous devez changer tout le code qui utilise cette donnée globale car il est devenu, au moins syntaxiquement, invalide.

Si ces données n'avaient été accessibles que via un ensemble de fonctions d'accesseur / mutateur ("cachées derrière" une interface), il vous suffirait de modifier ce petit ensemble de fonctions. Le code qui utilise réellement les données peut rester inchangé.

Tapis
la source