グローバルデータの非表示について話すとき、Code Completeの作成者は何を意味しますか?


25

Code Complete 2nd Editionのセクション6.4には、グローバルデータの非表示に関する段落があります。私が特に興味を持っているのは、McConnell(本の著者)がグローバルデータを隠すことの利点の例を示していることです。理解できない例が1つあります。私はこの本の英語版を持っていないので、テキストを翻訳しようとします。

グローバルデータを非表示にします。(...)プログラムを変更せずにデータの構造を変更できます。

McConnellとはどういう意味ですか?彼はグローバルデータの変更について話していますか?その場合、メソッドを使用してそのデータを取得するときにプログラムを変更する必要がないのはなぜですか?それとも、彼はここで何か他のものを指しているのでしょうか?

誰かが私の混乱を解消できれば幸いです。例を提供することもできれば、それは素晴らしいことです(例は素晴らしいです、ご存知でしょう)。

回答:


44

著者は、グローバルデータの構造、およびその構造の変更がそれを使用するコードにどのように影響するかについて話している。

グローバルデータに直接アクセスできる場合、データ構造を変更すると、それを使用するすべてのコードを変更しなければならない可能性があります。

グローバルデータにインターフェイス(関数セットなど)を介してのみアクセスできる場合、構造を変更すると、これらのアクセサーのみを変更することになります。残りのコードを変更する必要はありません。

簡単な例としては、整数の配列で始まるコードがあります(static int[]たとえば、Javaクラスの場合)。その配列がグローバルにアクセス可能な場合、人々は配列構文でそれを使用し始めます(すなわちGlobal.cool_stuff[x] = 1;)。何らかの理由でその配列をコレクション型(ベクトル、リストなど)に変更する場合は、少なくとも構文的には無効になっているため、このグローバルデータを使用するすべてのコードを変更する必要があります。

そのデータがアクセサー/ミューテーター関数のセット(インターフェースの「背後に隠れている」)を介してのみアクセス可能であった場合、その小さな関数セットのみを変更する必要があります。実際にデータを使用するコードは変更されないままにすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.