Abstract

Öncelikle abstract sınıf ve methodların anlatımına geçmeden önce kelime anlamına göz atalım. Abstract kelime anlamı itibariyle “Soyut”,”Soyutlandırma” anlamına gelmektedir. Sınıflar temel özelliklerin toplandığı kendisinden türetilen yani base olduğu sınıflara miras bırakan (özelliklerini aktaran) yapı demektir. Kendi üzerinden nesne türetimi yapamaz yani new anahtar kelimesiyle yeni bir kopya (instance) oluşturamazlar, soyutlandırma isim özelliğini de buradan almıştır. Abstract sınıflarının kullanımı daha çok bir çatı baz yapı oluşturmak içindir. Bu nedenle bu sınıfları kullandığımız senaryolarda sınıfın birden fazla durum için etkin rol oynaması gerekmektedir. Örneklememize geçmeden önce abstract sınıf yapı kurallarını inceleyelim.

Abstract sınıflar hakkında

• Abstract classlar abstract anatar sözcüğü kullanılarak oluşturulur.

• Abstract class’lar erişim belirleyici olarak private, protected, private internal ile tanımlanamazlar.
• Abstract class’lar içinde abstract methodlar tanımlanabilir. Static method tanımlanamaz
• Abstract method’lar body içermezler. Sadece method tanımları yapılır ve mutlaka override edilmelidir.
• Abstract class’lar tanımlanırken sealed anahtar sözcüğünü kullanamayız. Sealed abstract ile ters mantıktadır ve classların miras bırakmaması için kullanılır.
• Abstract classlar içinde abstract methodları tanımlarken override anahtar sözcüğünü kullanamayız. Override sözcüğünün kullanımı abstract classların base olduğu class’lara method implementasyonu içindir.
• Abstract sınıflar içinde property tanımı yapabiliriz.
Bir örnekle abstract ‘ı pekiştirmeye çalışalım. Örneğimizde çok basit bir log yapısı kuracağız. Oluşturacağımız yapı dosya işlemleri ve sql CRUD(insert, update,delete) işlemlerinde log yazma olanağı sağlayacak. Log yapımızı abstract ile kurduğumuz için yönetimi, anlaşılabilirliği ve implementasyonu açısından kolaylık sağlayacak. Yeni bir ConsoleApplication oluşturuyoruz ve içine abstract sınıfımızı ekliyoruz.

LogBase.cs

Abstract sınıfımızı oluşturduk. WriteLog ve WriteErrorLog adında iki method var. Bu methodların ne iş yapacağına şimdi karar vereceğiz. Projemize iki sınıf daha ekliyoruz. SqlLog ve FileLog
SqlLog.cs

FileLog.cs

Abstact mirası

SqlLog ve FileLog sınıflarımız LogBase abstract sınıfından türetilmiştir ve üzerinden barındırdığı methodları miras bırakmıştır. public class SqlLog : LogBase tanımı SqlLog sınıfının LogBase üzerindeki değişkenlere ve methodlara implement olduğunu gösterir. Yukarıda görüldüğü gibi WriteLog ve WriteErrorLog methodları override anahtart kelimesi ise yeniden düzenlenmiş, methodlara işlemleri eklenmiştir. LogBase sınıfımızdaki tüm methodları mutlaka override etmemiz gerekmektedir aksi halde derleyici hata verecektir. Şimdi program.cs sınıfımında oluşturduğumuz yapıyı kullanalım.

Yukarıdaki kod blogunda sql CRUD ve dosya işlemleri yaptığımızı varsaydık. İşlemlerde kullanacağımız log sınıflarını oluşturmak için aşağıdaki kodu kullandık. Comment haline getirilmiş kod şeklinde de instance alabiliriz. İki farkı şekilde de kullanılabilir. Kod içerisinde throw new Exception(); kodu ile ilgili işlemi yaparken hata aldığımızı varsaydık.

Oluşturduğumuz sqlLog ve fileLog sınıfları ilgili yerlerde implement oldukları methodları kullanarak farklı platformlarda log yazmamıza yardımcı olmuştur.

Abstract

iyi çalışmalar,

H.Burak Karadağ

CEVAP VER

Please enter your comment!
Please enter your name here