Nesneye Dayalı Programlama

Benzer belgeler
Nesneye Dayalı Programlama

Nesneye Dayalı Programlama

Nesneye Dayalı Programlama

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Nesneye Dayalı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Operator Aşırı Yükleme (Operator OverLoading)

Sunum İçeriği. Programlamaya Giriş

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

C# Metotlar ve Metot Tanımlama

BTEP243 Ders 3. class Yazım Kuralı:

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

BİL-141 Bilgisayar Programlama I (Java)

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

NESNEYE YÖNELİK PROGRAMLAMA

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

YZM 2105 Nesneye Yönelik Programlama

Ders 8: Metotlar. barisgokce.com

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

public static int Toplam int x, int y

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Nesneye Yönelik Programlama (OOP) 7.Hafta

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

YZM 2105 Nesneye Yönelik Programlama

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Nesne Yönelimli Programlama

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Nesne Tabanlı Programlama

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

BMH-303 Nesneye Yönelik Programlama

7. HAFTA. Erişim Belirleyiciler

11- FONKSİYONLAR (FUNCTIONS)

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Java Class Yapısında Finalize Metotunun Kullanımı

/*int sayi1, sayi2,toplam=0;

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Klavyeden Basit Giriş/Çıkış İşlemleri

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 3

Görsel Programlama 1

YZM 2105 Nesneye Yönelik Programlama

Ders 8 Konu Özeti ve Problemler

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Programlama Dilleri 3

Balon & Banka Teslim tarihi: 17 Kasım 2008

NESNEYE YÖNELİK PROGRAMLAMA

Nesne Yönelimli Programlama

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER METOTLAR

NESNE TABANLI PROGRAMLAMA

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER SINIFLAR

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

C++ Dersi: Nesne Tabanlı Programlama

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Lecture 11: Generics

Veri Yapıları Lab Notları 2. Bellek Yönetimi ve Göstericiler

C Programlama Dilininin Basit Yapıları

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

C++ Dersi: Nesne Tabanlı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Üst Düzey Programlama

C++ Dersi: Nesne Tabanlı Programlama

Akış Konrol Mekanizmaları

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

BAŞLAYINIZ DENİLMEDEN SORU KİTAPÇIĞINI AÇMAYINIZ.

Yrd. Doç. Dr. Caner ÖZCAN

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Örnek1: #include <iostream> #include <string> using namespace std;

Kurucu Fonksiyonlar (Constructors)

ÇÖZÜM BİLGİSAYAR KOLAY RANDEVU RANDEVU WEB SERVİSLERİ YAZILIM FİRMALARI ENTEGRASYON KILAVUZU Sürüm: 1.0

Programlama Dilleri 3

Transkript:

SAKARYA ÜNİVERSİTESİ Nesneye Dayalı Programlama Hafta 4 Prof. Dr. Ümit KOCABIÇAK Öğr. Gör. Özgür ÇİFTÇİ Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan bu ders içeriğinin bütün hakları saklıdır. İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. Her hakkı saklıdır 2010 Sakarya Üniversitesi

4.1. Sınıf Üyeleri 2: Metodlar Uygulamalar içersindeki belirli işleri yapan küçük programlardır. Veriler üzerindeki her türlü operasyonlarda bu yapı içersinde yapılır. Her ne kadar yapısal programlama kavramı olsada NDP bu yapılardan vazgeçmemiş hatta sınıfı oluşturan yapı taşlarından kabul etmiştir. Kodun merkezi yönetimi, kodun tekrar kullanılabilirliği ve soyutlama sağlar. Genel yapısı erişim belirteci geridonustipi metod_ismi( parametre listesi) şeklindedir. Örnek 1: 2 tam sayıyı toplayıp sonucu geri döndüren metot. public class A public int Hesapla(int a, int b) int toplam; toplam = a + b; return toplam; A yenisinif = new A(); int sonuc = yenisinif.hesapla(8, 9); Console.WriteLine(sonuc); 2

Örnek 2: Ekrana bilgi yazdıran metot public class A private int Hesapla(int a, int b) // sarmala gereği erişim düzeyi private olarak değiştirilmiştir. int toplam; toplam = a + b; return toplam; public void EkranaYazdir() Console.WriteLine(Hesapla(5, 6)); A yenisinif = new A(); yenisinif.ekranayazdir(); Dışarıdan değer almayan ve geri değer döndürmeyen metod tanımı: erişim_belirteci void metot_ismi() Dışarıdan değer alan ve geri değer döndürmeyen metod tanımı: erişim_belirteci void metot_ismi( parametre listesi) Dışarıdan değer almayan ve geri değer döndüren metod tanımı: erişim_belirteci geridonustipi metot_ismi() Dışarıdan değer alan ve geri değer döndüren metod tanımı: erişim_belirteci geridonustipi metot_ismi(parametre listesi) Metodların geri değer döndürmesi durumunda return anahtar kelimesi ile metodun işlevi geri döndürülür. 3

Örnek 3: Öğrencilerin ad, soyad, doğum tarihi, memleketi, öğrenci numarası, bölümü, fakültesi bilgilerini tutan sınıfı oluşturalım. class Ogrenci public string adi; public string soyadi; public DateTime dogumtarihi; public string memleket; public string numara; public string bolum; public string fakulte; public void EkranaYazdir() Console.WriteLine("Adı : " + adi); Console.WriteLine("Soyadı : " + soyadi); Console.WriteLine("Doğum Tarihi : " + dogumtarihi.toshortdatestring()); Console.WriteLine("Memleket : " + memleket); Console.WriteLine("Numarası : " + numara); Console.WriteLine("Fakültesi : " + fakulte); Console.WriteLine("Bölümü : " + bolum); // o1 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o1 = new Ogrenci(); //o1 nesnesine değerleri atanıyor o1.adi = "Barış"; o1.soyadi = "Çalışkan"; o1.dogumtarihi = new DateTime(1981, 3, 1, 7, 0, 0); o1.memleket = "Sakarya"; o1.numara = "0001.10001"; o1.bolum = "Bilgisayar Mühendisliği"; o1.fakulte = "Mühendislik"; //o1 nesnesi ekrana yazdırılıyor o1.ekranayazdir(); 4

Programımıza 2. öğrenciyi ekleyelim. // o2 isimli ikinci öğrenci nesnesi oluşturuluyor Ogrenci o2 = new Ogrenci(); //o2 nesnesine değerleri atanıyor o2.adi = "Ahmet"; o2.soyadi = "Şanslı"; o2.dogumtarihi = new DateTime(1983, 7, 19, 7, 0, 0); o2.memleket = "Sakarya"; o2.numara = "0101.10001"; o2.bolum = "Bilgisayar Mühendisliği"; o2.fakulte = "Mühendislik"; //o2 nesnesi ekrana yazdırılıyor o2.ekranayazdir(); Ogrenci sınıfının içerisindeki EkranaYazdir() metodunda yapacağımız değişikler bu sınıftan oluşturulmuş tüm nesneleri etkileyecektir. 5

Ogrenci sınıfını aşağıdaki şekilde değiştirelim. class Ogrenci public string adi; public string soyadi; public DateTime dogumtarihi; public string memleket; public string numara; public string bolum; public string fakulte; public void EkranaYazdir() Console.WriteLine("Numarası : " + numara); Console.WriteLine("------------------------------"); Console.WriteLine("Adı : " + adi); Console.WriteLine("Soyadı : " + soyadi); Console.WriteLine("Doğum Tarihi : " + dogumtarihi.toshortdatestring()); Console.WriteLine("Memleket : " + memleket); Console.WriteLine("Fakültesi : " + fakulte); Console.WriteLine("Bölümü : " + bolum); Console.WriteLine(); Console.WriteLine("****************************************"); Console.WriteLine(); 6

4.1.1. Metodların aşırı yüklenmesi (Overload) Aynı isme sahip, dışardan değer alma sayıları yada tipleri farklı olan metodlardır. Aşırı yüklenmiş metodlar kullanıldıkları sınıflarda, bu sınıflara ait nesne örnekleri için aynı isme sahip fakat farklı görevleri yerine getirebilen (benzer görevi farklı sayı veya tipte parametre ile yerine getirebilen) fonksiyonellikler kazandırır. Burada dikkat edilmesi gereken başlıca husus geri dönüş tipinin değişmesi ile aşırı yüklenmiş metod oluşturulamamasıdır. Örnek: integer, double ve string değerler ile toplama yapan metod. class Toplama public int Sonuc(int a) return a + a; public double Sonuc(double a, double b) return a + b; public string Sonuc(string a) return a; Sonuc isimli metod 3 defa kullanılmış ancak herbirinde dışardan aldığı değerlerin tipleri ve sayıları değişmiştir. Main içersimde t isimli nesne ekrana yazdırılırken oluşan görünüm bize bu metodun 3 farlı şekilde kullanılabileceğini söylemektedir. 7

Main kodlarımız; Toplama t = new Toplama(); Console.WriteLine("1. Metod : " +t.sonuc(5)); Console.WriteLine("2. Metod : " + t.sonuc(5, 6)); Console.WriteLine("3. Metod : " + t.sonuc("overload")); 8

4.2. this Anahtar Kelimesi this anahtar kelimesi bir sınıfta 4 farklı amaçla kullanılır. Varsayılan sınıfın örneğini referans eder. Benzer isimdeki alanların kullanımını sağlar. Başka bir metoda nesneyi parametre olarak aktarır. Sınıfın indexer(dizi) olarak kullanılmasını sağlar. Örnek: 2 string ifadeyi birleştiren program. Islem sınıfı; class Islem public string a; public string b; public string Birlestir() return (this.a + " " + this.b); public void EkranaYazdir() Console.WriteLine(this.Birlestir()); Console.WriteLine(); Main kodları; Islem i = new Islem(); i.a = "Bilgisayar"; i.b = "Mühendisliği"; i.ekranayazdir(); 9

Ekran görünümü; this anahtar kelimesinden sonra (.) nokta operatörü ile sınıfın tüm üyelerine ulaşılabilir. 10

4.2. Kurucular (Constructor) Sınıfa ait bir nesne oluşturan sınıf öğesidir. Bir sınıfın kurucusu, sınıf içersinde tanımlı olan, sınıfın adını alan ancak değer kümesi olmayan özel metotlardır. Bir nesnenin oluşturulduğu anda otomatik olarak çalıştırılan metotlardır. Bir sınıf içinde birden fazla kurucu olabilir. Nesne oluşturulurken hangi kurucu çağrılacağı parametrelerle belirlenir. Bazen sınıflardan nesne oluşturulurken belirli şartlar yada değerler altında oluşturulması gerekebilir. Bu tür durumlarda sınıfla aynı ismi taşıyan ancak geri dönüş değeri olmayan metotlar kullanılır. Her sınıfın ister belirtilsin ister belirtilmesin en az 1 kurucusu vardır. Örnek 1: tabanı 6, tavanı 4 ve yüksekliği 7 birim olan yamuğun alanını hesaplayan program. Yamuk sınıfı; /* Yamuk sınıfı */ class Yamuk private double taban; private double tavan; private double yukseklik; // Yamuk constructor public Yamuk() taban = 6; tavan = 4; yukseklik = 7; // yamuğun alanını hesapla ve sonucu gönder public double alan() return (taban * tavan) / 2 * yukseklik; 11

Main kodları; // Yamuk sınıfından nesne oluşturacaktır Yamuk ym1 = new Yamuk(); // ym1 yamuğunun alanı yazdırılır Console.WriteLine("1. Yamuğun alanı = " + ym1.alan()); Ekran görünümü; 4.2.1. new anahtar kelimesi Sınıflardan nesne oluşturulurken new anahtar kelimesi kullanılmaktaydı. Yamuk ym1 = new Yamuk(); new anahtar kelimesinden sonra Yamuk() şeklindeki ifade sınıftan nesne oluştururken hangi kurucunun çağrılacağı belirtilir. 12

4.2.2. Kurucuların özellikleri Kurucular sınıf ismi ile aynı isimdedir. Geri dönüş değeri olmayan metodlardır (Gerçekte geri dönüş değerleri sınıfın kendisidir). Geri dönüş değeri olmamak haricinde metodların tüm özelliklerini (overload vb.) taşırlar. Nesne oluşturulurken ilk çalışan yapılardır. C# ve Java dillerinden belirtilmese bile her sınıfın varsayılan (parametresiz) kurucusu vardır. 4.3. Parametreli Kurucular ve Kurucuların Aşırı Yüklenmesi Parametresiz kurucular, her nesne oluşturulduğunda aynı değerleri verdiği için pek kullanışlı değildir. Değişik değerlerdeki nesneleri oluşturmak için parametreli kurucular programı daha kullanışlı yapar. Örnek 2: tabanı 6, tavanı 4 ve yüksekliği 7 birim olan yamuk ile taban, tavan, yükselik değerleri dışardan girilen yamuğun alanını hesaplayan program. Yamuk sınıfı public class Yamuk private double taban; private double tavan; private double yukseklik; // Yamuk constructor public Yamuk() this.taban = 6; this.tavan = 4; this.yukseklik = 7; // parametreli constructor public Yamuk(double taban, double tavan, double yukseklik) this.taban = taban; this.tavan = tavan; this.yukseklik = yukseklik; // yamuğun alanını hesapla ve sonucu gönder public double alan() return (this.taban * this.tavan) / 2 * this.yukseklik; 13

Main kodları; // Yamuk sınıfından nesne oluşturacaktır Yamuk ym1 = new Yamuk(); Yamuk ym2 = new Yamuk(8, 3, 6); // ym1 yamuğunun alanı yazdırılır Console.WriteLine("1. Yamuğun alanı = " + ym1.alan()); // ym2 yamuğunun alanı yazdırılır Console.WriteLine("2. Yamuğun alanı = " + ym2.alan()); Örnek 3: Öğrenci bilgilerini tutan program. Ogrenci sınıfı; class Ogrenci private string adi; private string soyadi; private DateTime dogumtarihi; private string memleket; private string numara; private string bolum; private string fakulte; public Ogrenci(string adi, string soyadi, DateTime dogumtarihi, string memleket, string numara, string bolum, string fakulte) this.adi = adi; this.soyadi = soyadi; this.dogumtarihi = dogumtarihi; this.memleket = memleket; this.numara = numara; this.bolum = bolum; this.fakulte = fakulte; public void EkranaYazdir() Console.WriteLine("Numarası : " + this.numara); Console.WriteLine("------------------------------"); Console.WriteLine("Adı : " + this.adi); Console.WriteLine("Soyadı : " + this.soyadi); Console.WriteLine("Doğum Tarihi : " + this.dogumtarihi.toshortdatestring()); Console.WriteLine("Memleket : " + this.memleket); Console.WriteLine("Fakültesi : " + this.fakulte); 14

Console.WriteLine("Bölümü : " + this.bolum); Console.WriteLine(); Console.WriteLine("****************************************"); Console.WriteLine(); Main kodları; // o1 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o1=new Ogrenci("Barış","Çalışkan",new DateTime(1981, 3, 1), "Sakarya","0001.10001","Bilgisayar Mühendisliği", "Mühendislik"); //o1 nesnesi ekrana yazdırılıyor o1.ekranayazdir(); Ekran görünümü; İkinci öğrencimizi ekleyelim; Main kodlarımız; // o1 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o1=new Ogrenci("Barış","Çalışkan",new DateTime(1981, 3, 1), "Sakarya","0001.10001","Bilgisayar Mühendisliği", "Mühendislik"); 15

//o1 nesnesi ekrana yazdırılıyor o1.ekranayazdir(); // o2 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o2 = new Ogrenci("Ahmet", "Şanslı", new DateTime(1983, 8, 17), "Sakarya", "0101.10001", "Bilgisayar Mühendisliği", "Mühendislik"); //o1 nesnesi ekrana yazdırılıyor o2.ekranayazdir(); şeklinde olacaktır. Her seferinde eğer Ogrenci sınıfından oluşacak nesneyi ekrana yazdıracaksak eğer EkranaYazdir() metodunu kurucunun içersine çekebiliriz. Ogrenci Sınıfı class Ogrenci private string adi; private string soyadi; private DateTime dogumtarihi; private string memleket; private string numara; private string bolum; private string fakulte; public Ogrenci(string adi, string soyadi, DateTime dogumtarihi, string memleket, string numara, string bolum, string fakulte) this.adi = adi; this.soyadi = soyadi; this.dogumtarihi = dogumtarihi; this.memleket = memleket; this.numara = numara; this.bolum = bolum; this.fakulte = fakulte; EkranaYazdir(); public void EkranaYazdir() Console.WriteLine("Numarası : " + this.numara); Console.WriteLine("------------------------------"); Console.WriteLine("Adı : " + this.adi); Console.WriteLine("Soyadı : " + this.soyadi); Console.WriteLine("Doğum Tarihi : " + this.dogumtarihi.toshortdatestring()); Console.WriteLine("Memleket : " + this.memleket); Console.WriteLine("Fakültesi : " + this.fakulte); 16

Console.WriteLine("Bölümü : " + this.bolum); Console.WriteLine(); Console.WriteLine("****************************************"); Console.WriteLine(); Main kodlarımızı ise oldukça sade bir hale gelecektir. // o1 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o1 = new Ogrenci("Barış", "Çalışkan", new DateTime(1981, 3, 1), "Sakarya", "0001.10001", "Bilgisayar Mühendisliği", "Mühendislik"); // o2 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o2 = new Ogrenci("Ahmet", "Şanslı", new DateTime(1983, 8, 17), "Sakarya", "0101.10001", "Bilgisayar Mühendisliği", "Mühendislik"); 4.4. Static Kurucular C# ile ortaya çıkmış bir kavramdır. Sınıfa ait ilk dinamik nesne kurulmadan önce çalışan kuruculardır. Ancak sınıf içersindeki sadece static 1 üyelerine erişebilir. Özellikleri: 1. Her sınıfın ancak ve ancak tek bir static kurucusu olabilir. 2. Static kurucuların erişim belirteci olamaz. 3. Static kurucular parametresizdir. 4. Sınıfın ancak statik üyelerine erişebilir. 5. Bir sınıfta hem static hem de normal kurucu varsa öncelik static kurucularındır. 1 Static kavramı ilerleyen derslerde işlenecektir. 17

class StatikSinif static DateTime zaman = DateTime.Now; public StatikSinif() Console.WriteLine("ilk bu kurucu çalışacak mı?"); static StatikSinif() Console.WriteLine(zaman); StatikSinif s = new StatikSinif(); 4.5. Yıkıcılar (Deconstructor) Uygulama içersinde işi biten nesnelerin hafızadan silinmesi gerekir. Çok çok nadir olarak da nesneler hafızadan silirken bazı işlemlerin gerçeklenmesi gerekebilir. Tam bu noktada sınıfların yıkıcıları devreye girmektedir. ~(tilda) işareti ile gösterilir, parametre almazlar. Örnek: class Personel ~Personel() /// Yıkıcı çalışırken yapılması istenilenler /// Yıkıcılar, C++ programlarında nesnelerin hafızadan silinmesi programcı tarafından yapılmak zorundadır. C# ve Java da programlarında hafıza yönetimi Garbage Collector adı verilen yapıların kontrolünde olduğundan, nesnenin işi bittikten sonra otomatik olarak kaldırılır. Böylece sınıflar için yıkıcı metotları yazmak zorunluluğu ortadan kalkar. Ne zaman kaldırılacağı tamamen GC nin kontrolündedir. 18

Nesneler, çok özel durumlarda GC nin çalışma algoritmasına bırakmadan, programdan kaldırılmak istendiğinde kurucuların tersi olan yıkıcılar kullanılmalıdır. Özellikleri: 1. Bir sınıfın ancak ve ancak bir yıkıcısı olabilir. 2. Yıkıcılar aşırı yüklenemez. 3. Yıkıcılar kalıtım yolu ile geçmez. 4. Yıkıcılar çağrılamaz, otomatik olarak çalışır. 5. Yıkıcılar parametre alamaz. 6. Yıkıcılar değiştirilemez. 7. Yıkıcılar yalnızca sınıflarda geçerlidir. Yapılarda (struct) yoktur. 19