crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Abstraction: Karmaşıklığı Tasarımla Gizlemek
1. Abstract Class (Soyut Sınıf): "Bir Parçası Eksik Taslak"
Abstract class, kendisinden nesne üretilemeyen ancak alt sınıflara ortak bir taban sağlayan sınıftır. Hem tamamlanmış (içinde kod olan) metotları hem de tamamlanmamış (abstract) metotları barındırabilir.
Kullanım Senaryosu: Aralarında sıkı bir hiyerarşi (is-a ilişkisi) olan ve ortak kod paylaşması gereken nesneler için kullanılır.
Java:
abstract class Veritabani {
// Ortak özellik: Tüm veritabanları bağlanır
void baglan() {
System.out.println("Veritabanına bağlanıldı.");
}
// Değişken özellik: Her DB farklı sorgu çalıştırır
abstract void sorguCalistir();
}
class MySQL extends Veritabani {
@Override
void sorguCalistir() {
System.out.println("MySQL sorgusu işleniyor...");
}
}
2. Interface (Arayüz): "Yetenek Sözleşmesi"
Interface, bir sınıfa hangi yeteneklere sahip olması gerektiğini söyleyen bir sözleşmedir. Java 8 sonrasında gelen default metotlar hariç, genellikle sadece metot imzalarını içerir.
Kullanım Senaryosu: Aralarında hiyerarşik bir bağ olması gerekmeyen ancak aynı davranışı (yeteneği) sergilemesi gereken nesneler için kullanılır.
Java:
interface Odenebilir {
void odemeYap(double miktar);
}
class KrediKarti implements Odenebilir {
public void odemeYap(double miktar) { /* Kart işlemleri */ }
}
class YemekCeki implements Odenebilir {
public void odemeYap(double miktar) { /* Çek işlemleri */ }
}
3. Abstract Class vs. Interface: Kritik Karşılaştırma
| Özellik | Abstract Class | Interface |
|---|---|---|
| Miras İlişkisi | Sadece bir tane miras alınabilir. | Birden fazla "implements" edilebilir. |
| Metot Tipi | Dolu ve boş metotlar olabilir. | Genellikle sadece boş (abstract) metotlar. |
| Değişkenler | Her türlü değişken (state) tutabilir. | Sadece sabitler (static final) olabilir. |
| Mantık | "Nedir?" sorusuna odaklanır. | "Neler yapabilir?" sorusuna odaklanır. |
4. Hangisini Ne Zaman Seçmelisiniz?
Abstract Class Seçin: Eğer objeler arasında güçlü bir aile bağı varsa ve "kod paylaşımı" yapmak istiyorsanız. (Örn: Tüm Hayvanlar nefes alır ama her biri farklı ses çıkarır).
Interface Seçin: Eğer farklı dünyalara ait nesnelere ortak bir "beceri" kazandırmak istiyorsanız. (Örn: Bir Araba da "Sürülebilir", bir At da; ama Araba bir At değildir).
Sonuç
Soyutlama, kodunuzu esnek ve geleceğe hazır hale getirir. İyi bir mimari, detaylara (implementations) değil, soyutlamalara (abstractions) dayanır. Bu sayede yarın bir gün MySQL'den PostgreSQL'e geçmek istediğinizde tüm kodunuzu değil, sadece en alttaki küçük bir parçayı değiştirmeniz yeterli olur.