Kalıtım aynen bir organizmanın genlerinin başka bir organizmaya aktarıldığı gibi bir kod bloğunun başka bir kod bloğuna entegre olması diyebiliriz. Kalıtım için ilk önce sınıf geliştirilmesi gerekmektedir. Sınıflar olmadan kalıtım söz konusu değildir.
Hemen kalıtımı basit bir örnekle izah edelim. Bir işletmede iki tip personel olsun, bunlar memur ve işçi. Memurların maaş ve prim adında iki ödeneği, işçinin ise maaş ve masraf adında iki ödeneği olsun. İlk olarak bu iki personel tipinin de temel verileri olan adı, soyadı, kimlik nosu gibi verileri olduğunu var sayalım. Aşağıda hemen iki sınıfı da tanımlayalım.
public class Memur { public string adi { get; set; } public string soyadi { get; set; } public string kimlikno { get; set; } public decimal maas { get; set; } public decimal prim { get; set, } }
public class Isci
{
public string adi { get; set; }
public string soyadi { get; set; }
public string kimlikno { get; set; }
public decimal maas { get; set; }
public decimal masraf { get; set; }
}
Gördüğünüz gibi bu iki sınıfta bulunan temel özellikler aynı. Biz bu durumda aynı şeyleri iki farklı sınıf için oluşturmuş olduk. Hemen olayı biraz daha efektif bir hale getirelim. Memur primi maaşının %5 i kadar işçi ise masrafını maaşının %10 undan alsın. Hemen sınıfımızı uyarlıyoruz.
public class Memur
{
public string adi { get; set; }
public string soyadi { get; set; }
public string kimlikno { get; set; }
public decimal maas { get; set; }
public decimal prim {
get { return maas * 5 / 100; };
set; }
}
public class Isci
{
public string adi { get; set; }
public string soyadi { get; set; }
public string kimlikno { get; set; }
public decimal maas { get; set; }
public decimal mesai {
get { return maas * 10 / 100; };
set; }
}
Buradanda görebileceğiniz gibi tüm ortak özellikler dışında hesaplanabilir iki özellik var ki bunları az önce belirttiğimiz oranlar ile yaptırıyoruz. Peki Memur nesnesi İşçi nesnesine dönüşebilir mi? Hayır. Buna ihtiyacımız varmı? Bilmiyorum belkide var :) Ancak gerçek hayatta bu tür dönüşümlere ihtiyaç duyduğumuz olabilir. Öncelikle kalıtımla bu iki nesnenin birbirine dönüşmesi veya ata nesneye dönüşmesini sağlayalım.
public class Personel
{
public string adi { get; set; }
public string soyadi { get; set; }
public string kimlikno { get; set; }
public decimal maas { get; set; }
}
public class Memur: Personel
{
public decimal prim {
get { return maas * 5 / 100; };
set; }
}
public class Isci: Personel
{
public decimal mesai {
get { return maas * 10 / 100; };
set; }
}
Yukarıda kalıtım uygulamış olduk. Gördüğünüz gibi Memur ve İşçi sınıfları Personel sınıfından türetilerek personelde bulunan tüm kodları içine almış oldu. Bunun üzerine her iki sınıfta da kendilerine özgü kodları ayrıca yazmış olduk. Bu sayede karmaşık kodlarla oluşmuş sınıfları dahi kalıtımla alt sınıflara aktarabilir üzerinde özelleştirme yapabiliriz.
Gelelim olayın polimorfizm kısmına. İş biraz genetik bilimine benzese de aslında yaptığımız şey hemen hemen aynı. Biz iki nesne oluşturacağız ve bunları tek bir tip üzerine dönüştüreceğiz. Hemen kodla olayı daha anlamlı kılalım. Şimdi amacımız işçi ve memur nesnelerini bir listede birleştirip ekrana dökmek, gride listelemek vs. Hemen basit bir örnek yapalım.
using System;
using System.Collections;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
// your code goes here
List
Memur personel1 = new Memur();
personel1.adi = "halit";
personel1.maas = 100;
Isci personel2 = new Isci();
personel2.adi = "ahmet";
personel2.maas = 100;
listOfPersonel.Add((Personel)personel1);
listOfPersonel.Add((Personel)personel2);
foreach(Personel personel in listOfPersonel)
{
Console.WriteLine(personel.adi);
}
}
}
public class Personel
{
public string adi { get; set; }
public string soyadi { get; set; }
public string kimlikno { get; set; }
public decimal maas { get; set; }
}
public class Memur: Personel
{
public decimal prim {
get { return maas * 5 / 100; }
set {} }
}
public class Isci: Personel
{
public decimal mesai {
get { return maas * 10 / 100; }
set {} }
}
Yukarıda bizim sınıfları bir konsol uygulaması içerisinde kullandık. Bir memur ve bir işçi nesnesi oluşturup adlarını yazdık. Sonra bunları ana tipe dönüştürdük ve bir listenin içerisine tip dönüşümü yaparak attık. Dikkat ederseniz listeye Add metodu uygulanırken Personel tipine dönüştürme yapılıyor. Döngü içerisinde her iki farklı sınıfı da temel bir sınıfa döndürüp ekrana döküyoruz. Sonuç mükemmel farklı sınıflar da olsa temel sınıftaki özelliklerinden dolayı ana sınıfa dönüştüklerinde temel özelliklerine aynı sınıfmış gibi erişebiliyoruz.
Yukarıda ki kodu çalıştırıp test etmek isteyen arkadaşlar için http://ideone.com/rFAQ58 adresinden online test edebilirler. Böylelikle bu makalede kalıtım ve temel tiplere dönüşümü göstermiş olduk. Başka bir makalede temel tipten türetilmiş tiplere tekrar döndürme işlemine değineceğim.
Tekrar görüşünceye dek esenlikle kalın...
0 yorum:
Yorum Gönder