18 Ekim 2015 Pazar

Abstract Class Nedir ?

Bloğa yazı eklemeyeli uzun zaman oldu. Açıkçası bazen aklıma yazacak çok fazla bir şey gelmiyor o nedenle de ne yazacağımı düşünerek zaman kaybettiğimi düşünüyorum. Bu yüzden temel şeyler yazarak yazılara devam etmeye karar verdim. Yazımda sizlere abstract classlardan bahsedeceğim.

Aslında abstract classlardan bir çok yerde base (temel) class olarak da bahsediliyor ki bu sıfatı da hak ediyor. Abstract classlar projenizde oluşturacağınız sınıfların bir çok ortak noktası varsa kullanılan bence yazılımda her zaman kullanılması gereken bir sınıf. Şimdi bu sınıfı örnek kodlarla inceleyelim.

Bizim bir iş yerimiz olsun ve bu iş yerinde çalışanlar (işçi,memur, müdürler ve başkanlar) olsun. Dört sınıfımızın bir çok ortak noktası olduğunu hemen fark etmişsinizdir. O zaman bu dört sınıf için abstract classımızı oluşturalım.

c# abstract class


Gördüğünüz gibi Calisanlar sınıfını oluşturdum ve Memur sınıfına kalıtım yaptım ama projemi derlediğim de visual studio bana hemen kızdı. Çünkü abstract classımın içinde abstract olarak tanımladığım propertylerimi kalıtım yaptığım Memur sınıfında tanımlamadım. Bence çok güzel bir durum hemen tanımlayayım :) 

Tanımlamamı yaptım ve diğer sınıfları (işçi, müdür ve başkan) sınıflarını da tanımladım. Şimdi bütün sınıflarım Calisan sınıfından türediği için hepsinde Ad , Soyad ve Unvan propertyleri var. Ben istersem Mudur sınıfına başka propertyler ekleyebilirim. Tabi bu diğer sınıflarım içinde geçerli ama hepsini temeli Calisanlar.

Şimdi bir de abstract classımız da abstract metot tanımlayalım. O da aynı tepkileri verecektir. Yani kalıtım alan her sınıfta bu metodun bulunması lazım. Yalnız burada bir fark var. Abstract metotlar tanımlandıklarında bodyleri (içlerinde yapacağımız işlemlerin kodunu yazdığımız yer) yoktur. Abstract metotların bodyleri override edildikleri sınıfın içinde yazılır. Ekleyelim ve bakalım nasıl kullanılıyormuş.

c# abstract class

Yukarıda gördüğünüz üzere Calisanlar sınıfındaki MaasAl metodumuzdaki abstract metodumuzun bodysi yok ve kalıtım yaptığımız sınıfta bunu yazdık. Tabi bunu eklediğimiz Calisanlar sınıfından kalıtım yaptığımız tüm sınıflara eklememiz lazım. 

Şimdi sırada sınıflarımızı tanımlamamızda. Burada çok önemli bir şeyi belirtmem lazım. Abstract classların instancesını (nesnesini) oluşturamazsınız. Yani

Calisanlar calisan=new Calisanlar(); şeklinde bir kullanımı yoktur.

Abstract sınıfımızdan türettiğimiz sınıflarımızın kullanımını nasıl oluşturacağız ona bakalım o zaman.

c# abstract class

Yukarıdaki iki kullanımda doğrudur. Hemen kısa bir dip not düşeyim. Bu sınıfların constructorlarını da oluşturursanız ilk olarak base sınıfımız olan Calisanlar sınıfı daha sonra kalıtım alan sınıfın constructor'ı çalışacaktır. Bunu da sınıfların içine messagebox koyarak ya da ekranda bir kontrole yazdırarak görebilirsiniz. Bu günlük benden bu kadar. Umarım işinize yararlı bilgiler vermişimdir.


Hiç yorum yok:

Yorum Gönder