24
Kas'13

OOP 4: Encapsulation(Sarmalama) (C# ile OOP)

Nesneye yönelik programlama anlayışının ilkelerinden bir tanesi olan encapsulation kavramını incelemeye ve kod örnekleri vermeye çalışacağım. Encapsulation kavramının kısa bir açıklamasına OOP 1 yazımda değinmiştim.

 

Encapsulation, erişim belirleyicileri ile sağlanır. Öncelikle erişim belirleyicilere değinmekte fayda var.

Public Erişim Belirleyicisi

Public erişim belirleyicisi ile işaretlenen elemanlar her yerden erişilebilir olurlar. Yani içinde bulunduğunuz namespace’den erişebilirsiniz ve oluşturduğunuz dll’i kullanan her proje, dll içerisindeki public elemanlarınıza erişebilir.

Private Erişim Belirleyicisi

Private erişim belirleyicisi ile işaretlenen elemanlar sadece tanımlandıkları sınıf içerisinden erişilebilir durumdadırlar. Bu elemanlara sınıf dışarısından, nesne örnekleyerek ulaşmak mümkün değildir.

Protected Erişim Belirleyicisi

Protected erişim belirleyicisi ile işaretlenen elemanlar içinde bulundukları sınıftan ve bu sınıftan kalıtılan sınıflardan erişilebilir.

Internal Erişim Belirleyicisi

Internal erişim belirleyicisi ile işaretlenen elemanlar içinde bulundukları namespace içerisinden erişilebilir.

Protected Internal Erişim Belirleyicisi

Protected internal erişim belirleyicisi ile işaretlenen elemanlar, aynı namespace’de olmasalar dahi kendi sınıflarından kalıtılan sınıflar tarafından erişilebilirler. Protected ve internal erişim belirleyicilerinin or işlemine tabi tutulması olarak düşünülebilir.

Getter ve Setter

Sarmalama kavramının uygulanabilmesi için erişim belirleyicilerin etkin olarak kullanılması gerekir. Yapılması gereken kesinlikle her elemanın public yazılıp geçilmesi değildir. Planlama yapmak ve her elemanı uygun erişim belirleyiciler ile işaretlemek gerekir.

 

Örneğin; Sınıf içerisindeki field’lara direkt olarak erişilebilmesi uygun değildir. Zamanında, tüm field’ları public olan bir sınıf yaptığımızı düşünelim. Daha sonra proje içerisindeki binlerce satırda bu sınıftan nesne örnekleyip field’larını kullandık. Bugün ise field’lardan bir tanesine atama yapmadan önce ufak bir kontrol yapma ihtiyacı duyduk. Şimdi dönüp binlerce satırı değiştirelim… Ya da gelin biz bunu böyle yapmayalım. Field private olsun. Nesne örnekleyip erişmek isteyen de public bir metodu aracı olarak kullansın. Bu metoda da Getter diyelim. Belki de bu field’a atama yapmak da istenebilir. Yine bir public aracı metot olsun ve buna da Setter diyelim.

Yeni makaleleri E-Mail ile takip edin!