Java’nın nesne yönelimli programlama (OOP) prensiplerinden biri olan Abstraction (soyutlama), bir nesnenin sadece gerekli detaylarını kullanıcıya sunup, karmaşık iç yapıyı gizleme yöntemidir. Bu sayede programcılar, önemli olan işlemlere odaklanabilir, gereksiz detaylarla uğraşmak zorunda kalmazlar.
Bu yazıda abstraction nedir, neden kullanılır, nasıl uygulanır ve Java’daki soyut sınıf (abstract class) ve arayüz (interface) kavramlarıyla ilgili örnekler sunacağız.
✅ Abstraction (Soyutlama) Nedir?
Soyutlama, bir nesnenin sadece önemli özelliklerini ve davranışlarını ortaya koyarken, gereksiz veya karmaşık detaylarını gizlemesidir. Böylece sistem daha basit, anlaşılır ve yönetilebilir hale gelir.
Java’da Abstraction Nasıl Yapılır?
Java’da soyutlama iki temel yolla yapılır:
1. Soyut Sınıflar (Abstract Classes)
abstract
anahtar kelimesi ile tanımlanır.- İçinde soyut (abstract) metotlar bulunabilir, bu metotların gövdesi yoktur.
- Soyut sınıftan türeyen alt sınıflar, soyut metotları mutlaka override etmek zorundadır.
abstract class Sekil {
abstract void ciz(); // Soyut metot
public void bilgi() { // Normal metot
System.out.println("Bu bir şekildir.");
}
}
2. Arayüzler (Interfaces)
- Tüm metotlar soyut olarak kabul edilir (Java 8’den sonra default ve static metotlar eklenebilse de).
- Çoklu implementasyon imkanı verir.
interface Canli {
void nefesAl();
void hareketEt();
}
📌 Soyut Sınıf Örneği
abstract class Hayvan {
abstract void sesCikar();
public void uyku() {
System.out.println("Hayvan uyuyor.");
}
}
class Kedi extends Hayvan {
@Override
void sesCikar() {
System.out.println("Miyav");
}
}
class Kopek extends Hayvan {
@Override
void sesCikar() {
System.out.println("Hav Hav");
}
}
Kullanımı
public class Main {
public static void main(String[] args) {
Hayvan kedi = new Kedi();
kedi.sesCikar();
kedi.uyku();
Hayvan kopek = new Kopek();
kopek.sesCikar();
kopek.uyku();
}
}
Interface Örneği
interface Ucan {
void uc();
}
class Kus implements Ucan {
public void uc() {
System.out.println("Kuş uçuyor.");
}
}
class Ucak implements Ucan {
public void uc() {
System.out.println("Uçak uçuyor.");
}
}
💡 Abstraction’ın Avantajları
Avantaj | Açıklama |
---|---|
Karmaşıklığı azaltır | Gereksiz detaylar gizlenir |
Esnek kod yapısı sağlar | Sınıflar farklı şekillerde implement edilebilir |
Kolay bakım | Değişiklikler daha kolay yönetilir |
Çoklu kalıtım sağlar | Interface kullanımı ile Java çoklu kalıtımı destekler |
⚠️ Soyut Sınıf ve Interface Arasındaki Farklar
Özellik | Soyut Sınıf (Abstract Class) | Arayüz (Interface) |
---|---|---|
Çoklu kalıtım | Desteklenmez (birden fazla soyut sınıf kalıtımı yok) | Desteklenir (birden fazla interface implement edilebilir) |
Metot gövdesi | Normal metotlar olabilir | Java 8+ ile default ve static metotlar eklenebilir |
Değişkenler | Normal değişkenler tanımlanabilir | Sadece public static final sabitler olabilir |