C# Soyutlama (Abstraction)

Soyutlama, bir nesnenin karmaşık detaylarını gizleyip sadece kullanıcı için gerekli olan temel özellikleri sunma tekniğidir. C#'ta soyutlama yapmak için iki ana yapı kullanılır: Abstract Sınıflar ve Interface'ler.

Temel Mantık

Soyutlama, alt sınıflara bir "sözleşme" dayatır. Üst sınıf der ki: "Eğer benden türeyeceksen, şu metodları mutlaka doldurmalısın (implement etmelisin)." Ancak bu metodların nasıl çalışacağıyla üst sınıf ilgilenmez.

1) Abstract (Soyut) Sınıflar

İçerisinde hem gövdeli (çalışan) metodlar hem de gövdesiz (soyut) metodlar barındırabilen sınıflardır. new anahtar kelimesi ile nesnesi oluşturulamaz.

C# Abstract Class Example
public abstract class OdemeSistemi {
    // Normal metod (Gövdesi var)
    public void FisYazdir() {
        Console.WriteLine("Fiş kesiliyor...");
    }

    // Soyut metod (Gövdesi yok, alt sınıf doldurmak zorunda)
    public abstract void OdemeYap(double tutar);
}

public class KrediKarti : OdemeSistemi {
    public override void OdemeYap(double tutar) {
        Console.WriteLine($"{tutar} TL kredi kartı ile ödendi.");
    }
}

2) Interface (Arayüz)

Sınıfların hangi yeteneklere sahip olması gerektiğini belirten bir rehberdir. Bir sınıf birden fazla interface'i uygulayabilir.

public interface IVeritabani {
    void Baglan(); // Sadece imza, gövde yok.
}

public class MySql : IVeritabani {
    public void Baglan() {
        Console.WriteLine("MySQL'e bağlandı.");
    }
}

Abstract Sınıf mı, Interface mi?

Özellik Abstract Class Interface
Kalıtım Tek bir sınıftan alınabilir. Birden fazla uygulanabilir.
Metod Gövdesi Bulunabilir. Sadece imza bulunur (Varsayılan hariç).
Değişken Tanımlanabilir. Tanımlanamaz.
💡 İpucu: Eğer nesneler arasında bir "biridir" (is-a) ilişkisi varsa Abstract Class, nesnelerin sahip olduğu "yetenekleri" (can-do) tanımlıyorsanız Interface tercih edilmelidir.

Özet

  • Soyutlama, gereksiz detayları gizleyerek kodun anlaşılabilirliğini artırır.
  • abstract sınıflar şablon görevi görür.
  • interface yapıları sistemin modülerliğini ve test edilebilirliğini artırır.