10. SınıfBilişim Teknolojileri

Yapıcı ve Yıkıcı Metotlar

Bilişim Teknolojileri · 10. Sınıf · Sınıf ve Nesne

Konu Anlatımı

Nesne Doğarken ve Ölürken Ne Olur?

Her nesnenin işe başlamadan önce hazır hâle getirilmesi gerekir: IP adresi boş string olmamalı, port numarası 0 olmamalı, dosya açıldıysa elinde tuttuğu kaynak kapatılmalıdır. Bu hazırlığı yapan metoda yapıcı (constructor), nesne yok olurken devreye giren özel metoda ise yıkıcı (finalizatör) denir. Yapıcı çağrısı garanti ve senkron bir iştir; yıkıcının ne zaman çalışacağı ise belirsizdir, bu yüzden kritik kaynakların kapatılması yalnızca yıkıcıya bırakılmaz.

1. Yapıcı Metot Kuralları

Yapıcının adı sınıfın adıyla birebir aynıdır ve geri dönüş değeri yoktur. Sınıfta hiçbir yapıcı yazılmazsa derleyici parametreless bir yapıcıyı otomatik üretir; ancak programa bir tane parametreli yapıcı eklenirse otomatik üretim durur ve parametresiz new çağrısı derleme hatası verir. Yapıcı, alanlara ilk değeri atamanın en güvenli yoludur çünkü nesne daha hiçbir kod tarafından kullanılmadan önce durumu tanımlanmış olur.

2. Aşırı Yükleme (Overload)

Aynı sınıf içinde birden fazla yapıcı, parametre listesi farklıysa yan yana yazılabilir. Çağrım sırasında argüman sayısı ve tiplerine bakılarak hangi yapıcının çalışacağı belirlenir. Bu durum nesneyi farklı bilgi seviyelerinde kurma imkânı verir: yalnız model bilgisiyle, ya da model ile IP bilgisi birlikte kurulabilir. Parametreler aynı olup yalnız türleri farklıysa çağırım yine ayrıdır; hiçbiri uymazsa derleme hatası alınır.

3. Yıkıcı, Çöp Toplayıcı ve Kaynaklar

C#'ta yıkıcı, ~SınıfAdı biçiminde yazılır ve çöp toplayıcı (GC) nesnenin bellekten silineceğini anladığında onu çağırır. Bellek yönetimi otomatiktir; buna karşılık dosya tutamacı, ağ soketi, veritabanı bağlantısı ve donanım portu gibi elle yönetilen kaynaklar serbest bırakılmazsa kilit kalır. Bu kaynaklar IDisposable arayüzünü uygular ve Dispose metodu çağrılmalıdır; using bloğu kapanırken bu çağırmayı otomatik yapar.

4. Adım Adım: Kaynağı Güvenle Kullanan Yapıcı

  1. Sınıfın alanları yazılır: dURUM yerine durumOku, yedekYolu ve acikBaglantiSayisi gibi açık adlar kullanılır.
  2. Parametreli yapıcıda alanlar doğrulanır ve ilk değer ataması yapılır.
  3. using System.IO ve using System ile gerekli ad alanları eklenir.
  4. Yedek dosyası using bloğu içinde açılır, blok kapanınca dosya kilitleri bırakılır.
  5. Dispose metodu içinde kaynaklar serbest bırakılır, nesne çöp toplayıcıya bırakılır.

5. Sınav ve Saha Odaklı Notlar

Sınavda yapıcının geri dönüş değeri olmadığı, adının sınıf ile aynı olduğu ve parametresiz otomatik yapıcının yalnızca hiçbir yapıcı yazılmadığında üretiltiği sorulur. Ayrıca using bloğunun finally karşılığı olduğu, yani hata çıksa da çıktığın blok içindeki kaynağı kapattığı sıkça sorulur.

Sahada en sık görülen arıza, yedek görevinin dosyayı açık bırakıp kilitlemesidir. Bir yedekleme işi 4 GB'lık bir dosyayı her çalıştırmada açıp kapatmıyorsa bir sonraki görev dosyaya yazamaz; açık bağlantı sayacı ise sorgu başına bir artıp serbest bırakılmazsa bağlantı havuzunu tüketir. Kaynak yönetiminin gözlemlenebilir karşılığı budur.

Ne Öğreneceğiz

Yapıcı metot çeşitleri, aşırı yükleme, finalizatör, çöp toplayıcı ve kaynakların düzenli serbest bırakılmasını anlatan kaynak yönetim konusudur. Bu konuda ögrenme çıktıları:

Ön Bilgi

Bu konuya başlamadan önce temel kavram ve ön koşulları kavramanız yardımcı olacaktır. Konunun çerçevesinde şu kavramlar dikkat ister:

Basit Örnek ve Günlük Yaşam

Günlük yaşamda ve mesleki bağlamda bir uygulama:

Soru: Cihaz sınıfında IP adresi ve port numarasının nesne üretilirken atanması isteniyor. Yapıcı nasıl yazılır?

  1. Adım 1: class Cihaz kalıbı içinde private alanlar ipAdresi ve portNo tanımlanır.
  2. Adım 2: public Cihaz(string ip, int port) biçiminde yapıcı yazılır, ad sınıfın adıyla aynıdır.
  3. Adım 3: Yapıcı gövdesinde this.ipAdresi = ip ve this.portNo = port atamaları yapılır.
  4. Adım 4: new Cihaz(192.168.1.20, 24) çağrısıyla nesne ilk değerleriyle üretilir.

Sonuç/cevap: Cevap: Parametreli yapıcı, alanlara ilk değerleri atar; nesne kullanılmadan önce IP ve port bilgisi hazır hâle gelir.

İleri Örnek

Daha ileri bir uygulama:

Soru: Bir bağlantı havuzu sınıfında 100 sorgu çalıştıran uygulamanın bağlantıları nasıl serbest bırakılmalıdır; yalnız finalizatöre güvenmek neden sakıncalıdır?

  1. Adım 1: Bağlantının IDisposable uyguladığı ve Dispose metodu bulunduğu belirlenir.
  2. Adım 2: Sorguların using bloğu içinde çalıştırıldığı, blok sonunda bağlantının serbest bırakıldığı yazılır.
  3. Adım 3: Finalizatörün çöp toplayıcı tarafından belirsiz bir anda çağrıldığı hatırlanır.
  4. Adım 4: Belirsiz zamanlama nedeniyle 100 bağlantının aynı anda açık kalabileceği ve havuzun tükenebileceği değerlendirilir.

Sonuç/cevap: Cevap: Bağlantılar using ve Dispose ile kapan anında serbest bırakılmalıdır; finalizatöre bırakmak bağlantı havuzunun dolmasına yol açabilir.

Karşılaştırma Tablosu

KavramAçıklama
Yapıcı ilk değeri atamanın en güvenli yoYapıcı ilk değeri atamanın en güvenli yoludur, nesne kullanılmadan önce durumu tanımlanır.
Çöp tolayıcı yalnızca belleği yönetir, dÇöp tolayıcı yalnızca belleği yönetir, dosya ve bağlantı gibi elle yönetilen kaynakları kapatmaz.
Finalizatörün ne zaman çalışacağı garantFinalizatörün ne zaman çalışacağı garanti edilmez, bu yüzden kritik işler için kullanılmaz.
using yalnızca IDisposable uygulayan türusing yalnızca IDisposable uygulayan türlerle kullanılır.
Aşırı yüklenmiş yapıcılarda parametrelerAşırı yüklenmiş yapıcılarda parametreler aynı olamaz, yoksa çağırım belirsizleşir.
Dispose çağrıldıktan sonra nesne yenidenDispose çağrıldıktan sonra nesne yeniden kullanılmamalı, yeni nesne üretilmelidir.

Sık Yapılan Hatalar

Yapıcıya void ya da başka dönüş değeri yazmak: Yapıcının geri dönüş değeri yoktur, eklenen dönüş değeri derleme hatasına yol açar.

Parametreli yapıcı ekledikten sonra parametresiz new beklemek: Derleyici otomatik yapıcıyı yalnızca hiçbir yapıcı yokken üretir.

Kaynak kapatmayı yalnızca finalizatöre bırakmak: Finalizatörün zamanı garanti değildir, dosya ve bağlantılar geç kapanır.

using bloğunu kullanmayıp Dispose çağırmayı unutmak: Hata durumunda da kapanması gereken kaynaklar açık kalır ve kilitlenme oluşur.

Aynı parametre listesiyle ikinci yapıcı yazmak: İmzalar aynı olamaz, bu durumda derleyici çakışan tanım hatası verir.

Özet

Bu konuda yapıcı metotların adlandırma ve dönüş değeri kuralları, parametreli yapıcının ilk durumu kurma görevi ve aşırı yüklemede ayırt edicilik ele alındı. Finalizatör ile çöp toplayıcının yalnızca belleği yönettiği, dosya ve bağlantı gibi elle yönetilen kaynakların Dispose ile serbest bırakıldığı ayrıldı. using bloğunun hata durumunda da kaynağı kapattığı, açık bağlantı ve dosya kilitlerinin bu sayede oluşmadığı örneklerle gösterildi.

Kendini Dene

Soru: Bir cihaz sınıfında parametreli yapıcı, finalizatör ve IDisposable arayüzünü uygulayan Dispose metodu birlikte tanımlansın. Kod şemasını hazırla ve her bölümün görevini, finalizatörün ne zaman çalıştığının neden garanti olmadığını açıkla.

Örnek cevap: Puanlama anahtarı: Sınıf adıyla aynı adlı, dönüş değeri olmayan parametreli yapıcı doğru yazılır ve ilk durum orada kurulur (4 puan); ~SınıfAdı biçimindeki finalizatörün çöp toplayıcı tarafından belirsiz zamanda çağrıldığı belirtilir (3 puan); Finalizatörün yalnızca belleği yönetip dosya ve bağlantıları kapatmadığı anlatılır (4 puan); using/Dispose ile kaynakların hata durumunda dahi serbest bırakıldığı açıklanır (4 puan).

Yapıcı ve Yıkıcı Metotlar — Sık Sorulan Sorular

Nesne Doğarken ve Ölürken Ne Olur?

Her nesnenin işe başlamadan önce hazır hâle getirilmesi gerekir: IP adresi boş string olmamalı, port numarası 0 olmamalı, dosya açıldıysa elinde tuttuğu kaynak kapatılmalıdır. Bu hazırlığı yapan metoda yapıcı (constructor), nesne yok olurken devreye giren özel metoda ise yıkıcı (finalizatör) denir. Yapıcı çağrısı…

Yapıcı ve Yıkıcı Metotlar nedir?

Her nesnenin işe başlamadan önce hazır hâle getirilmesi gerekir: IP adresi boş string olmamalı, port numarası 0 olmamalı, dosya açıldıysa elinde tuttuğu kaynak kapatılmalıdır. Bu hazırlığı yapan metoda yapıcı (constructor), nesne yok olurken devreye giren özel metoda ise yıkıcı (finalizatör) denir. Yapıcı çağrısı…

Yapıcı ve Yıkıcı Metotlar konusunda ne öğrenilir?

Yapıcı ilk değeri atamanın en güvenli yoludur, nesne kullanılmadan önce durumu tanımlanır.

Yapıcı ve Yıkıcı Metotlar konusunda sık yapılan hatalar nelerdir?

Yapıcıya void ya da başka dönüş değeri yazmak: Yapıcının geri dönüş değeri yoktur, eklenen dönüş değeri derleme hatasına yol açar. Parametreli yapıcı ekledikten sonra parametresiz new beklemek: Derleyici otomatik yapıcıyı yalnızca hiçbir yapıcı yokken üretir.

Yapıcı ve Yıkıcı Metotlar için hangi formüller ve kurallar kullanılır?

Yapıcının adı sınıfın adıyla aynıdır ve geri dönüş değeri yoktur. · Parametreli yapıcı yazılmışsa parametresiz new çağrısı derleme hatası verir. · Aşırı yüklemede ayırt edici olan parametrelerin sayısı ve tipleridir. · Yıkıcı ~SınıfAdı biçimindedir ve çöp toplayıcı tarafından, zamanı garanti edilmeden çağrılır.

Yapıcı ve Yıkıcı Metotlar Kazanımları

Örnek Sorular ve Çözümleri

Örnek Soru 1 kolay

Bir yapıcı metotla ilgili aşağıdaki ifadelerden hangisi doğrudur?

  1. A) Adı sınıfın adıyla aynıdır ve dönüş değeri yoktur
  2. B) void ile işaretlenir
  3. C) Mutlaka static olmalıdır
  4. D) Yalnızca yıkıcıdan sonra çağrılır
Cevabı göster

Doğru cevap: A) Adı sınıfın adıyla aynıdır ve dönüş değeri yoktur

Yapıcının adı sınıfın adıyla birebir aynıdır ve geri dönüş değeri yoktur; void yazılamaz, static olması zorunlu değildir ve nesne üretilir üretilmez çalışır.

Örnek Soru 2 orta

Aynı sınıfta birden fazla yapıcının bulunmasına ne ad verilir?

  1. A) Kapsülleme
  2. B) Devralma
  3. C) Çok biçimlilik
  4. D) Aşırı yükleme
Cevabı göster

Doğru cevap: D) Aşırı yükleme

Parametre listeleri farklı birden fazla yapıcının bulunmasına aşırı uyumlama değil aşırı yükleme (overload) denir; çağırım parametrelerle ayrılır.

Örnek Soru 3 zor

Parametreli yapıcı eklendikten sonra Cihaz c = new Cihaz(); çağrısı derleme hatası verir. Neden?

  1. A) Parametre adı geçersizdir
  2. B) Nesne zaten tanımlıdır
  3. C) Parametreli yapıcı varken otomatik parametresiz yapıcı üretilmez
  4. D) Yıkıcı yazılmadığı içindir
Cevabı göster

Doğru cevap: C) Parametreli yapıcı varken otomatik parametresiz yapıcı üretilmez

Derleyici parametresiz yapıcıyı yalnızca hiç yapıcı yazılmadığında üretir; parametreli yapıcı eklenince çağrıya uyan yapıcı bulunamaz.

Sıradaki adım

Konu anlatımları hesapsız okunur. Quiz, slayt ve deneme için hesap gerekir.

DersTeders ile devam et

Bilişim Teknolojileri için çalışma yolu

  1. OkuKonu anlatımını bu sayfada bitir.
  2. Soru çözÖrnekleri çöz, cevabı açıklamayla karşılaştır.
  3. Quiz ile pekiştirHesapla kendini ölç.

Slaytla adım adım öğren · Tüm dersler · Ana sayfa

Hesap açTüm dersleri keşfet

Konu anlatımları hesapsız okunur; quiz, slayt ve deneme için hesap gerekir.

Bu sayfa Yapıcı ve Yıkıcı Metotlar konusunun anlatımını, kazanımlarını ve örnek sorularını içerir. Konuyla ilgili tüm sorular için testi çöz, diğer konular için DersTeders ana sayfasına geçebilirsin.

Bu konunun öğretmen materyallerini (ders planı, çalışma kâğıdı, çözümlü soru bankası, rubrik) yazdırabilirsin: Yazıcı çıktısı modülünü aç