Kapsülleme (Encapsulation)

Eyl 08, 2013
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ı saklar. Oluşturulan bir sınıf (class) içerisinde kullanıcının işlemlerini daha kolay gerçekleştirebilmesi için bazı işlemler birleştirilerek tek bir işlem gibi gösterilir. Bu birleştirme işlemine kapsülleme denir.

Erişim belirteçleri (access modifier) sayesinde kapsülleme çok daha kolay yapılmaktadır. Erişim belirteçleri, oluşturulan sınıf veya sınıf içindeki elemanların erişim seviyelerini belirlemek için kullanılan anahtar kelimeler grubuna verilen isimdir. Metotlar ve değişkenler bir anahtar sözcük ile önceden bellirlenen sınırlar dahilinde kullanılabilir. Bu anahtar kelimeler şu şekilde sıralanabilir.

  • public: Sistemdeki bütün sınıfların erişebilmesini sağlar. Yalnızca aynı proje içinden değil, diğer projelerden de erişim sağlanabilir.
  • private: Bir "özellik (property)"in veya "metod"un sadece tanımlandığı sınıftan erişilebilmesini sağlar. Oluşturulan sınıf veya yapıların "public" olması açık bir şekilde belirtilmez ise, derleyici tarafından "private" olarak belirlenir.
  • internal: Aynı derleyici (assembly) içinde bulunan tüm sınıflardan erişim sağlanır. 
  • protected: Sadece tanımlandığı sınıfın içinde ve o sınıftan türetilmiş diğer sınıfların içinde erişilebilir.

Kapsülleme "private" değişkenlerin metotlar gibi kullanılmasına yardımcı olur. Okuma (Read Only) işleminin yanısıra okuma - yazma (read - write) işleminin yapılmasını sağlar.

Uygulama

Id,  Ad, OkulNo ve HarcUcreti alanlarından oluşan Ogrenci adlı bir sınıfın; HarcUcreti alanı kapsüllenip, birisi nesneye değer atamasını kontrol eden SetHarcUcreti metodu, diğeri de atanan değeri geriye döndüren GetHarcUcreti metodlarıyla kapsülleme uygulaması şu şekilde yapılır:

namespace Encapsulation
{
    class Ogrenci
     {
        public int Id;
        public string Ad;
        public string OkulNo;
        private double HarcUcreti; // HarcUcreti alanı kapsülleniyor

        public void SetHarcUcreti(double value)
        {
           if (value > 0) //set metoduyla verilen değerin uygun olması durumunda HarcUcreti alanına atama yapılır
              HarcUcreti = value;

           else //uygun olmaması durumunda kullanıcıya hata mesajı verilir.

              Console.WriteLine("Girilen tutar geçersiz.");
        }

        public double GetHarcUcreti()
        {
            return HarcUcreti;
        }
    }
}

Program sınıfında bir Ogrenci nesnesi oluşturulup değer ataması ise şu şekilde yapılır:

class Program
{
    static void Main(string[] args)
    {
        double value; //value değişkenine atama yapılmalıdır. Bu haliyle uygulama hata verecektir.

        Ogrenci o = new ogrenci();
        o.SetHarcUcreti(value);
        Console.WriteLine(o.GetHarcUcreti());
    }