Java İle Abstraction (Soyutlama) -Abstract Ve Interface Sınıfları
Not Defterime Notlar serisine bir önceki yazının devamı olarak Abstraction (Soyutlama) - Abstract Ve Interface Sınıfları eklemek istiyorum.
- Abstraction (Soyutlama)
- Abstract Class (Soyut Sınıf)
- Interface ( Arayüz)
- Sonuç
Kısaca hatırlamak gerekirse, ihtiyaç duyulan ve gereksiz olan detayları ortadan kaldırmamızı sağlayan, bu amaçlar doğrultusunda oluşturulan bir sınıf türüdür.
Abstract Class ile Interface birbirlerine benzemektedir. İkisi de temel olarak soyutlamak için kullanılır. Abstract Class sınıf bazında ortaklaşma işlemi yaparken Interface (Arayüz) metot bazlı ortaklaşma sağlar.
Her iki kullanımda da “new” anahtar sözcüğü ile yeni bir nesne oluşturulmaz. Bunun yerine örneklerdeki gibi yol takip edilir.
Abstract Class ile Çalışmak
- Statik metotlar içerebilir.
- Metotların gövdeleri olabilir.
- Constructor(yapıcı) ve destructor(yıkıcı) metot içerebilir.
- Erişim belirleyicisi public, private veya proctected olabilir.
- Genel olarak sadece bir sınıftan inheritance(miras) alabilir.
- Bir sınıf yalnızca bir abstract sınıftan inheritance(miras) alabilir.
- Sınıfın neyden türediğini ifade edebilir.
- Ortak sınıf yapısını teşvik eder.
- Metot içerisi boş olabileceği gibi doluda olabilir. Bu sayede nesnenin ne yapacağını belirlemekle beraber nasıl yapılacağını da belirtebilir.
Ürünleri listelemek için veri yığınlarına ihtiyaç duyarız. Bu veri yığınlarının yönetimi için birçok teknoloji var. Bunlardan ikisi üzerinden bir örnek ile devam edeceğim.
Oracle ve MsSql olarak iki tane veritabanı kullandığımızı düşünelim. Ürünleri listelemek için veri tabanına sorgu yazmamız gerekecektir. Elimizde birden fazla veritabanı bulunduğu için ürünleri listeleyecek fonksiyon aynı olacak ama içeriği değişecek. Bu yapıyı tek bir sınıf üzerinden yönetebiliriz.
DatabaseManagement sınıfını temel olarak ele alırsak her iki veritabanı ürünleri listelemek için “getProductData” isimli fonksiyonu temel alacaktır. Bu sayede “getProductData” yapısını sınıf bazında genellemiş olacağız.
DatabaseManagement abstract sınıfını temel alır ve içerisindeki “getProductData” metodunu implement etmek zorundadır. Bu sayede Oracle sorgusunu ürünleri listelemek için yazabiliriz.
Aynı şekilde gelecek tüm veri tabanları DatabaseManagement’ı temel alarak sınıf olarak genelleştirmiş olacağız.
Ürünler sayfasından, ürünleri listelemek için bir veri tabanına bağlanamadan istediğimiz veri tabanın nesnesini temel DatabaseManagement abstract sınıfı ile türeterek yapabiliriz.
Interface ( Arayüz) İle Çalışmak
- Override edilebilen statik olmayan metotlar bulundurur.
- Gövdeleri yoktur. Yalnızca imzaları kullanılabilir.
- Yapıcı veya Yıkıcı metotları içermez. Yalnızca imzalarını bulundurabilir.
- Metot imzaları yalnızca “public” olarak kullanılabilir.
- Birden fazla interface’den inheritance(miras) edilebilir.
- Metotlara ortak yetenek kazandırır.
- Gövdesiz metotlar olduğu için nesnenin ne yapması gerektiğini belirler ama nasıl yapılacağını miras alanlar tarafından belirlenir.
Ürünlerin veri tabanına eklenmesi için bir örnek hazırlanmıştır. Ekleme işlemi için bir IProductDatabase sınıfında “Add” isimli bir imza metodu oluşturulmuştur.
Artık bu imzayı kullanarak ürün ekleme işlemini gerçekleştireceğimiz ilgili sınıfa implement etmemiz ve gövdesi olmayan bu metodu ilgili sınıfta doldurmamız gerekecektir.
Interface’ler yukarıdaki örnek gibi metot olarak ortaklaştırmayı sağlar. Artık ekleme işlemini yapacak ürün gibi diğer varlıklarda bu metodun imzasını kullanarak ortaklaşmaya dahil olacaktır.
SONUÇ
Sınıf ve nesne yapılarını inceledik ve Nesne Yönelimli Programlamanın (OOP) temeli olan 4 maddeyi bir bir inceledik. Abstract class ile interface arasındaki farkları gördük ve test ettik. Yapmış olduğumuz bu çalışma ile temiz kodu; gereksiz kod kullanımından ve kod tekrarlarından kaçarak, ortak sınıflar altında toplayarak sağlamış olduk.
SON…