ABSTRACT SINIFLAR & INTERFACES

Abstract class yada Interface : Programlama dünyasında ki en kararsız bırakan konulardan biri bu ikiliden hangisi kullanmaya karar vermektir. Şimdi bu sınıfıları teker teker detaylı olarak ele alalım.

Abstract class: Bir abstract sınıf diğer sınıflar gibi (properties, metodlar ve collectionlar gibi) bir sınıftır. Tek farkı abstract bir sınıfın nesnesinin yaratılamamasıdır. Tabi ki “abstract” anahtar kelimesi sınıfın bildirimde kullanılır.Abstract bir sınıf, gövdesi olan metodlara ve hatta sadece abstract ifadesi bulunan metodlara bile sahip olabilir. Örneğe geçelim :

//1. Bir abstract sınıf onu tanımlayan "abstract" anahtar kelimesine sahiptir
namespace abstractClass_ve_Interfaces
{
public abstract class AbstractClassOrnegi
{
//2. Abstract sınıflar field içerebilir
int field;
// ve diğer sınıflar gibi property'ler içerebilir
public int Property1 { get; set; }
//3. Kendi gibi abstact bir metod içerebilir.
public abstract void AbstractMetod();
//4. Ayrıca somut metodlarda içerbilir
public void SomutMetod()
{
Response.Write("Somut metod");
}
}
}

Şimdi çoğumuzun karıştırdığı noktalara geliyoruz. Abstract sınıfılar hakkında bilinen yanlışlar ve gerçekler.

Yanlış: Abstract sınıf en az bir tane abstract metod içermelidir.
DoğruAbstract sınıflar abstract bir metod içermek zorunda değildir fakat en az bir tane abstract metod içeren sınıflar abstract ile tanımalanmalıdır.

Şimdi akla böyle bir sınıfı niçin kullanacağımız gelebilir. Abstract sınıf tüm alt sınıfları default olarak işleme geçirirken aynı zamanda kullanıcının abstract sınıfın nesnesinin yaratılmasını engeller.

//1. Bir abstract sınıf içerisinde abstract bir sınıf barındırmak zorunda değildir
namespace abstractClass_ve_Interfaces
{
public abstract class AbstractClassOrnegi
{

public void SomutMetod1()
{
Response.Write("Somut metod");
}
public void SomutMetod2()
{
Response.Write("Somut metod");
}

}
}

Yanlış: Abstract sınıf nesne ile temsil edilemediğinden içerisinde bir constructor barındıramaz.
Doğru:   Abstract sınıf nesne ile temsil edilemez ama yine de constructor içerebilir

Aklınıza tekrar abstract bir sınıf şayet nesne ile temsil edilemiyorsa o zaman constructor kullanmanın yararı nedir sorusu gelebilir.

Abstract sınıflar miras (inheritance) konseptini esas alır. C# dilinde her ne zaman bir sınıf türetildiğinde o sınıfın nesnesi yaratılabilir, ilk önce alt sınıf contructor’ları çağrılır ve bunlar super sınıf constructor’u  olarak adlandırılırlar ve ilk olarak devreye giren veya başlatılan abstract sınıf constuructor’u bunlardır..

//1. Bir abstract sınıf içerisinde constructor barındırabilir
namespace abstractClass_ve_Interfaces
{
public abstract class AbstractClassOrnegi
{

protected Metod1()
{
Response.Write("Abstract sınıf constructor çağırdı");
}
}
public class TuretilenSinif: AbstractClassOrnegi
{
public TuretilenSinif()
{
Response.Write("Türetilen sınıf constructor çağırdı");
}

}

}
}

Abstract sınıf kavramıyla ilgili yazımız burada bitiyor bir sonraki yazıda interface’leri ele alacağız.

 

Muavenet

Web teknolojilerine merak salmış bir bilgisayar mühendisinin yazıları

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir