Kavramlardan birincisi Field kavramıdır.Diyelim ki 2 sayıyı toplan bir uygulamanız var.Ve en basitinden aşağıdaki gibi kod yazarsınız.
int sayi1=10;
int sayi2=20;
int toplam = sayi1+sayi2;
Yukarıdaki gibi girilen sayıların ve elde edilen sonucun değerini elde tutmak için değişkenleri kullanıyoruz değil mi arkadaşlar ? Hadi gelin bu işlemi bir sınıf içerisinde gerçekleştirelim.
Class Toplayan()
{
int sayi1=10;
int sayi2=20;
int toplam = sayi1+sayi2;
}
Ne değişti arkadaşlar? Kod aynı kod değil mi ? Buradan çıkaran kavram şudur arkadaşlar.Class içerisinde değer tutmak için kullanılan alanlara FIELD denir.
Bir diğer kavram ise Property kavramıdır.Yukarıdaki örneğimizde arkadaşlar field lara biz kendimiz değerlerini atadık.Fakat ya dışarıdan başka bir class dan veya başka bir uygulamadan bunlara erişip değer atamak istiyorsak hatta bu değişkenlere gönderilen değerleri kontrol edip belli bir işleme koyup sonuc elde etmek istiyorsak bu noktada PROPERTY kavramı ortaya çıkmaktadır.Bir diğer kullanım amacı da eğer class içerisindeki field a dışarıdan direk ulaşımı engellemek istiyorsak bu noktada da property kullanılmaktadır.
public string Tc { get{}; set{}; }
Yukarıdaki property örnek kullanımını biraz inceleyelim arkadaşlar.Public kısmı bu property nin access modifier(erişim belirleyici)'idir.Public olması property nin içerisinde bulunduğu classın dahil olduğu projenin her yerinden ve diğer projelerden erişilmesini sağlar.Access modifier konusuna daha detaylı olarak bir başka makalemde değineceğim. String kısmı ise bu property e gönderilen değer ve bu property nin göndereceği değer tipini belirtmektedir.Yani bu property e sadece ve sadece string tipinde değer gönderilir ve sadece string tipinde değer alınır.
Dikkat ettiyseniz get ve set keyword leri daha doğrusu blokları mevcuttur.Set bloğu bu property e dışarıdan değer gönderileceği zaman çalışır.Get bloğu ise bu property den dönen değeri almak istendiği zaman çalışır.
Bu kavramları anladıktan sonra gelelim asıl konumuza arkadaşlar.Encapsulation nedir? Ne amaçla kullanılır? Diyelim ki bir field a dışarıdan erişimi yasaklamak istiyoruz.Peki dışarıdan erişimi yasaklarsak nasıl değer atama işlemi yapılacak? Property oluşturacağız arkadaşlar.Bu property e dışarıdan erişimi sağlayıp bu property aracılığıyla field a değer ataması yapabiliriz arkadaşlar.Bu şekilde dışarıdan gelen değeri istediğimiz gibi kontrol edip istediğimiz durum sağlanırsa atama yapabiliriz.Hatta belli bir işleme tabi tutup çıkan sonucu field a atayabiliriz arkadaşlar.İşte field ve property lerin bir araya gelip bu amaçlarla kullanılmasına encapsulation denir.Mantığını daha iyi anlamak için bir insanın yaş değerini alıp eğer gönderilen değer boş değilse field a atayan ve istenildiği zaman yaş değerini veren 2 tane method yazalım arkadaşlar.
private string yas; // private access modifier ı sayesinde yas field ına sadece bu class içerisinden erişimi sağlayıp dışarıdan erişimi engellemiş olduk.
public void SetYas(string value)
{
if (!string.IsNullOrWhiteSpace(value))
{
yas = value;
}
else
{
throw new
Exception("Yaş
bilgisi boş olamaz!");
}
}
//SetYas methodu ile dışarıdan gelen yas bilgisini bir takım kontrollerden geçirdikten sonra yas field ına atadık.
public string GetYas()
{
return yas;
}
//GetYas methodu ile de insan nesnesinin yas değeri istenildiğinde geri döndürme işlemini yaptık arkadaşlar.
public string Yas
{
/*Property lerin alacağı ve vereceği değerler aynı olmak
zorundadır.*/
get { return yas; }
set
{
if (!string.IsNullOrWhiteSpace(value))
{
yas = value;/*set
scop ları ıcerısınde sistemde tanımlanmış value değeri vardır.Dışarıdan gönderilen
değer value ile alınır.Compile derlediği zaman set ve get kısımlarını yukarıdakı
gibi method oluşturur.*/
}
else
{
throw new
Exception("Yaş
bilgisi boş olamaz!");
}
}
}
Görüldüğü üzere get ve set bloklarından oluşan property yazıyoruz.Yukarıdaki get ve set methodları ile aynı işlemi yapmaktadır.
Umarım faydalı olmuştur arkadaşlar.Bir sonraki makalemde görüşmek dileğiyle ...
Hiç yorum yok:
Yorum Gönder