Co oznacza autor Code Complete, mówiąc o ukrywaniu globalnych danych?

25

W sekcji 6.4 Code Complete 2nd Edition znajduje się akapit dotyczący ukrywania danych globalnych. Szczególnie mnie interesuje to, że McConnell (autor książki) podaje przykłady korzyści z ukrywania globalnych danych. Jest jeden przykład, którego nie rozumiem. Nie mam angielskiej wersji książki, więc spróbuję przetłumaczyć tekst.

Ukrywanie globalnych danych. (...) Możesz zmienić strukturę danych bez modyfikowania programu.

Co przez to rozumie McConnell? Czy on mówi o zmianie globalnych danych? Jeśli tak, to dlaczego nie musiałbyś modyfikować programu, gdy używasz metod odzyskiwania tych danych? A może ma tu na myśli coś innego?

Byłbym bardzo wdzięczny, gdyby ktoś mógł wyjaśnić moje zamieszanie. Gdybyś mógł podać również przykład, byłoby świetnie (przykłady są niesamowite, wiesz).

Kapol
źródło

Odpowiedzi:

44

Autor mówi o strukturze danych globalnych i o tym, jak zmiana tej struktury wpłynie na kod, który z niej korzysta.

Jeśli dane globalne są dostępne bezpośrednio, zmiana struktury danych oznacza potencjalnie konieczność zmiany całego kodu, który z nich korzysta.

Jeśli globalne dane są dostępne tylko przez interfejs (np. Zestaw funkcji), to zmiana struktury oznacza tylko zmianę tych akcesoriów. Reszta kodu nie musi się zmieniać.

Prostym przykładem byłby kod, który zaczyna się od tablicy liczb całkowitych (na przykład static int[]w pewnej klasie Java). Jeśli ta tablica jest globalnie dostępna, ludzie zaczną jej używać ze składnią tablicy (tj Global.cool_stuff[x] = 1;.). Jeśli z jakiegoś powodu chcesz zmienić tę tablicę na typ kolekcji (wektor, lista, cokolwiek), musisz zmienić cały kod, który wykorzystuje ten kawałek danych globalnych, ponieważ stał się on, przynajmniej składniowo, nieprawidłowy.

Gdyby te dane były dostępne tylko poprzez zestaw funkcji akcesor / mutator („ukryty za” interfejsem), wystarczyłaby tylko zmienić ten niewielki zestaw funkcji. Kod, który faktycznie wykorzystuje dane, może pozostać niezmieniony.

Mata
źródło