KAPSÜLLEME (Encapsulation )

KAPSÜLLEME (Encapsulation )

Nesne yönelimli programlamanın ilk prensibi kapsülleme (encapsulation) olarak adlandırılır. Bu özellik, dilin nesne kullanıcısından gereksiz uygulama ayrıntılarını saklayabilme yeteneği olarak ifade edilebilir. Örnek olarak .Net Framework temel sınıf kütüphanesi içerisinde yer alan ve Open() ve Close() metotlarına sahip SqlConnection sınıfını ele alalım.

//SqlConnection, veritabanına yapılan bağlantının detaylarını kapsüllemektedir.
SqlConnection baglanti = new SqlConnection(“server = London; database = AdventureWorks; integrated security = true”);
baglanti.Open();
//Burada veri yönetilir.
baglanti.Close();

SqlConnection sınıfı, veritabanına açılan bağlantının sağlanması, yüklenmesi, yönetimi, kapanması gibi içsel detayları gizlemiştir. Nesne kullanıcısı kapsüllemeyi sever; çünkü programlama görevlerini daha kolay hale getirir. SqlConnection sınıfında olduğu gibi, nesnenin görevini yerine getirmesi için arka tarafta çalışan onlarca satır kodu düşünmeye gerek yoktur. Tek yapılması gereken nesne örneğinin oluşturulması ve uygun metotların çağrılmasıdır.

Kapsüllemenin diğer bir işlevi ise veri korumadır. Bir sınıf tasarımında doğru olan, nesnelerin durum verilerini private erişim belirleyicisi ile koruma altına almaktır. Bu yolla dış dünya, alanın değerini elde etmek ya da değiştirmek istediğinde bir kontrolden geçmek zorunda kalır. Dış dünyaya açık, yani public erişim belirleyicisine sahip alanların sorunu, ait oldukları sınıfın iş mantıklarını algılayabilme yeteneklerinin olmamasıdır. Dolayısıyla atanan değerin iş mantığına (business logic) uygun olup olmadığına dair herhangi bir kontrolün sınıf içerisinde yapılabilmesi mümkün olmamaktadır. Nesne kullanıcısı genelde sınıfı yazan kişi olmakla birlikte harici birisi de olabilir; dolayısıyla böyle bir kontrolü nesne kullanıcısı tarafında yapmak akla gelse de ; bu çok efektif bir yol olmaz. Sınıfların durum verileri olarak anılan alanlar, private erişim belirleyicisi alarak dış dünyaya kapatıldıklarında başlangıç değerleri, sınıf içerisinde tanımlandığı yerde ya da yapıcı metot yardımıyla verilebilir. Böyle bir kapsülleme tercih edilebilir; ancak bazı durumlarda alanın değerinin dışardan okunması, değerinin sadece içsel olarak sınıf üyeleri tarafından atanması, durum verileri üzerinde yapılacak değişikliklerin dışarıya açılması gerekebilir. Burada değişiklikle birlikte gelen verinin kontrol edilerek istenmeyen durumların önüne geçilmesi gerekliliği ortadadır.

Kapsülleme, durum verilerinin tutarlılığını sağlamak için bir yol sunmaktadır: public eirşim belirleyicisine sahip alanlar tanımlamaktansa, alan verilerini private olarak tanımlamak alışkanlık haline getirilmelidir (Herhangi bir iş kuralı olmasa da). Bu durumda alanlar nesne kullanıcısına iki teknikle açılabilir:

Cevap Bırakın


*