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.
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.
abstractsınıflar şablon görevi görür.interfaceyapıları sistemin modülerliğini ve test edilebilirliğini artırır.