C# Programlama Dilinde Sınıf(Class) Oluşturma

Microsoft'un geliştirdiği programlama dilleri arasında en popüleri C# olmuştur. C# programlama dilinin öne çıkmasının en önemli nedeni, daha önce geliştirilen Nesne Yönelimli (OOP:Object Oriented Programming) programlama dillerinin güzel özelliklerini bünyesinde barındırmasıdır.  Özellikle yapı olarak C++ ve Java programlama dillerine çok benzeyen sınıf(class) yapısı sayesinde geniş kitlelerce hemen benimsenmiş ve popüler bir dil haline gelmiştir.  Artık sınıf yapısı kullanmayan programlama dili neredeyse kalmadı diyebiliriz, profesyonel geliştiriciler de nesne yönelimli olmayan dilleri artık tercih etmemektedir, hatta nesne yönelimli yapısı zayıf olan diller de ortadan kalkmaktadır. Örneğin yine VB.NET'in sınıf yapısı programcılara göre çok farklı geldiği için giderek kullanımı azalmıştır. 

Nesne Yönelimli programlama dilleri kullanmanın en önemli avantajı tekrar kullanılabilirlik(reusability) dir. Başladığınız her projede aynı kodları defalarca yazıyorsanız ve sizin yazdığınız kodları yazılım ekibi içerisindeki diğer yazılımcılar geliştirip kullanamıyorsa, hem zaman hem maliyet açısından verimsiz bir durum söz konusudur. 

Nesne Yönelimli programlamanın diğer bir avantajı sürdürülebilirlik(maintainability) özelliğidir. Kaynak kodların kolayca  okunabilmesi, anlaşılabilmesi gibi avantajları yanında kolayca hata bulma, optimize etme işlemleri de pratik bir şekilde yapılabilir.  

Genişleyebilirlik(Extensibility) de  nesne yönelimli programlamanın diğer bir avantajıdır. Kodlarınıza kolayca yeni özellikler ekleyip genişletmenize olanak tanır. 

Sınıfları şablonlar gibi düşünebiliriz, şablonları kullanarak nesnelerimizi oluşturuyoruz. Örneğin nesne yönelimli programlama anlatılırken kullanılan klasik bir örnek olarak Hayvan sınıfını verebiliriz. Hayvan sınıfının bir örneği olarak kedi, kuş ve rakun nesnelerini örnek verebiliriz. Yine Kamyon sınıfının örnekleri olarak Mercedes, MAN nesnelerini, Çiçek sınıfının nesneleri olarak Gül, Nilüfer, Karanfil'i verebiliriz. Ayrıca hepimiz insan sınıfının bir örneğiyiz, bu sınıfın bir nesnesiyiz. Bu örnekleri çoğaltmak mümkün. 

Bir de sınıflarımızın yaptıkları eylemler(metodlar) vardır. Örneğin hayvan sınıfının eylemleri Yeme(), İçme() sayılabilir. Kamyon sınıfının eylemleri YükTasima(), çiçek sınıfının eylemleri Buyume(), Kuruma(),  Kokma() olabilir. İnsan sınıfının metotları Yeme(), İçme(), Düşünme(), Giyinme() olabilir. Burada özellik ve metotlara sınıfın üyeleri olarak adlandırabiliriz. Bir sınıfın içinde hiçbir metot tanımlamadan da kullanılabilir ama sınıf kullanmanın en büyük artısı bir nesneyi özellik ve metotlarıyla beraber tanımlayabilmektir. 

Şimdi bir Kutu sınıfı oluşturarak bu sınıfa ait genişlik, yükseklik ve uzunluk isimli üç özellik(attribute) tanımlayalım. Kutu sınıfımız için bir de HacimHesapla() metodu oluşturalım, bu metotun yapacağı eylem uzunluk, yükseklik ve genişlik değerlerini çarparak hacim değerini hesaplamasıdır. 

Sınıf oluştururken C# programlama dilinde aşağıdaki söz dizimini kullanıyoruz.

Erişim_Belirteci class Sınıf_Adı{

}

Örneğin;

public class Insan
{

   //özellik ve metotlar 
}

veya

private class Cicek
{

    //özellik ve metotlar
}

şeklinde sınıf tanımlamaları yapabiliriz.

Burada Erişim_Belirteci public, private, protected gibi ifadeler olabilir, erişim belirteçlerini ileride detaylı olarak inceleyeceğiz. Fakat kısaca açıklayalım, public kelime olarak "genel, halka açık"  anlamına gelmektedir. public olarak tanımlamanan sınıflara diğer sınıflar içinden de uluşılabilir. Anlam olarak private kelimesi "özel,gizli" anlamlarına gelir.  private olarak tanımlanan metoda sadece o sınıf içinden ulaşılabilir, diğer sınıflar için gizlidir, başka sınıflar tarafından ulaşılamaz. protected ise daha sonra kalıtım bölümünde incelenecektir. 

Özellik(attribute) veya metotların önünde herhangi bir public, private, protected gibi ifade olmadığı zaman varsayılan olarak private'dır. Yani sadece o sınıf içinden ulaşılabilir.  

Şimdi Visual Studio'yu açarak bir Console Application (Konsol Uygulaması) başlatalım. 

using System;
 
namespace ClassOrnek1
{
    class Kutu
    {
      
        double genislik;  //özellik 1
        double yukseklik; //özellik 2
        
double derinlik;  //özellik 3

       //Constructor (Yapıcı) Metot, nesne oluştuğunda otomatik çalışan metot
        public Kutu() 
        {
            Console.WriteLine("Kutu Oluşuyor");
           //özelliklere varsayılan değerler atanıyor 
              genislik = 6;
              yukseklik = 5;  
              derinlik= 7;
        }

      //Destructor (Yıkıcı) metot, nesnenin işi bittiğinde otomatik çağrılıyor
        ~Kutu(){   
            Console.WriteLine("Kutu nesnesi kaldırılıyor");
        }
 
        public void setDerinlik(double d)
        {
            derinlik= d;  //derinlik özelliğimize atama yaptık
        }
 
        public void setGenislik(double g)
        {
            genislik = g; //genişlik özelliğimize atama yaptık
        }
 
        public void setYukseklik(double y)
        {
            yukseklik = y; //yükseklik özelliğimize atama yaptık
        }
 
        public void hacimHesapla( )
        {
            double hacim = derinlik* yukseklik * genislik;
            Console.WriteLine("Hacim:{0}", hacim);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            //Birinci Kutu
            Kutu kutu1 = new Kutu();
            kutu1.setGenislik(5);
            kutu1.setYukseklik(4);
            kutu1.setDerinlik(3);
            kutu1.hacimHesapla();
 
            //İkinci Kutu
            Kutu kutu2 = new Kutu();
            kutu2.setGenislik(10);
            kutu2.setYukseklik(2);
            kutu2.setDerinlik(4);
            kutu2.hacimHesapla();
            
       
   // Üçüncü Kutu3 
            Kutu kutu3 = new Kutu();
           //Varsayılan değerleri yazacak     
            kutu3.hacimHesapla();
 
        }
    }
}

 
 
Burada Kutu sınıfımızla aynı isimde Kutu isimli bir metod görüyorsunuz, bu bir yapıcı metotdur. Şimdi yapıcı metotları kısaca açıklayalım. 

Yapıcı (Constructor) Metotlar
Sınıf ismiyle aynı olan metodlar yapıcı(constructor) metotlardır, nesne ilk oluşturulurken otomatik olarak çağrılırlar. Örneğin bir nesnenin özelliklerine varsayılan(default) değerler atamak istiyorsak kullanabilir.  Yukarıdaki örnekte kutu3 nesnesi için genişlik, yükseklik, derinlik değerlerini atamadık. Yapıcı metot içinde tanımladığımız aşağıdaki varsayılan değerlere göre atama yapıpi kutu hacmini 6*5*7=210 olarak hesapladı.
      
Yıkıcı(Destructor) Metotlar
Yıkıcı metotlar ise nesne hafızadan kaldırıldığında otomatik olarak çalışan metotlardır. Yıkıcı metotların sınıf ismi ile aynı isimde olduğuna farklı olarak önünde tilde(~) işareti olduğuna dikkat ediniz. 

İlerleyen derslerimizde sınıflarla ilgili örneklere devam edeceğiz. Programı çalıştırdığınızda aşağıdaki gibi çıktı alacaksınız.



Mutlu kodlamalar,
Oğuzhan TAŞ
Kasım, 2018
Bookmark and Share