Konu Anlatımı
Erişim Belirleyicileri ve Kapsülleme
Bir sınıf yazarken en sık yapılan yanlış, bütün üyeleri dışarıya açmaktır. Böylece sınıfın arayüzü şişer, veri dışarıdan serbestçe değiştirilebilir ve sınıfı kullanan kod kurallara uymayabilir. Erişim belirleyicisi, bir üyenin hangi noktalardan görülebileceğini ve değiştirilebileceğini yazan küçük bir ifadedir. Kapsülleme ise veriyi sınıfın içinde saklayıp dışarıya yalnızca denetimli yollardan erişim sağlama ilkesidir.
Bir sensör sınıfı düşünün: okuduğu ham değer 0 ile 255 arasında olmalıdır. Alanı doğrudan açarsak çağıran kod 300 yazabilir ve ölçüm bozulur. Alanı özel tutup genel bir özellikle erişim sağlarsak yazma isteği önce sınıfa uğrar, kural denetlenir ve geçersiz değer alana hiç yazılmaz. Bu iki satırlık fark, sınıfın ilerideki tüm kullanımını güvenli hâle getirir.
1. Ne Öğreneceğiz ve Ön Bilgi
Bu konu için sınıf, üye, alan, özellik ve metot kavramlarının bilinmesi yeterlidir. Değişken tanımlama, veri tipi seçimi ve new ile nesne üretme ön bilgidir. Kalıtım konusu önceden görüldüyse korumalı erişimin neden gerekli olduğu daha kolay anlaşılır.
- Dört erişim belirleyicisinin kapsamını karşılaştırmak
- Kapsülleme ilkesini sınıf üzerinde kurmak
- Özellik tanımlayıp yazma yoluna doğrulama eklemek
- Salt okunur üye ve değiştirilemeyen alan kullanmak
- Ortak sayaç için statik alan tanımlamak
Ön bilgiyi pekiştirmek için küçük bir deney yapabilirsiniz: bir sınıfta alanı önce genel, sonra özel yapıp iki sürümünü karşılaştırın. Genel sürümde hatalı değer sınıfa girerken özel sürümde sınıf kendi kuralını uygular; farkı görmek kuralları neden yazdığımızı somutlaştırır.
2. Temel Kavramlar ve Sınıflandırma
Dört erişim belirleyicisi vardır. Genel üye her yerden okunur ve değiştirilir. Korumalı üye kendi sınıfından ve o sınıftan türeyen sınıflardan erişilir, alakasız sınıflardan erişilemez. Derleme içi üye aynı derleme biriminde bulunan sınıflar tarafından kullanılabilir. Özel üye ise yalnızca tanımlandığı sınıfın içinden erişilebilir. Kapsam küçükten büyüğe doğru bu dörtlü sıralanır.
Kapsülleme veriyi özel alanda saklayıp dışarıya özellik ve metotlardan erişim sağlamaktır. Özellik, alanın okuma ve yazma yollarını saran bir yapıdır; yazma işlevi tanımlanmazsa üye salt okunur olur ve değer dışarıdan değiştirilemez. Metotlarla erişim ise yalnızca okuma ya da yazma yeteneği vermek yerine birden çok adımda işlem yapabilir.
Bazı üyeler için ek kurallar vardır. Değiştirilemeyen alan yalnızca tanımlandığı yerde ya da yapıcı metotta bir kez atanabilir; sabit değerler ise derleme anında sabitlenir. Statik alan sınıfa aittir, tüm nesneler aynı değeri paylaşır ve bu tür alanlar sayaç için uygundur. Alan adı ile metot parametresi adı aynı olduğunda nesnenin kendi üyesine işaretçiyle erişilir.
| Belirleyici | Kimler Erişebilir | Değiştirilebilir mi | Uygun Kullanım |
|---|
| Özel | Yalnızca kendi sınıfı | Evet, sınıf içinden | Alanlar ve yardımcı işler |
| Derleme içi | Aynı derleme birimindeki sınıflar | Evet | Proje içi ortak üyeler |
| Korumalı | Kendisi ve türeyen sınıflar | Evet | Kalıtımda ortak veri |
| Genel | Her yer | Evet | Sınıfın arayüzü |
3. Basit Örnek ve Adım Adım Çözüm
Basit örnek, sıcaklık ölçümü tutan bir sınıftır. Ölçüm alanı özel olarak tanımlanır ve değeri 0 ile 100 arasında olmalıdır. Genel özellik tanımlanır; yazma işlevi önce değeri denetler, kurala uymayan bir girişte değeri atamayı reddeder. Metot ise okunan değeri iki katına çıkarıp döndürür.
- Adım 1: Sınıf içinde özel bir alan tanımlayın ve varsayılan değer verin.
- Adım 2: Aynı ada sahip genel bir özellik yazın, okuma ve yazma işlevlerini tanımlayın.
- Adım 3: Yazma işlevinde değerin izin verilen aralıkta olup olmadığını denetleyin.
- Adım 4: Ölçümü okuyan bir metot ekleyip metottan da alana erişin.
Bu kurguda dışarıdan yalnızca özellik kullanılır, alan doğrudan değiştirilemez. Aralık dışı bir değer yazılmaya çalışılırsa yazma işlevi değeri kabul etmez ve eski değer korunur. Alanı genel yapsaydık aynı koruma kuralı kendiliğinden oluşmazdı.
4. İleri Örnek ve Saha Uygulaması
Saha uygulaması olarak robotik bir platformda motor sınıfı kurulabilir. Devir sayısı alanı özel tutulur, genel özellikle atanırken değerin 0 ile 3000 arasında olduğu denetlenir. Yön bilgisi salt okunur bir özellik olarak sunulur, çünkü yön değiştirme işlemi yalnızca bir metotla yapılmalıdır. Üretilen motor sayısı ise statik bir alanda tutulur, böylece kaç platformun kurulduğu tek yerden izlenir.
Devir sayısı değiştirildiğinde geri bildirim metodu çalıştırılabilir; metot içinde alanın adı ile parametre adı çakışırsa işaretçiyle alana erişilir. Böylece aynı metot hem atama hem bildirim işini tek yerden yapar ve denetim kaçmaz.
| Tasarım Kararı | Kapsüllemeye Etkisi | Kontrol Noktası |
|---|
| Alanı özel yapmak | Veri dışarıdan korunur | Yalnızca özellikten yazılır |
| Özelliğe doğrulama eklemek | Geçersiz veri alana girmez | Yazma işlevindeki aralık denetimi |
| Salt okunur özellik tanımlamak | Değişmez bilgi korunur | Yazma işlevi bulunmaz |
| Değiştirilemeyen alan kullanmak | Nesne ömrü boyunca sabit kalır | Yalnızca tanımda ve yapıcıda atama |
| Statik alan tanımlamak | Tüm nesneler ortak değeri paylaşır | Değişiklik sınıf adıyla yapılır |
Denetimde her satır ayrı bir ölçüt olarak kullanılır: veri gizli mi, yazma yolu denetimli mi, değişmez bilgi değişmeye açık mı, ortak değer gerçekten paylaşılıyor mu. Dördü de doğruysa sınıfın arayüzü güvenli ve küçük kalır.
5. Karşılaştırma Tablosu ve Denetim
Erişim belirleyicisi seçilirken şu soru sorulur: bu üyeyi sınıf dışındaki kodun kullanması gerekiyor mu, gerekiyorsa değiştirmesi de gerekiyor mu. Gerekiyorsa genel üye, yalnızca okunması gerekiyorsa salt okunur özellik, hiç dışarı açılmaması gerekiyorsa özel üye seçilir. Korumalı üye ise kalıtımda alt sınıfın ortak veriye dokunması gerektiğinde kullanılır.
Kod denetimi iki katmanda yapılır. Derleme aşamasında kapsam dışı bir erişim denemesi hata olarak bildirilir; bu, hatanın çalışma anında değil yazılırken yakalanması demektir. Çalışma aşamasında ise arayüzün küçük tutulup tutulmadığına bakılır: dışarıya açılan üye sayısı azaldıkça sınıfı kullanan kodun bağımlılığı azalır.
Genel üyeyi yalnızca dışarıdan okunacaksa açmak yerine salt okunur özellik kullanmak, kapsüllemenin en ucuz güçlendirmesidir.
Özellik ile metot arasındaki seçim de denetime tabidir. Yalnızca okuma ve yazma gerekiyorsa özellik daha kısadır; birden çok adımda işlem, kayıt tutma ya da denetim gerekiyorsa metot kullanılmalıdır.
6. Sık Yapılan Hatalar, Özet ve Kendini Dene
En sık hata alanı genel bırakmaktır; ikinci sık hata kapsüllemeyi yalnızca özel yazmakla sağlanmış sanmaktır. Üçüncü hata, değiştirilemeyen alanı metot içinde güncellemeye çalışmaktır. Dördüncü hata, ortak kullanılacak sayacı her nesnede ayrı tanımlamaktır. Beşinci hata ise alan adı ile parametre adı çakıştığında işaretçiyi kullanmamaktır.
- Üyeleri tek tek listeleyip her biri için kimin erişmesi gerektiğini yazın.
- Genel özelliklerden yalnızca okunması gerekenleri salt okunur yapın.
- Değişiklik yapılan her alan için bir doğrulama kuralı yazın.
- Ortak kullanılacak değerler için statik alan kullanıldığını doğrulayın.
Özetle erişim belirleyicisi üyenin görünürlük sınırını, kapsülleme ise verinin korunmasını sağlar. Veri özel alanda tutulur, dışarıya özellik ve metotlardan çıkılır ve yazma yolunda kurallar denetlenir. Doğru kurulan bir sınıfta dışarı açılan üye sayısı azdır, geçersiz veri sınıfa giremez ve kapsam dışı erişim denemesi daha derleme aşamasında yakalanır.
Erişim Belirleyiciler ve Kapsülleme — Sık Sorulan Sorular
Erişim Belirleyiciler ve Kapsülleme nedir?
Bir sınıf yazarken en sık yapılan yanlış, bütün üyeleri dışarıya açmaktır. Böylece sınıfın arayüzü şişer, veri dışarıdan serbestçe değiştirilebilir ve sınıfı kullanan kod kurallara uymayabilir. Erişim belirleyicisi, bir üyenin hangi noktalardan görülebileceğini ve değiştirilebileceğini yazan küçük bir ifadedir…
Erişim Belirleyiciler ve Kapsülleme konusunda ne öğrenilir?
Özel alan dışarıdan doğrudan değiştirilemediği için geçersiz değer sınıfa hiç girmez.
Erişim Belirleyiciler ve Kapsülleme konusunda sık yapılan hatalar nelerdir?
Alanı genel yapıp doğrulamayı özelliğe bırakmak: Alan doğrudan açılınca çağıran kod denetimi atlayarak geçersiz bir değer yazabilir, kapsülleme tamamen ortadan kalkar. Kapsüllemeyi yalnızca private yazmakla sağlamak: Veri gizlenir ama yazma yolunda kural yoksa eksik kalınır; denetim mutlaka özellik ya da metot…
Erişim Belirleyiciler ve Kapsülleme için hangi formüller ve kurallar kullanılır?
Erişim belirleyicisi, bir üyenin sınıf içinden mi yoksa sınıf dışından mı erişileceğini belirler. · Kapsam halkası küçükten büyüğe: private, internal, protected, public. · Kapsülleme: özel alan artı genel özellik eşitliği denetimli erişim ve geçersiz veri engelidir. · Özellik, alanın okuma ve yazma yollarını saran iki…
Erişim Belirleyiciler ve Kapsülleme kazanımları nelerdir?
Genel, özel, korumalı ve derleme içi erişim belirleyicilerinin kapsamını karşılaştırır. Veriyi özel alanda tutup genel özellikle erişerek kapsülleme ilkesini uygular. Özellik üzerinde değer doğrulama yazarak geçersiz verinin alana girmesini engeller.