OOP - Constructors / Destructors Nedir?

Constructors - Yapıcı Metotlar

OOP'de bir sınıfın instance'si alındığında kendiliğinden çalışan bir metottur. Yani nesne oluşturulması sırasında ilk çalışan metottur.

Bellek tarafında ise; nesneyi tarif eden sınıftan bir türün RAM'de yer açılmasıdır.

Nesne oluşturulurken aşağıdaki söz dizimini kullanırız

ClassName nesne= new ClasName()

new keyword'ü ve sınıf adından sonra kullandığımız parantezler ile constructor oluşturulmuş olur.

İki çeşit constructor vardır.

1-) Parametresiz (Default) Constructors

Parametre almayan constructorlardır. Eğer sınıf içinde constructor tanımlamazsak, C#, Java default olarak parametresiz ve boş bir constructor oluşturur.
 
public Kisi()
{
}
//Kişi türünden nesne oluşturulurken;
Kisi kisi1=new Kisi();

2-) Parametreli Constructorlar

Parametre alan constructorlardır. Parametreleri farklı olmak koşuluyla birden fazla Constructor oluşturulabilirler. Bu şekilde constructorlara overload özelliği kazandırılır. Nesne oluşturulurken parantez içine yazmak zorunda olduğumuz alanlardır.

 
public Kisi(string ad,string soyad)
{
      this.ad=ad;
      this.soyad=soyad;
}
//Kişi türünden nesne oluşturulurken;
Kisi kisi1=new Kisi("Mert","Metin");

Constructor özellikleri 
  • Kendi sınıfı ile aynı isme sahip olmalıdır.
  • Dönüş tipi yoktur.
  • Public olmak zorundadır.

Destructor - Yıkıcı Metotlar

Constructor'ün tam tersi olarak çalışan metottur.    

Nesnelere erişim mümkün olmadığı veya nesne ile işimiz bittiği zaman bu nesnelerin RAM'den silinmesi gerekir, çünkü bu nesneler bellekte fazla yer kaplayarak performans sorununa yol açar.
C++’ ta bu işlemi kullanıcı kendi yapmak zorundadır. C#’ ta bu işlem için Gereksiz Nesne Toplayıcısı (Garbage Collector) mekanizması mevcuttur. Bu mekanizma, ihtiyacımız olmayan nesnelerin tuttuğu referans bölgelerini boşaltır.Fakat ne zaman silindiğini bilmek istediğimiz anda Destructorlar kullanılır. 

Destructor nesne yok edilirken çalışan metottur. Constuructors da olduğu gibi tanımlanmazsa derleyici tarafından otomatik olarak tanımlanır.Ne zaman çalışacakları çok belli olmadığı için kullanılmaz, fakat nesne bellekten silinmeden son kez yapacağı işlemleri, yönetilemeyen kodlar için yıkıcı yordamlara tanımlama yapabiliriz. Örneğin, bir veri tabanı bağlantısını kapatmak gibi.

 
    ~Kisi()  // destructor
    {
        // temizleme işlemi
    }

Destructor Özellikleri
  • Constructors'larda olduğu gibi sınıf ismi ile aynı olmak zorundadır.
  • İsimlerinin başında "~" (tilda) işareti olması gerekir.
  • Bir sınıf içinde ancak bir adet yıkıcı fonksiyon olabilir. Overload yapılamaz ve miras (inheritence) alınamaz. 
  • Bu yordam parametre alamaz ve geriye değer döndürmez. 
        

Yorumlar