Что автор Code Complete имеет в виду, говоря о сокрытии глобальных данных?

25

В разделе 6.4 Code Complete 2 Edition есть параграф о сокрытии глобальных данных. Что меня особенно интересует, так это то, что Макконнелл (автор книги) приводит примеры преимуществ сокрытия глобальных данных. Есть один пример, который я не могу понять. У меня нет английской версии книги, поэтому я постараюсь перевести текст.

Сокрытие глобальных данных. (...) Вы можете изменить структуру данных без изменения программы.

Что Макконнелл подразумевает под этим? Он говорит об изменении глобальных данных? Если так, почему бы вам не изменить свою программу, когда вы используете методы для получения этих данных? Или, может быть, он имеет в виду что-то еще здесь?

Я был бы очень признателен, если бы кто-то смог прояснить мою путаницу. Если бы вы могли также привести пример, это было бы здорово (примеры потрясающие, вы знаете).

Kapol
источник

Ответы:

44

Автор говорит о структуре глобальных данных и о том, как изменение этой структуры повлияет на код, который их использует.

Если глобальные данные доступны напрямую, то изменение структуры данных подразумевает потенциальную необходимость изменения всего кода, который их использует.

Если глобальные данные доступны только через интерфейс (например, набор функций), то изменение структуры подразумевает только изменение этих методов доступа. Остальная часть кода не должна меняться.

В качестве простого примера можно привести код, который начинается с массива целых чисел (например, static int[]в некотором классе Java). Если этот массив доступен глобально, то люди начнут использовать его с синтаксисом массива (то есть Global.cool_stuff[x] = 1;). Если по какой-то причине вы хотите изменить этот массив на тип коллекции (вектор, список и т. Д.), Вам придется изменить весь код, который использует этот фрагмент глобальных данных, поскольку он стал, по крайней мере синтаксически, недействительным.

Если бы эти данные были доступны только через набор функций доступа / мутатора («спрятанный за» интерфейсом), вам нужно было бы только изменить этот небольшой набор функций. Код, который фактически использует данные, может остаться без изменений.

Мат
источник