29
Mar'14

OOP 9: Abstract Kavramı ve Abstract Class (C# ile OOP)

Bu yazımda abstract(sanal) kavramına ve abstract sınıflara değinmeye çalışacağım.

 

Tabiki her şeyden önce böyle bir kavrama neden ihtiyaç duyduğumuzu araştırmak gerekir. Bunun için şimdiye kadar anlattıklarımdan fazlasını içermeyen bir yapı kuralım. Mesela elektronik eşya sınıfı ve bu sınıftan türemiş telefon ve bilgisayar adında iki adet sınıf olsun. İlk ihtiyacımız da bu eşyaların fiyatlarının hesaplanması olsun. Sınıfların içine bu fiyat hesaplama metodlarını da kodlayalım. Sonra ihtiyaçlarımızı biraz daha şekillendireceğiz. Anlatmaya çalıştığım yapının kodları aşağıdaki gibi olacaktır:

class ElektronikEsya
{
    public decimal Alisfiyati { get; set; }
    public decimal KarYuzdesi { get; set; }

    public decimal FiyatHesapla()
    {
        return Alisfiyati + (KarYuzdesi * Alisfiyati);
    }
}

class Telefon: ElektronikEsya { }

class Bilgisayar: ElektronikEsya { }

Main içerisini ise aşağıdaki şekilde kodlayarak telefon ve bilgisayar için fiyat hesaplaması yaptıralım.

static void Main(string[] args)
{
    Telefon telefon = new Telefon() 
    { 
        Alisfiyati = 1100, 
        KarYuzdesi = (decimal)20/100 
    };
    Console.WriteLine("Telefon fiyat: {0}", telefon.FiyatHesapla());

    Bilgisayar bilgisayar = new Bilgisayar() 
    { 
        Alisfiyati = 2000, 
        KarYuzdesi = (decimal)25/100 
    };
    Console.WriteLine("Bilgisayar fiyat: {0}", bilgisayar.FiyatHesapla());
}

Programı çalıştırdığımızda çıktı aşağıdaki gibi olacaktır.

oop9ilkFiyat
Fiyat hesaplama yapabilmek için base classtaki ortak bir metodu kullandık. Her ürün için aynı fiyat hesaplama yöntemi varsa bu iyi bir yol olabilir fakat ürünler için farklı farklı fiyat hesaplama yöntemlerine ihtiyaç duyabiliriz ve tüm ürünler için fiyat hesaplama metodu bir zorunluluk olabilir. Bu durumda base class’taki metodu virtual yapıp child class’ta override edebiliriz ama override etmeme lüksüne de sahibiz:) İstediğimiz, child class’ın bu metodu kullanmaya zorunlu olması. İhtiyacımızı karşılayan anahtar kelime abstract anahtar kelimesidir.

 

Biraz abstract anahtar kelimesinden bahsettikten sonra örneğe devam edebiliriz. Maddeler halinde sıralarsak:

 

– Abstract anahtar kelimesi hem metodlar için hem de classlar için kullanılabilir.

– Bir metodun abstract olarak işaretlenebilmesi için sınıfının da abstract olarak işaretlenmiş olması gerekmektedir.

– Abstract bir sınıf, hem abstract hem de abstract olmayan üyeler içerebilir.

– Abstract metodların gövdeleri ancak child sınıflarda kodlanabilir. Metodların gövdeleri abstract olarak işaretlendikleri abstract sınıflarda kodlanamazlar.

Yeni makaleleri E-Mail ile takip edin!