Encapsulation (Kapsülleme) Nedir?

Kapsülleme (Encapsulation) kavramı bir nesnenin bazı özellik ve işlevlerini başka sınıflardan ve nesnelerden saklamaktır. Private erişim belirteci sayesinde bu şekilde tanımlanan bir property’ i başka sınıflardan gizlemiş oluruz. Ayrıca bu field başka sınıflarda kullanılamaz.

Kapsülleme (Encapsulation) sayesinde nesneler bilinçsiz kullanımdan korunmuş olur. Fakat bazı durumlarda private field’ lara erişmemiz ve özelliklerini kullanmamız gerekebilir. Bu durumda Property kavramı devreye girer. Property bir field’ in değerini geri döndürmeye (Get) ve değerini ayarlamaya (Set) olanak sağlar.

Örnek:

Class Tarafı:

class ulke
    {
 
       private string ad;   
        public string Ad
        {
            get { return ad; }
            set { ad = value; }
        }
       private string baskent;
 
        public string Baskent
        {
            get { return baskent; }
            set { baskent = value; }
        }
       private int nufus=1500;
 
        public int Nufus
        {
            get { return nufus; }
            set {nufus = value; }
        }
       private string paraBirimi;
 
        public string ParaBirimi
        {
            get { return paraBirimi; }  // okumak
            set { paraBirimi = value; } //yazmak
        }
 
        public void Yazdir()
        {
            Console.WriteLine("Ülke Adı    : "+ ad); //ad private tarafın ismi
            Console.WriteLine("Başkenti    : "+ baskent);
            Console.WriteLine("Nüfusu      : "+ nufus);
            Console.WriteLine("Para Birimi : "+ paraBirimi);
            Console.WriteLine("=============================");
        }
    }
 

Main Tarafı:

 static void Main(string[] args)
        {
            ulke devlet1 = new ulke();
            devlet1.Ad= "Türkiye"; //nesne örneklerken public tarafın ismini yazıyoruz
            devlet1.Baskent = "Ankara";
            devlet1.ParaBirimi = "TL";
            devlet1.Nufus=70000000;
            devlet1.Yazdir();
 
            ulke devlet2 = new ulke();
            devlet2.Ad = "Almanya";
            devlet2.Baskent = "Berlin";
            devlet2.Nufus=80000000;
            devlet2.ParaBirimi = "Euro";
            devlet2.Yazdir();
 
            Console.ReadKey();
        }
 

!<--------ÖRNEK 2------->!

Fiat.cs Classında kodlarımı aşağıdaki gibi düzenliyorum;

    class Fiat
    {
    //Özelliklerime diğer formlardan erişim sağlanabilmesi için her bir özelliğimi public olarak tanımlıyorum.
 
        public string model;
        public string YakitTipi;
        public string VitesTipi;
        public string Renk;
        public string MotorTipi;
        public decimal fiyat;
        private int _ModelYil; //private 
 
        public int ModelYil
        {
            //get ile karşıma çıkmasını istediğim değeri tanımlıyorum.
            get { return _ModelYil; }
            //Yıl eksi bile girilse mutlak değerini alarak düzenleme yapıyorum.
            set { _ModelYil = Math.Abs(value); }
        }      
    }

Daha sonra nesnelerimden örnek olarak EgeaSedan.cs formumda çalışacağım. Bu formuma bir adet daha label ekliyorum. Labelin adı lblModelYil olsun. Şimdi yazdırma işlemine geçelim kodlayalım:

  private void Sedan_Load(object sender, EventArgs e)
        {
            //Fiat sınıfından türeterek, EgeaSedan adında bir nesne oluşturdum. Artık Fiat sınıfında tanımladığım her bir özellik bu nesne tarafından erişilebilir durumda. Her bir özellik için uygun veri tipinde atama yapıyorum.
            Fiat EgeaSedan = new Fiat();
            EgeaSedan.model = "1.4 Fire Urban Plus";
            EgeaSedan.YakitTipi = "Benzinli";
            EgeaSedan.VitesTipi = "Manuel";
            EgeaSedan.Renk = "Kurşun Grisi";
            EgeaSedan.MotorTipi = "1.4";
            EgeaSedan.fiyat = 105900;
            //ModelYil aslında private ama ben bunu erişim belirleyici ile encapsule ederken public olarak tanımladığım için herhangi bir nesnemin formunda da erişim sağlayabilme imkanım oluyor.
            EgeaSedan.ModelYil = 2020;
 
            //ilgili labellara yazdırma işlemimi yapıyorum.
            lblModel.Text = EgeaSedan.model;
            lblYakitTip.Text = EgeaSedan.YakitTipi;
            lblVitesTip.Text = EgeaSedan.VitesTipi;
            lblRenk.Text = EgeaSedan.Renk;
            lblMotor.Text = EgeaSedan.MotorTipi;
            lblFiyat.Text = EgeaSedan.fiyat.ToString();
            lblModelYil.Text = EgeaSedan.ModelYil.ToString();
        }

Görüldüğü üzere ModelYil aslında private ama ben bunu erişim belirleyici ile encapsule ederken public olarak tanımladığım için herhangi bir nesnemin formunda da erişim sağlayabilme imkanım oluyor. Ayrıca kullanıcı örneğin eksi değer (-2020 gibi) bile girse labelda 2020 olarak görünmesini sağlayabiliyorum.

Last updated