C# (C Sharp) Ders 17 – Nesne Yönelimli Programlama (OOP) – Polimorfizm (Polymorphism)

Polimorfizm (Polymorphism) bir nesnenin farklı durumlarda farklı davranışlar sergileme yeteneğidir (“çok biçimli”).

Farklı Türdeki Nesneleri Ortak Bir Arayüzle Kullanma: Aynı metot çağrısının, nesnenin türüne göre farklı sonuçlar vermesini sağlamak.

Kod Esnekliği ve Genişletilebilirlik: Yeni nesne türleri ekleyerek mevcut kodu değiştirmeden genişletebiliriz.

Örneğin: SesCikar() metodu, Hayvan, Kedi, Köpek sınıflarında farklı davranışlar sergileyebilir (Miyavlama, Havlama vb.).

Metot Aşırı Yükleme (Method Overloading): Aynı İsimde Farklı Parametre Sayısına Sahip Metotlar

  • Metot Aşırı Yüklemenin Tanımı: Bir sınıfta aynı isimde fakat farklı parametre listelerine sahip birden fazla metot tanımlamak.
  • Kullanım Alanları: Aynı işlevi farklı veri türleriyle veya farklı sayıda parametreyle gerçekleştirmek için kullanılır.
C#
public class HesapMakinesi
{
    public int Topla(int a, int b)
    {
        return a + b;
    }

    public double Topla(double a, double b)
    {
        return a + b;
    }

    public int Topla(int a, int b, int c)
    {
        return a + b + c;
    }
}

Sanal Metotlar (Virtual Methods) ve Soyut Sınıflar (Abstract Classes): Polimorfizme Giriş

  • Sanal Metotlar: Temel sınıfta virtual anahtar kelimesiyle tanımlanan metotlardır. Türetilmiş sınıflarda geçersiz kılınabilirler.
  • Soyut Sınıflar: En az bir sanal metodu olan sınıflardır. Soyut sınıflardan nesne oluşturulamaz, sadece türetilmiş sınıfları kullanılabilir. abstract anahtar kelimesiyle tanımlanır.
C#
public abstract class Sekil // Soyut Sınıf
{
    public abstract double AlanHesapla(); // Sanal Metot

    public virtual void Ciz()
    {
        Console.WriteLine("Şekil çiziliyor.");
    }
}

Arayüzler (Interfaces): Çoklu Kalıtım’a Alternatif Çözüm

  • Arayüzlerin Tanımı: Sınıfların sahip olması gereken metotları ve özellikleri tanımlayan bir sözleşmedir. interface anahtar kelimesiyle tanımlanır.
  • Çoklu Kalıtım’a Alternatif: C# çoklu kalıtımı desteklemez, ancak arayüzler aracılığıyla birden fazla davranışsal özelliği bir sınıfa ekleyebiliriz.
C#
public interface IKonusabilir // Arayüz
{
    void Konus();
}

public interface IUçabilir // Arayüz
{
    void ();
}

public class Kus : IKonusabilir, IUçabilir // Birden fazla arayüzü uyguluyor
{
    public void Konus()
    {
        Console.WriteLine("Miyav!");
    }

    public void ()
    {
        Console.WriteLine("Kuş uçuyor.");
    }
}

Polimorfizm Uygulamaları: Nesne Dizileri ve Koleksiyonları ile Polimorfik Davranış

  • Nesne Dizileri: Farklı türdeki nesneleri aynı dizide saklayabiliriz (temel sınıf türünde).
  • Polimorfik Davranış: Aynı metot çağrısının, nesnenin gerçek türüne göre farklı sonuçlar vermesi.
C#
public class Hayvan // Temel Sınıf
{
    public virtual void SesCikar()
    {
        Console.WriteLine("Hayvan sesi çıkardı.");
    }
}

public class Kedi : Hayvan
{
    public override void SesCikar()
    {
        Console.WriteLine("Miyav!");
    }
}

public class Köpek : Hayvan
{
    public override void SesCikar()
    {
        Console.WriteLine("Hav Hav!");
    }
}

// ... Main metodunda nesne dizisi oluşturma ve polimorfik davranış gösterme ...
Hayvan[] hayvanlar = new Hayvan[3];
hayvanlar[0] = new Kedi();
hayvanlar[1] = new Köpek();
hayvanlar[2] = new Hayvan();

foreach (Hayvan hayvan in hayvanlar)
{
    hayvan.SesCikar(); // Her nesne kendi türüne göre ses çıkarır!
}

Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/