Soyutlama (Abstraction) karmaşık sistemlerin gereksiz detaylarını gizleyerek, sadece önemli özelliklerini ve davranışlarını ortaya çıkarma sürecidir.
Karmaşıklığı Gizleme (Hiding Complexity): Kullanıcının sistemi anlaması için gerekli olmayan detayları saklayarak daha basit bir arayüz sunmak.
Genel Bir Model Oluşturma: Gerçek dünyadaki nesnelerin ortak özelliklerini ve davranışlarını modelleyerek, farklı türdeki nesneleri aynı şekilde ele alabilmek.
Örneğin: Bir araba kullanırken motorun iç yapısını bilmemize gerek yoktur. Sadece direksiyon, gaz pedalı gibi kontrolleri kullanarak arabayı sürebiliriz.
Soyut Sınıflar vs. Arayüzler Karşılaştırması: Ne Zaman Soyut Sınıf, Ne Zaman Arayüz Kullanılır?
Soyut Sınıflar
- “abstract” anahtar kelimesiyle tanımlanır.
- En az bir sanal metodu olmalıdır.
- Nesne oluşturulamaz, sadece türetilmiş sınıfları kullanılabilir.
- Temel sınıfın ortak özelliklerini ve davranışlarını tanımlar.
- Kullanım Alanları: Türetilmiş sınıfların belirli bir temel yapıyı takip etmesini sağlamak istediğimizde kullanılır. (Örn: Şekil soyut sınıfı)
Arayüzler
- “interface” anahtar kelimesiyle tanımlanır.
- Sadece metot imzalarını içerir (implementation yok).
- Birden fazla arayüzü uygulayabiliriz (çoklu kalıtım alternatifi).
- Davranışları tanımlar, ancak nasıl uygulanacağını belirtmez.
- Kullanım Alanları: Farklı türdeki nesnelerin ortak bir davranış sergilemesini istediğimizde kullanılır. (Örn: IKonusabilir arayüzü)
| Özellik | Soyut Sınıf | Arayüz |
|---|---|---|
| Anahtar Kelime | abstract | interface |
| Implementation | Kısmi implementation olabilir. | Sadece metot imzaları içerir. |
| Nesne Oluşturma | Nesne oluşturulamaz. | Nesne oluşturulamaz. |
| Çoklu Kalıtım | Desteklenmez (doğrudan). | Birden fazla arayüz uygulanabilir. |
| Amaç | Temel yapıyı tanımlamak. | Davranışları tanımlamak. |
Gerçek Dünya Örnekleri ile Soyutlama Uygulamaları: Şekil (Shape) Soyut Sınıfı ve Türetilmiş Sınıflar (Daire, Kare, Üçgen)
Şekil Soyut Sınıfı
public abstract class Şekil
{
public abstract double AlanHesapla(); // Sanal Metot
public virtual void Ciz()
{
Console.WriteLine("Şekil çiziliyor.");
}
}Daire, Kare, Üçgen Türetilmiş Sınıfları
public class Daire : Şekil
{
public double Yaricap { get; set; }
public override double AlanHesapla()
{
return Math.PI * Yaricap * Yaricap;
}
}
public class Kare : Şekil
{
public double KenarUzunlugu { get; set; }
public override double AlanHesapla()
{
return KenarUzunlugu * KenarUzunlugu;
}
}
// ... Üçgen sınıfı da benzer şekilde tanımlanır ...Polimorfik Kullanım
Şekil[] şekiller = new Şekil[3];
şekiller[0] = new Daire { Yaricap = 5 };
şekiller[1] = new Kare { KenarUzunlugu = 4 };
// ... Üçgen nesnesi de eklenir ...
foreach (Şekil şekil in şekiller)
{
Console.WriteLine("Alan: " + şekil.AlanHesapla()); // Her nesne kendi türüne göre alan hesaplar!
şekil.Ciz(); // Her nesne kendi türüne göre çizim yapar!
}Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/