Merhaba
sevgili okurlar. Bu ay sizlere nesneye yönelik programlamanın önemli iki
yapısını, Abstract sınıflar ve Interface'leri anlatmaya çalışacağım. ”Eklenti
Tabanlı Programlama Teknolojileri” yazımda abstract sınıfların kullanımını
anlatmıştım. Bu yazımda abstract sınıflar ve interface'lerin kullanımına
örnekler vereceğim ve bu yapıların farklarına değineceğim.
Abstract Sınıflar:
Abstract
sınıfların normal sınıflardan farkı nesnesinin üretilememesidir. Örnek olarak
“hayvan” adlı bir abstract sınıfımız olsun. Bu sınıfın bir nesnesini
üretemeyiz. Eğer üretmeye kalkarsak aşağıdaki gibi compile zamanında hata
alırız.
Peki
nesnesi üretilemeyen bir sınıf ne işe yarar? Abstract sınıfların nesnesi
üretilemese de abstract sınıflardan türemiş sınıfların nesneleri üretilebilir.
Bunun bir diğer anlamı aynı abstract sınıflardan türemiş sınıflar ortak
özelliklere sahip olurlar. Nesneye yönelik programlamada bu olaya polymorphism denir. Şimdi abstract sınıfımızı biraz daha geliştirelim
ve yeni özelliklerini inceleyelim.
Gördüğünüz
gibi abstract sınıflarda static ve nonstatic değişkenlere sahip olabilir.
Abstract sınıflardan türetilen sınıflar bu değişkenlere sahip olacaklardır.
Örnekteki abstract sınıfımız bir static değişkene de sahip, bu değişkeni
constructorda arttırıyoruz ve destructorda azaltıyoruz. Bu sayede bu değişken
bize hayvan sınıfından türemiş tüm sınıflara ait toplam nesne sayısını
verecektir.
Abstract
sınıflar fonksiyonlara da sahip olabilirler. “adiniSoyle()” fonksiyonuna
otomatik olarak bu sınıftan türeyen
sınıflar sahip olacaktır. Ancak “Yuru()” fonksiyon abstract yani tanımlanmamış
olduğu için bu sınıftan türeyen fonksiyonlar bu sınıfı kendi içlerinde
tanımlamak zorundadır. Abstract fonksiyonların en önemli özelliklerinden birisi
budur. Aynı atadan türemiş farklı sınıflar ortak fonksiyonlara sahiptir ancak
bu fonksiyonların içeriği farklıdır.
Örnekte
gördüğünüz gibi “kopek” adlı bir sınıfı abstract “hayvan” sınıfımızdan
türettik. Bu kopek sınıfının nesnesi new fonksiyonu ile üretilebilmektedir.
Gördüğünüz gibi bu “kopek” sınıfına ait nesneyi bir “hayvan” sınıfına ait
değişkene encapsulate ederek kullanabiliyoruz. ”Eklenti Tabanlı Programlama
Teknolojileri ” yazımı incelerseniz bu özelliğin nasıl kullanılabileceği
hakkında daha iyi bir fikir edinebilirsiniz.
Interface'ler:
Interfaceler
de abstract sınıflar gibi onları implement eden sınıflara ortak özellikler
katarlar. Interface'ler abstract sınıflardan farklı olarak tüm fonksiyonları
abstractdır ve değişkenlerinin de sabittir. Interfaceler static değişkenlere de
sahip olamazlar. Interface'lerin de abstract sınıflar gibi nesneleri
üretilemez.
Interface'leri
implement eden sınıflar bu interface'lerin sahip olduğu fonksiyonlara sahip
olmak zorundadır. Bu yüzden sınıf tanımlandığında bu fonksiyonların da içleri
doldurulur.
Bir
sınıf sadece bir abstract sınıftan türeyebilir ancak birden çok interface
implement edebilir. Abstract sınıflar ile Interfacelerin en önemli farklarından
birisi budur.
Abstract
sınıflar gibi Interface'ler de bize tasarım yapma konusunda ve yazılım
projelerinin yönetimi konusunda kolaylık sağlar. Birçok tasarım kalıbında da
Interface'lerden yararlanılmaktadır. Bu yapıları kullanarak daha anlaşılır ve
daha profesyonel tasarımlar yapabilirsiniz. Umarım sizler için faydalı olmuştur.
İyi okumalar ve yazmalar.