Stream API

Java Abstraction

Java Kotlin Eğitimi

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Java Nesne Yönelimli Programlama başlığı altında Java Abstraction konusu ile devam ediyoruz. Java Abstraction nesne yönelimli programlamada büyük bir yer tutmaktadır. Nesnelerin soyutlanmasında ve daha geliştirilebilir ve değiştirilebilir kodlar yazılmasında büyük kolaylık sağlamaktadır.

Java Abstraction

Abstraction yapısı kurularak kullanıcıya yapılacak işlemin fonksiyonelliği sunulur. Bu şekilde kullanıcı kullandığı metodun ne yaptığıyla ilgilenirken, nasıl yaptığıyla ilgilenmez. Bu durumda fonksiyonellik ön plana çıkarken, işin nasıl yapıldığı gizlenir. Yani kullanıcı bir arabayı çalıştırır, o arabanın ilk tetiklemeden sonra hangi aşamalardan geçtiği, arka tarafta neler olduğu konularıyla ilgilenmez.

Java Kotlin Eğitimi

Java’da Abstraction interface (arayüz) ve abstract class (soyut sınıf) yapıları ile sağlanır. Abstract sınıflarla yapılan tanımlamalara ve kullanım durumuna göre soyutlama oranı fark yaratırken, Interface ler kullanılarak %100 soyutlama sağlanır.

Önemli: Interface ve Abstract Sınıflardan nesne üretilmez.

Interface ler aşağıdaki şekilde tanımlanırlar.

Java8 öncesinde Java’da interface ler içerisindeki metotların gövdeleri olmaz diyebiliriz. Java8 ile birlikte default metot ve static metot yapıları eklenmiş ve interface ler içerisinde bu yapılar sayesinde gövdeli metotlar yazılabilmeye başlanmıştır. Interface içerisinde Default Method ve Static Method yapılarından ilerleyen derslerimizde bahsedeceğim.

Abstract Class Teknik Özellikleri

Abstract sınıfların teknik yapılarından bahsetmek gerekirse;

  1. Java’da Abstract sınıflar “abstract class” anahtar kelimeleri ile oluşturulur.
  2. Java’da bir sınıf abstract olarak tanımlandıysa, abstract bir metot içerir veya içermez.
  3. Java’da bir sınıf içerisinde abstract metot varsa o sınıf abstract sınıf olmak zorundadır.
  4. Java’da tanımlanan abstract metotların gövdeleri olamaz (Gövdeden kasıt içinde işlem yapacak kodlar olmak zorundadır).
  5. Java’da tanımlanan abstract sınıfların içerisindeki abstract olmayan metotların gövdeleri olmalıdır.
  6. Java’da tanımlanan bir sınıf abstract bir sınıf tarafından genişletilirse (extend edilirse) abstract sınıfın tüm abstract metotlarını implement etmek yani kendi bünyesinde bu metotlara gövde oluşturmak zorundadır. Eğer bu metotlara sınıf içerisinde gövde yazılmayacaksa tanımlanan sınıfın yapısı abstract class olarak tanımlanmalıdır.
    Yukarıdaki iki kod örneği 6. madde de bahsedilen yapıya göre tanımlanmıştır ve hata vermezler.

Örnek

Gerçek hayata yakın bir örnek vermeye çalışalım, Person.java sınıfı içerisinde bir kişiye ait isim, soyisim ve id bilgileri tutulmaktadır.

Employee.java sınıfı ise her Employee(Çalışan) bir Person(kişi) olacağı için Person sınıfı ile genişletilmiş olup bu sınıfı miras almıştır. Fakat her firmanın çalışan maaşını farklı hesapladığı bir algoritması olduğu düşünüldüğünde Employee sınıfı içerisinde tek bir metot yazılıp tüm firmalar için çalışması beklenemez. Bu gibi durumlarda superclass abstraction yapısından faydalanılarak miras alındığı sınıflar için farklı davranışlar sergileyebilir.

Abstract yapısından faydalanılarak oluşturulan Employee sınıfı oluşturulacak diğer firma employee sınıflarına miras verilerek firmaya özel maaş hesaplama algoritmaları kullanılabilir.

SecondFirmEmployee ile FirstFirmEmployee sınıflarında maaş bilgileri farklı hesaplanmasına rağmen diğer bilgiler aynı tutulduğu için kodun birden çok kere yazılmasına gerek kalmadan abstraction yapısından faydalanılarak bir çözüm bulunmuştur. Abstract bir metot oluşturularak her sınıf içerisinde bu metot farklı işlemleri yapacak şekilde tasarlanmıştır. Aslında biz abstraction class tanımlayarak bu sınıfı extends eden sınıfların neleri @override etmesi gerektiği bilgisini vermiş olduk.

Sonuç

Java Nesne Yönelimli Programlamanın önemli paydaşlarından biri olan Abstraction ile esnek ve rahatlıkla değiştirilebilir kodlar yazılabilir. Kod tekrarlarının önüne geçileceği için için ve her sınıfa özelleştirilmiş metotlar oluşturulabileceği için bakım kolay projeler ortaya çıkacaktır.

Ayrıca biz 10’larca farklı class’ı tek bir abstract class’dan extend edebiliriz. Böylelikle şunu biliyoruz ki bu 10 farklı class içinde aynı method (yukarıdaki örnekte calculateSalary methodu ) override edildi ve biz bu methodu çağırabiliriz. Böylelikle Abstraction bize Object Orianted’ın olmazsa olmazı Polymorphism’i sağlamış oldu. Polymorphism konusunu ilerleyen derslerimizde inceleyeceğiz.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Java Dersleri için tıklayınız..

Eren Başaran

Software Developer @HAVELSAN,
Mobilhanem Yazarı

4 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?