Bu ilk dersimizde nesneye dayalı programlama (object oriented programming) konusuna giriş yapacağız. Fakat bu giriş biraz temel seviyenin ilerisinde olacaktır. Orta seviyeli kullanıcıları esas alarak hazırladığım bu derslerde Nesneye Dayalı Programlama konusunda orta seviyeli bilgilerden başlayıp ileri seviyedeki konulara kadar gideceğiz. Makalemi okuyan kişilerin öncelikle fonksiyon ve altyordam yazma konularına hakim olduğunu ve basit classlar ile çalışabildiyini esas alarak yazıyorum.
İlk dersimiz ; Kalıtım (inheritance) konusu olacaktır. Miras alma olarakta isimlendirilebilen inheritance bir class’ın özelliklerinden faydalanılarak bu classtan faydalınarak ek özellikler ekleyerek yeni classlar oluşturmaya dayanır. Bu sayede bir class bir kere yazılır, Kod tekrarı ortadan kalkar,
Kodumuz daha generic yani anlaşılır ve esnek hale gelir.
Örneğin miras işlemi:
Class MirasVerecek
{
// kodlar…
}
Class MirasAlacak : MirasVerecek
{
// kodlar…
}
şeklinde olacaktır.
Örneğin bir webform tasarlayalım:

Yukarıdaki tasarım yapıldıktan sonra C# koduna bakalım:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
ZamlıMaas zamlimaas = new ZamlıMaas();
Label1.Text = zamlimaas.MaasHesapla(int.Parse(TextBox2.Text), int.Parse(TextBox1.Text)).ToString();
}
}
Yukarıdaki koddanda anlaşılacaği üzere MaasHesapla(Maas, ZamYüzdesi) şeklinde iki deger alır ZamlıMaas Classına gönderir. Sonucu return eder peki bu classda neler oluyor?

MaasHesapla(int yuzde, int hammaas) gelen parametreler double formatına çevrilir. Bilinmelidirki kalıtım verme işlemi kalıtım veren anasınıfın tüm özelliklerine kalıtım alan yenisınıf ulaşabilmelidir ve çok kullanışlı bir metot olan base objesi ile inherit aldığı sınıfın değerlerine ulaşılacaktır.
Başka ek bir konu ise Virtual ve Override tanımlamalarıdır. Bazen bir class içinde tanımlanan yordam veya fonksiyon için mantıklı isim verme sıkıntısı yaşanabilir veya hemen hemen aynı görevi yapan iki yordam yazmak istersiniz ama isimlerinin aynı olmasını istersiniz bu durumda virtual ve override kullanılır. Bazılarınız bu iki metodu kullanmadanda bu işlemin yapılabileğini iddia edebilir. Evet debugda hatasız çalışır. O zaman bu örneği birde virtual-override olmadan yapınız. Çıkan sonuçları benimkiyle karşılaştırınız.
Şimdi örneği görelim:

Yukarıdaki tasarımdan sonra:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
ZamlıMaasHesapla zamlimaas = new ZamlıMaasHesapla();
int count = RadioButtonList1.Items.Count;
for (int i = 0 ; i <>
if (RadioButtonList1.Items[i].Selected)
{
string yüzde = RadioButtonList1.SelectedItem.Value.ToString();
Label1.Text = zamlimaas.MaasYeni(double.Parse(yüzde), double.Parse(TextBox1.Text)).ToString();
}
}
Label1.Text değerine zamli.MaasYeni() fonksiyonundan dönen değer atanacaktır.
Şimdi Classımızı görelim:
public class Maas_Ders2
{
public double zamlimaas = 0;
public virtual double MaasYeni(double Yuzde, double Maas)
{
// Kdv hesabı ile
if(Yuzde>20 && Yuzde<=25)
return zamlimaas = Convert.ToDouble(Maas + Maas *0.3);
else if (Yuzde > 15 && Yuzde <= 20)
return zamlimaas = Convert.ToDouble(Maas + Maas * 0.25);
else if (Yuzde > 10 && Yuzde <= 15)
return zamlimaas = Convert.ToDouble(Maas + Maas * 0.15);
else
return zamlimaas = Convert.ToDouble(Maas + Maas * 0.10);
}
}
public class ZamlıMaasHesapla : Maas_Ders2
{
public override double MaasYeni(double Yuzde, double Maas)
{
return base.MaasYeni(Yuzde, Maas);
}
}
Kodumuza dikkat ettiyseniz : Maas_Ders2 isimli ana class tüm özelliklerini ZamlıMaasHesapla isimli class’a kalıtım(inherit) verdi. Ve her ikisinin içindede aynı fonksiyon yazıldı. Base metodu ile ikinci classtan anaclass’a ulaşıldı. Virtual ve Override ile kodumuzda gereksiz isim kalbalığı önlenmiş oldu.
0 yorum:
Yorum Gönder