10 Temmuz 2014 Perşembe

Makale: Organik Yazılım - Kalıtım Nedir - Bölüm 2

Değerli dostlar bu yazımda kaldığımız yer olan kalıtımın temel nesnelerden son türlere dönüştürülmesi konusunu ele alacağım.

Önceki makalede kalıtımla ilgili temel bilgileri vermiştim ancak kalıtımla oluşturduğumuz temel tipteki nesneleri nasıl tekrar geri elde edeceğiz bu konuya değinmek istedim.

Neden temel tipe dönüştürüp tekrar son tipe dönüştürme ihtiyacı duyarız ona değinelim. İlk olarak eğer ki nesneleri aktarmanız gereken ortak bir fonksiyon yada liste var ise temel tipe dönüştürmek en mantıklı seçenektir. Önceki örnekte alt tipte oluşturulmuş memur ve işçi sınıflarını temel tipteki personele dönüştürerek ekranda grid tarzı bir şekilde listelemeyi sağlayabildik. Bu sayede son tipte farklı olan iki nesnenin ana tipteki ortak özellikleriyle ekranda bir listesini oluşturduk. Farklı bir örnekte ise önceki örneğimizden yola çıkarak kazançları ekrana çıktı veren bir uygulama geliştireceğiz.

using System;
using System.Collections;
using System.Collections.Generic;

public class Test
{
public static void Main()
{
// your code goes here
List listOfPersonel = new 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)
{
Memur memur = (Memur)personel;
Console.WriteLine(memur.prim.ToString());
}
}
}

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 ki hazırlamış olduğumuz kodu çalıştırdığımızda listedeki ilk nesne memur tipinde olduğu için ilk nesne dönüştürülebilirken ikinci nesne için geçersiz dönüşüm hatası vermektedir. Peki biz bu durumda nasıl bu iki tipte alacakları ücreti bulabiliriz. Tabi ki tip denetimi yaparak.

using System;
using System.Collections;
using System.Collections.Generic;

public class Test
{
public static void Main()
{
// your code goes here
List listOfPersonel = new 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.Write(personel.adi + "\t");
if (personel is Memur)
{
Memur memur = (Memur)personel;
Console.Write(memur.prim.ToString());
}
else if (personel is Isci)
{
Isci isci = (Isci)personel;
Console.Write(isci.mesai.ToString());
}
Console.Write("\n\r");
}
}
}

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 yaptığımız denetleme sayesinde ana tipteki sınıfın alt tipe dönüşebileceğini bir nebze sorgulamış olduk. Bu şekilde ana nesnenin alt tipe dönüşmesi gerçekleşmiş oldu.

Uygulamayı denemek için http://ideone.com/BWSICv adresinden online derleyerek çalıştırabilirsiniz. Bir daha ki yazımda baskın gen yapısını anlatarak bindirilmiş yöntemlere değineceğim.

Tekrar görüşünceye dek esenlikle kalın...

0 yorum: