Was bedeutet der Autor von Code Complete, wenn es darum geht, globale Daten zu verbergen?

25

In Abschnitt 6.4 der Code Complete 2nd Edition gibt es einen Absatz zum Ausblenden globaler Daten. Was mich besonders interessiert, ist, dass McConnell (der Autor des Buches) Beispiele für die Vorteile des Versteckens globaler Daten gibt. Es gibt ein Beispiel, das ich nicht verstehen kann. Ich habe keine englische Version des Buches, daher versuche ich, den Text zu übersetzen.

Globale Daten verstecken. (...) Sie können die Struktur der Daten ändern, ohne das Programm zu ändern.

Was bedeutet McConnell damit? Spricht er über die Veränderung globaler Daten? Wenn ja, warum müssten Sie Ihr Programm nicht ändern, wenn Sie Methoden zum Abrufen dieser Daten verwenden? Oder bezieht er sich hier auf etwas anderes?

Ich würde mich sehr freuen, wenn jemand meine Verwirrung aufklären könnte. Wenn Sie auch ein Beispiel liefern könnten, wäre es großartig (Beispiele sind fantastisch, wissen Sie).

Kapol
quelle

Antworten:

44

Der Autor spricht über die Struktur der globalen Daten und wie sich eine Änderung dieser Struktur auf den Code auswirken würde, der sie verwendet.

Wenn auf die globalen Daten direkt zugegriffen werden kann, müssen Sie beim Ändern der Datenstruktur möglicherweise den gesamten Code ändern, der sie verwendet.

Wenn der Zugriff auf die globalen Daten nur über eine Schnittstelle (z. B. eine Reihe von Funktionen) möglich ist, bedeutet eine Änderung der Struktur, dass nur diese Accessoren geändert werden. Der Rest des Codes muss sich nicht ändern.

Ein einfaches Beispiel wäre Code, der mit einem Array von Ganzzahlen beginnt (beispielsweise static int[]in einigen Java-Klassen). Wenn auf dieses Array global zugegriffen werden kann, wird es mit der Array-Syntax (dh Global.cool_stuff[x] = 1;) verwendet. Wenn Sie dieses Array aus irgendeinem Grund in einen Auflistungstyp (Vektor, Liste, was auch immer) ändern möchten, müssen Sie den gesamten Code ändern, der diese globalen Daten verwendet, da sie zumindest syntaktisch ungültig geworden sind.

Wenn diese Daten nur über eine Reihe von Accessor / Mutator-Funktionen ("versteckt hinter" einer Schnittstelle) zugänglich gewesen wären, müssten Sie nur diese kleinen Funktionen ändern. Der Code, der die Daten tatsächlich verwendet, kann unverändert bleiben.

Matte
quelle