Global verileri gizleme hakkında konuşurken Code Complete'in yazarı ne demektir?


25

Kod Tamamlama 2. Baskı'nın 6.4. Bölümünde genel verilerin gizlenmesi ile ilgili bir paragraf vardır. Özellikle ilgilendiğim şey, McConnell'in (kitabın yazarı) küresel verileri gizlemenin yararlarına örnekler vermesidir. Anlayamadığım bir örnek var. Kitabın İngilizce versiyonuna sahip değilim, bu yüzden metni çevirmeye çalışacağım.

Global veri gizleme. (...) Verileri yapısını, programı değiştirmeden değiştirebilirsiniz.

McConnell bununla ne demek istiyor? Küresel verileri değiştirmekten mi bahsediyor? Öyleyse, bu verileri almak için yöntemler kullanırken neden programınızı değiştirmeniz gerekmez? Ya da belki burada başka bir şeyden bahsediyor?

Birisi kafamdaki karışıklığı giderirse çok sevinirim. Bir örnek de sunabilseydiniz, harika olurdu (örnekler harika, biliyorsunuz).

Yanıtlar:


44

Yazar bahsediyor yapının küresel veri ve nasıl o yapıyı değiştirerek kullanır bunu o kodu etkileyecek.

Genel verilere doğrudan erişilebiliyorsa, veri yapısını değiştirmek potansiyel olarak onu kullanan tüm kodları değiştirmek zorunda olduğunu gösterir.

Genel verilere yalnızca bir arabirim (örneğin, bir dizi işlev) aracılığıyla erişilebiliyorsa, yapıyı değiştirmek yalnızca bu erişimcileri değiştirmek anlamına gelir. Kodun geri kalanının değişmesi gerekmez.

Basit bir örnek, bir tamsayı dizisi ile başlayan kod olacaktır ( static int[]örneğin bir Java sınıfında). Bu diziye genel olarak erişilebilir ise, insanlar diziyi sözdizimi ile kullanmaya başlarlar (örn. Global.cool_stuff[x] = 1;). Herhangi bir nedenden dolayı, bu diziyi bir koleksiyon türüne (vektör, liste, ne olursa olsun) değiştirmek istiyorsanız, o zaman bu en azından sözdizimsel olarak geçersiz hale geldiğinden, bu global veri parçasını kullanan tüm kodu değiştirmeniz gerekir.

Bu verilere yalnızca bir dizi erişimci / mutator işlevi (erişilebilir bir arayüzün arkasına gizlenmiş olarak) erişilebilseydi, o zaman yalnızca bu küçük işlev kümesini değiştirmeniz gerekirdi. Gerçekten verileri kullanan kod değişmeden kalabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.