Abstract Class vs Interface Mayıs 2010 | Sayı : 14

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.

 

      Mustafa Burak AMASYALI
İ.Ü. Bilgisayar Mühendisliği 4. Sınıf
- Mayıs 2010 -
Editörden... | H. Can ÇOBANOĞLU İzafiyet Teorisi | Özge ATASEVEN Kurumsal Facebook | Simge UÇKAN Mobil Çeviri | Neslişah ÇELİK Yogurtistan | Erman TEPE 3 Katman Mimarisi ve JavaScript | Musa ÇİÇEK Joomla ile Hızlı Site Oluşturma | Serkan AKDEMİR NV Bellek Teknolojisi ve SSD | Özkan AKGÜL Teknoloji Kaçıyor | Muhammed CÜCE Derleyicilerin Yapısı | Ercan ZENGİN Abstract Class vs Interface | Mustafa Burak AMASYALI Kriptolojide Güvenlik ve Dijital İmza | Kayhan KIRGIZ
« önceki sayfa - 10 - sonraki sayfa »

ana sayfa | arşiv | dergimiz | künye | iletişim | yazarlar için...
© 2009-2010 Bilisimdergi.Com Tasarım - Kodlama : İU BİLGİSAYAR

Creative Commons License
Bilişim Dergi içeriği  Creative Commons  lisansı ile korunmaktadır.
Kaynak göstermek ve link vermek şartıyla yazılarımızı kullanabilirsiniz.