Kapsülleme (Encapsulation)

+ Şu ana kadar yaptığımız derslerde nesne tapanlı programlamada yazılan kodlar adına Sınıf denilen yapılar içine koyduk.
+ Sınıf içinde bulunan Değişkenler ve Metotlar dışındaki kodların erişimine korumalı ya da kısıtlı olarak açılır. Yani, sınıf dışındaki kodlar sınıfın içindeki kodların bir kısmına erişebilirken bir kısmı erişemez.Ayrıca ,yazılan kodları dışardaki kullanıcılarda giremez.
+ Mantığı şudur örneğin siz bir bilgisayarı açmak için açma tuşuna basarsınız sizn sadece işleviniz basmakdır. Herhangi bir bilgi gerektirmez.
+ Kapsüllemenin amacı daha güvenli bir kod durumu yazmakdır. Bu nedenle public yapmak yerine private yapıp daha güvemli bir kullanım sağlıyoruz.


Erişim Belirteci || İşlevi
____________________________
Public :: Her Yerden erişilir.
Private :: Bu tipte oluşturulan nesneler sadece sınıf içinden erişilinir.Sınıf dışındaki kodlar Private erişemez.
Protected :: Sınıf içinden veya sınıfdan türetilen nesnelerden erişilinebilinir.

SINIF Kısaca == class MyClass(){} kısaca budur.
NESNE Kısaca == SINIFİSMİ verilenad = new SINIFİSMİ || nesene : verilen ad eşittir.


Özellikler (Properties)

+ Yani biz kısaca get ve set erişimcileri diyoruz peki bu nasıl çalışır şmdi o noktaya gelelim.
+ Yukrıda da bahsettiğim gibi daha güvenli bir kod yazma işlevini gerçekleştiriyoruz Kapsülleme ile birlikte.

Neden PROPERTİES Kullanıyoruz?
+ Değişkenlere metotla değer atamak yerine , sırf bunun için oluşturulmuş properties kullanmka çok daha güvenli ve kullanışlıdır.
+ Özellikler(properties) sayesinde sınıf içinde tanımlanan değişkenlere/alanlara kolayca değer atanabiliniyor, okunabiliniyor veya bazı kısıtlayıcı işlemler uygulana biliniyor.
+ Özelliklere(properties) değer atamak veya okumak için adına erişimci(accessor) denilen SET ve GET komutları kullanılınıyor. Adlarındanda anlaşılaağı gibi ,set adlı erişimci özelliğe değer atamak için kullanılırken get ise değeri okumak için kullanılınır.

Bu Konu biraz kafa karıştırıcı ilk zamanlar bende anlamamışdım fakat uygulama yazdıkca öğreniyor insan şimdi daha iyi anlaşılması için bir örnek yapalım.

 class Dersler         // 1
    {
        private int dersSayısı;    // ALAN   -  2
        public int bilgiSayısı          // ÖZELLİK properties -3
        {
            get { return dersSayısı; }          // Erişimci  -4
            set { dersSayısı = value; }     // erişimci   -5

        }

    }

+ Yukardaki kodlarda görülen private erişim tipindeki dersSayısı alanına sınıf dışında değer ataması istiyoruz.
Yani class Derslerin içinden değil.Yalnız, atayacağımız değerlerinbizim istediğimiz veri tipinde ve aralığında olmasını kontrol etmek için bilgiSayısı adlı bir özellik(properties) oluşturuyoruz.
+ Yukarıda yazılan kod ve kullanılınan SET erişimcisine göre, dersSayısı özelliğine atanan değer VALUE komutu sayesinde, bilgiSayısı alanına atanacakdır.Yeniden GET erişimcisi yazılan kodlara göre ,dersSayısı özelliği bilgiSayısı alanının değerini döndürecekdir.

1.bölümde Dersler adında bir class(sınıf) oluşturduk.
2.Bölümde private bir değişken yada alan oluşturduk.
3.bölümde public bir properties oluşturduk.
4.bölümde dersSayısı değişkenini dğer olarak döndürdük.
5.bölümde dersSayısı değişkeni value değerini atadık. Aslında bunların gerçekleşme sırası tam tersidi fakat böylede C# unu algılıyor ve hata vermiyor.İstereniz yerlerini değiştirip deneyebilrsiniz.

Main Metodu

static  void Main(string[] args)
{
	Dersler ders = new Dersler(); // 6
	ders.bilgiSayısı = 30; //7
	Console.WriteLine("Bilginiz:"+ders.bilgiSayısı); //8

	Console.Read(); // 9
}

6.bölümde Dersler CLASS'ından ders adında bir SINIF türettik.
7.Bölümde ders sınıfının (.) kullanarak özelliklerine erişdik.
8.bölümde ekrana yazdırdık
9.bölümde beklemesini söyledik.

Yukarı Çık