Java İle Abstraction (Soyutlama) -Abstract Ve Interface Sınıfları

Zahit Ziya GÜREL
3 min readMay 7, 2021

--

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

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.

OracleDatabaseManager

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.

SqlDatabaseMenager

Aynı şekilde gelecek tüm veri tabanları DatabaseManagement’ı temel alarak sınıf olarak genelleştirmiş olacağız.

ProductPage

Ü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.

IProductDatabase

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.

OracleDatabaase

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…

--

--

Zahit Ziya GÜREL
Zahit Ziya GÜREL

Written by Zahit Ziya GÜREL

Full Stack Java Developer at Turkcell

No responses yet