O que o autor do Code Complete significa quando se trata de ocultar dados globais?

25

Na seção 6.4 do Code Complete 2nd Edition, há um parágrafo sobre como ocultar dados globais. O que me interessa particularmente é que McConnell (o autor do livro) fornece exemplos dos benefícios de ocultar dados globais. Há um exemplo que não consigo entender. Como não tenho a versão em inglês do livro, tentarei traduzir o texto.

Ocultando dados globais. (...) Você pode alterar a estrutura dos dados sem modificar o programa.

O que McConnell quer dizer com isso? Ele está falando sobre a alteração de dados globais? Se sim, por que você não precisaria modificar seu programa quando estiver usando métodos para recuperar esses dados? Ou talvez ele esteja se referindo a outra coisa aqui?

Eu apreciaria muito se alguém pudesse esclarecer minha confusão. Se você também pudesse fornecer um exemplo, seria ótimo (exemplos são impressionantes, você sabe).

Kapol
fonte

Respostas:

44

O autor está falando sobre a estrutura dos dados globais e como a alteração dessa estrutura afetaria o código que os utiliza.

Se os dados globais estiverem acessíveis diretamente, a alteração da estrutura de dados implica potencialmente ter que alterar todo o código que os utiliza.

Se os dados globais estiverem acessíveis apenas através de uma interface (por exemplo, um conjunto de funções), a alteração da estrutura implica apenas a alteração desses acessadores. O restante do código não precisa ser alterado.

Como exemplo simples, seria o código que começa com uma matriz de números inteiros (a static int[]em alguma classe Java, por exemplo). Se esse array estiver acessível globalmente, as pessoas começarão a usá-lo com a sintaxe do array (ie Global.cool_stuff[x] = 1;). Se, por algum motivo, você quiser alterar essa matriz para um tipo de coleção (vetor, lista, o que for), precisará alterar todo o código que usa essa parte dos dados globais, pois ela se tornou, pelo menos sintaticamente, inválida.

Se esses dados tivessem sido acessíveis apenas através de um conjunto de funções de acessador / mutador ("oculto por trás" de uma interface), seria necessário alterar apenas esse pequeno conjunto de funções. O código que realmente usa os dados pode permanecer inalterado.

Esteira
fonte