Що означає автор Code Complete, коли йдеться про приховування глобальних даних?


25

У розділі 6.4 другого видання Code Complete є абзац про приховування глобальних даних. Що мене особливо цікавить, це те, що МакКоннелл (автор книги) наводить приклади переваг приховування глобальних даних. Є один приклад, який я не можу зрозуміти. У мене немає англійської версії книги, тому спробую перекласти текст.

Приховування глобальних даних. (...) Ви можете змінити структуру даних, не змінюючи програму.

Що означає МакКоннелл? Він говорить про зміну глобальних даних? Якщо так, то чому б вам не довелося змінювати свою програму, коли ви використовуєте методи для отримання цих даних? А може, він має на увазі щось інше тут?

Я дуже вдячний, якби хтось міг очистити мою плутанину. Якщо ви також можете навести приклад, це було б чудово (приклади є приголомшливими, ви знаєте).

Відповіді:


44

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

Якщо глобальні дані доступні безпосередньо, то зміна структури даних означає, що потенційно потрібно змінити весь код, який їх використовує.

Якщо глобальні дані доступні лише через інтерфейс (наприклад, набір функцій), то зміна структури означає лише зміну цих аксесуарів. Решту коду не потрібно змінювати.

Як простий приклад може бути код, який починається з масиву цілих чисел (наприклад, static int[]у деяких класах Java). Якщо цей масив доступний у всьому світі, тоді люди почнуть використовувати його з синтаксисом масиву (тобто Global.cool_stuff[x] = 1;). Якщо ви чомусь хочете змінити цей масив на тип колекції (вектор, список, будь-який інший), вам доведеться змінити весь код, який використовує цей фрагмент глобальних даних, оскільки він став, принаймні синтаксично, недійсним.

Якби ці дані були доступні лише через набір функцій аксесуара / мутатора ("захований за" інтерфейсом), тоді вам потрібно буде лише змінити цей невеликий набір функцій. Код, який фактично використовує дані, може залишатися незмінним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.