Temel fikir, korumalı olarak ilan edilen bir "alan" (örnek seviye değişkeni) muhtemelen olması gerekenden daha görünür, ve isteyebileceğinizden daha az "korumalı" olmasıdır. C / C ++ / Java / C # öğesinde "yalnızca aynı derlemedeki alt sınıflar tarafından erişilebilir" ifadesiyle eşdeğer bir erişim değiştiricisi yoktur, bu nedenle size derlemenizdeki alana erişebilecek kendi çocuklarınızı tanımlama olanağı sağlar, ancak diğer meclislerde yaratılan çocukların aynı erişime izin vermemesi; C #, dahili ve korumalı değiştiricilere sahiptir, ancak bunları birleştirmek, erişimi "dahili veya korumalı" değil "iç veya korumalı" yapar. Öyleyse, korunan bir alana, o çocuğu ya da başkasını yazdıysanız, herhangi bir çocuk tarafından erişilebilir. Korumalı böylece bir hacker için açık bir kapıdır.
Ayrıca, tanımlarına göre alanlar, onları değiştirmek için doğal olan hiçbir doğrulamaya sahip değildir. C # 'da bir tane yapabilir, bu değer türlerini etkili bir şekilde sabit hale getirir ve referans türleri yeniden başlatılamaz (ama yine de çok değişken). Bu nedenle, korumalı bile olsa, çocuklarınız (güvenemeyeceğiniz) bu alana erişebilir ve nesnenin durumunu tutarsız hale getirerek (kaçınılması gereken bir şey), onu geçersiz bir şeye ayarlayabilir.
Alanlarla çalışmanın kabul edilen yolu, onları özel kılmak ve bir özelliğe ve / veya alıcı ve ayarlayıcı yöntemine erişmek. Sınıftaki tüm tüketicilerin değere ihtiyacı varsa, alıcıyı (en azından) herkese açık yapın. Sadece çocuklar ihtiyaç duyuyorsa, alıcıyı koruyun.
Soruyu cevaplayan bir başka yaklaşım kendinize sormak; neden bir çocuk yöntemindeki kod, durum verilerimi doğrudan değiştirme yeteneğine ihtiyaç duyuyor? Bu kod hakkında ne diyor? Bu, yüzündeki "dikey mesafe" argümanıdır. Bir çocukta doğrudan ebeveyn durumunu değiştirmesi gereken bir kod varsa, o zaman belki de bu kod ilk olarak ebeveyne ait olmalıdır?