Java programlama dili, nesne yönelimli bir dildir ve bu nedenle Nesne Yönelimli Programlama (Object Oriented Programming – OOP) kavramlarına dayanır. Bu kavramlar arasında en önemli olanlarından biri “Abstraction” yani soyutlama kavramıdır. Bu yazımızda, Java programlama dilinde abstraction kavramını anlatacağız ve neden bu kavramın yazılım geliştirme sürecinde önemli olduğunu açıklayacağız.
Abstraction Nedir ?
Abstraction, Java programlama dilinde birkaç farklı şekilde kullanılabilir. En yaygın olanı, bir sınıfın soyut sınıf olarak tanımlanmasıdır. Soyut sınıflar, doğrudan bir nesne olarak oluşturulamazlar, ancak başka sınıflar tarafından genişletilebilirler. Bu, daha özelleştirilmiş sınıflar oluşturmak için kullanılabilir. Örneğin, bir hayvan soyut sınıfı oluşturabilirsiniz. Bu sınıf, tüm hayvanların ortak özelliklerini içerebilir, ancak bu sınıfın kendisi hiçbir zaman doğrudan bir nesne olarak oluşturulamaz. Bunun yerine, bu sınıfı genişleten köpek, kedi, at gibi sınıflar oluşturabilirsiniz.
Abstraction, aynı zamanda Java arayüzleri kullanılarak da uygulanabilir. Arayüzler, sınıfların belirli bir davranış veya işlevi uygulamasını zorlar. Bir arayüz, bir sınıfın belirli bir davranışı veya işlevi gerçekleştirmesini garanti eder. Bu, bir projede belirli bir işlevsellik gerektiren birden fazla sınıfın uygulanması için yararlıdır. Örneğin, bir veritabanına erişim sağlayan bir uygulama yazıyorsanız, bir VeritabanıErisim arayüzü oluşturabilirsiniz. Bu arayüz, uygulamanın farklı yerlerinde kullanılabilen birkaç farklı veritabanı yönetim sınıfı oluşturmanıza olanak tanır.
Abstraction Örneği
Aşağıdaki örnek, bir Araba soyut sınıfı ve bu sınıfı genişleten iki farklı sınıf kullanarak soyutlama kavramını açıklamaktadır:
abstract class Araba {
protected String marka;
protected String model;
protected int yil;
public Araba(String marka, String model, int yil) {
this.marka = marka;
this.model = model;
this.yil = yil;
}
public abstract void calistir();
public abstract void durdur();
}
class BMW extends Araba {
public BMW(String model, int yil) {
super("BMW", model, yil);
}
public void calistir() {
System.out.println("BMW çalıştı");
}
public void durdur() {
System.out.println("BMW durdu");
}
}
class Mercedes extends Araba {
public Mercedes(String model, int yil) {
super("Mercedes", model, yil);
}
public void calistir() {
System.out.println("Mercedes çalıştı");
}
public void durdur() {
System.out.println("Mercedes durdu");
}
}
Bu örnekte, Araba soyut sınıfı, bir arabanın ortak özelliklerini (marka, model ve yıl) tanımlamaktadır. Ayrıca, calistir() ve durdur() adlı soyut yöntemler de tanımlanmıştır. Bu yöntemler, herhangi bir Araba nesnesinin çalıştırılması ve durdurulması gerektiğinde uygulanacak yöntemleri belirler.
BMW ve Mercedes sınıfları, Araba sınıfını genişleten iki farklı sınıftır. Her iki sınıf da, Araba sınıfındaki soyut yöntemleri uygularlar. Bu nedenle, Araba sınıfının soyut yöntemlerinin gerçek uygulamalarını içerirler. Bu sınıfların tanımlanması, BMW ve Mercedes arabalarının özelliklerine göre değiştirilebilir.
Bu yazımızda, Java dilinde abstraction, yani soyutlama kavramını anlattık. Daha fazlası için ‘Java Dersleri‘ adlı kategorimize göz atabilirsiniz.