C# (C Sharp) Ders 18 – Nesne Yönelimli Programlama (OOP) – Soyutlama (Abstraction)

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ü)
ÖzellikSoyut SınıfArayüz
Anahtar Kelimeabstractinterface
ImplementationKısmi implementation olabilir.Sadece metot imzaları içerir.
Nesne OluşturmaNesne oluşturulamaz.Nesne oluşturulamaz.
Çoklu KalıtımDesteklenmez (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ı

C#
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ı

C#
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

C#
Ş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/