Apa maksud penulis Kode Lengkap ketika berbicara tentang menyembunyikan data global?

25

Di bagian 6.4 dari Code Complete 2nd Edition ada paragraf tentang menyembunyikan data global. Apa yang saya sangat tertarik, adalah bahwa McConnell (penulis buku) memberikan contoh manfaat menyembunyikan data global. Ada satu contoh yang tidak bisa saya mengerti. Saya tidak memiliki buku versi bahasa Inggris, jadi saya akan mencoba menerjemahkan teksnya.

Menyembunyikan data global. (...) Anda dapat mengubah struktur data tanpa memodifikasi program.

Apa yang dimaksud McConnell dengan hal itu? Apakah dia berbicara tentang mengubah data global? Jika demikian, mengapa Anda tidak perlu memodifikasi program Anda ketika Anda menggunakan metode untuk mengambil kembali data itu? Atau mungkin dia merujuk sesuatu yang lain di sini?

Saya akan sangat menghargai jika seseorang dapat menjernihkan kebingungan saya. Jika Anda juga bisa memberikan contoh, itu akan bagus (contohnya mengagumkan, Anda tahu).

Kapol
sumber

Jawaban:

44

Penulis berbicara tentang struktur data global, dan bagaimana mengubah struktur itu akan memengaruhi kode yang menggunakannya.

Jika data global dapat diakses secara langsung, maka mengubah struktur data menyiratkan kemungkinan harus mengubah semua kode yang menggunakannya.

Jika data global hanya dapat diakses melalui antarmuka (misalnya serangkaian fungsi), maka mengubah struktur hanya berarti mengubah pengakses ini. Sisa kode tidak perlu diubah.

Sebagai contoh sederhana akan menjadi kode yang dimulai dengan array integer (a static int[]di beberapa kelas Java misalnya). Jika array itu dapat diakses secara global, maka orang akan mulai menggunakannya dengan sintaks array (yaitu Global.cool_stuff[x] = 1;). Jika karena alasan tertentu Anda ingin mengubah array itu menjadi tipe koleksi (vektor, daftar, apa pun), maka Anda harus mengubah semua kode yang menggunakan potongan data global ini karena telah menjadi, setidaknya secara sintaksis, tidak valid.

Jika data itu hanya dapat diakses melalui satu set fungsi accessor / mutator ("tersembunyi di belakang" sebuah antarmuka), maka Anda hanya perlu mengubah set fungsi kecil itu. Kode yang benar-benar menggunakan data dapat tetap tidak berubah.

Tikar
sumber