Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

Visual Basic.Net Abstract (Özet) Sınıflar

Visual Basic.Net meraklısı yazılımcılara yeniden selamlar olsun :)

Son kaç makaleden beri sürekli nesne yönelimli programlama üzerinde konuşup yeni yeni konular öğrenip duruyorken bu makalemizde de geleneğimizi bozmuyoruz.
Bugünkü VB.Net makalemizin konusu ise nesne yönelimli programlama konusunun temel öğelerinden biri olan abstract (özet) classları öğreneceğiz.

Abstract sınıf; kendisinden instance alınmayan ancak tıpkı interface (arayüz) gibi diğer sınıflara kalıtım veren bir sınıftır.Yani abstact olarak işaretlediğimiz bir sınıftan new anahtar sözcüğünü kullanarak örnek kopya alamaz ancak sınıfın içeriğini diğer sınıflara kalıtım vererek object orianted programming konusunu etkin bir şekilde kullanmış olursunuz.
Abstract sınıflarla ilgili bilmemiz gereken bir diğer nokta ise az öncede bahsettiğim gibi interface gibi davranabilmesidir.

Şimdi aklınızdan şöyle bir soru geçebilir:
"Madem abstact sınıf interface gibi davranabiliyorsa,interface'lere ne gerek var?"

Bu sorunun aklınızdan geçmesi gayet doğal,tıpkı C# ve Java programlama dillerinde olduğu gibi Visual Basic .Net'te de projelerinizde ister interface ister abstact class kullanın çokta bir fark olmayacaktır ancak bu konuyu sonraki makalemizde kurcalayacağız :)

Bu kadar çene çalmadan sonra gelin Visual Studio'yu açalım ve yeni bir abstact class oluşturalım:

vbnet-abstract

Visual Basic programlama dilinde abstract sınıf oluşturabilmek için MustInherit deyimini kullanırız ve bu deyimin Türkçe'si "kalıtım vermeli-vermesi şart" gibi bi karşılığa denk gelmektedir.

Özet sınıflardan new anahtar sözcüğüyle örnek kopya alınamaz demiştik,şimdi bu araba sınıfımızdan instance alalım ve Visual Studio'nun hata vermesini sağlayalım:

visual-studio-abstract

Visual Studio diyor ki; "MustInherit" olarak bildirilmiş bir sınıf new anahtar sözcüğüyle kullanılamaz.

Böylece abstract sınıfların asla ve asla instance veremediklerini kanıtlamış olduk :)

Abstract classların diğer sınıflara kalıtım verebildiklerini öğrenmiştik,şimdi araba sınıfımızın içeriğini tıpkı normal bir sınıf gibi property ve metotlarla dolduralım:

abstract-class-vbnet

Şimdi ise otomobil isimli bir sınıf oluşturalım ve bu özet sınıfımızdan kalıtım alalım:

abstract-instance

Otomobil sınıfımızdan new anahtar sözcüğüyle örnek kopya oluşturuyor ve sınıfa ait üyeleri,daha doğrusu araba isimli abstract sınıfımızdan devraldığımız üyeleri çağırıyoruz:

sinif-kalitim

Görüldüğü gibi abstract sınıfların kalıtım veren bir sınıf olduklarını ancak instance alınamayan bir sınıf olduklarını tescillemiş olduk :)

Araba isimli abstract sınıfımıza tekrar gözatarsanız içerisindeki metot ve property'lerin başlarına tıpkı sınıfın kendisinde olduğu gibi "MustInherit" sözcüğünü eklemeden kullandık.Bunu yapmamızın neden sınıfımızı bir interface gibi kullanmak istemediğimiz içindi.
Şimdi ise "MustOverride" deyimini kullanarak canlı isminde yeni bir abstract sınıf oluşturalım:

abstract-mustoverride

MustOverride deyimi ise aslında MustInherit deyimine çok benziyor ve farkı ise; MustInherit kalıtım verme düşüncesini, MustOverride ise verilen kalıtımın yeniden kullanılabilirliğini (değiştirilebilmesi) ifade eder.

Sınıfımızın içerisine tıpkı interface gibi dolduruyoruz ancak bu defa her üyenin başına MustOverride deyimini eklemeyi unutmuyoruz:

vbnet-mustoverride

Şimdi ise Canlı adındaki bu abstract sınıfımızdan kalıtım alacak olan kuş sınıfımızı oluşturuyoruz:

vbnet-inheritance

Tıpkı önceki makalemizdei VB.Net interface örneğimizde yaptığımız gibi kalıtım alır almaz kalıtımı alan kuş sınıfı içeriğini anında doldurdu.Bundan sonrası ise zaten daha önce öğrendiğimiz sınıfın içeriğini doldurmaktan ibaret oluyor:

vbnet-abstract-sinif

Şimdi kuş sınıfımızdan new anahtar sözcüğüyle instance alalım:

vbnet-class-new

"Otomobil" ve "Kus" sınıflarımızın ortak yönlerine baktığımızda her ikiside farklı abstract sınıflardan kalıtım almaktadır ancak otomobil sınıfımızın kalıtım aldığı araba sınıfı abstract sınıf olmasına rağmen normal kalıtım veren bir sınıfmış gibi davranıyor.

Kus sınıfının kalıtım aldığı canlı sınıfı ise abstract olmasına rağmen normal bir sınıfmış gibi değil bir interface'miş gibi davranıyor.
Her iki abstract sınıfın farkı ise interface gibi davranan canlı sınıfı içerisindeki metot ve property'ler boş geçilirken araba sınıfı içerisine yazdığımız metot ve property'lerin içlerini tamamen doldurduk.

Konunun özeti ise; kendisinden instance alınamaz olan abstract (özet) sınıfı ister interface isterseniz normal kalıtım veren bir sınıfmış gibi kullanabilirsiniz.

Böylece bir makalemizin daha sonuna gelmiş bulunmaktayız, makaleye son noktayı koymadan önce son zamanlarda
blog sayfama bazı arkadaşların küfürlü yorumlar yazdığını görüyorum ve bu yazılarımı karşılıksız olarak yazılım,veritabanı ve web yazılım konularında kendini geliştirmek isteyenler için yazıyorum.
Bunun karşılığı küfürlü yorum ve hakaretler olmamalı! Olacaksa da siteye giren her ziyaretçinin IP adresini kayıt altında tutmak yasal zorunluluğum ancak o yorum atanlar hakkında yasal işlem başlatmamamın nedeni çocukluklarına vermemden ötürüdür.

Bir sonraki makalemizde görüşmek üzere hoşçakalın esen kalın :)

Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu