Polimorfizm

Eyl 08, 2013

Nesneye yönelik programlamanın temel kavramları Inheritance(Miras), Encapsulation(Kapsülleme), Abstraction(Soyutlama) ve Polymorphism(Çok Formluluk)'dir. Miras yoluyla temel bir sınıftan başka bir sınıf türetilebilir. Türetilen yeni sınıf içerisinde temel sınıfın kendisine özel bazı nesneler kullanılmak istenilebilir. Polimorfizm sayesinde bu nesneler türetilen sınıflar içerisinde yeniden düzenlenebilir. Başka bir deyişle oluşturulan nesnelerin aynı işi farklı yollarla yapması olarak kabul edilebilir. Böylelikle bir metod çağrıldığında birden fazla ve farklı sonuçlar oluşur.

Polimorfizmi kullanabilmek için bir adet temel sınıf(base class) ve bu sınıftan türemiş sınıflar(derived class)ın olması gerekir. Temel sınıfta oluşturulan bir metod diğer sınıfların hepsinde kullanılabilir ama bu metodların içerikleri birbirinden farklı olur. Türemiş sınıflarda kullanılmak istenen metod temel sınıfta sanal(virtual) olarak tanımlanır. Daha sonra türemiş sınıflar içerisinde tanımlanırken temel sınıftaki metod çiğnenir(override) ve yeni hali oluşturulur.

Uygulama:

Polimorfizmde temel sınıf bir orkestra şefi olarak düşünülebilir. Şefin orkestrasına yönelttiği akort et emri ise şef sınıfının metodu olur. Temel sınıftan türemiş gitar, keman ve mandolin sınıfları akort et emrini aynı şekilde algılar fakat farklı uygularlar.

using System;

namespace polymorphism
{
    public class Akort
    {
        public static int Main()
        {
            Sef[] akortEt = new Sef[4];

            akortEt[0] = new Sef();
            akortEt[1] = new Gitar();
            akortEt[2] = new Keman();
            akortEt[3] = new Mandolin();

            foreach(Sef emir in akortEt)
            {
                emir.AkortEt();
            }
            
            return 0;
        }
    }
}

using System;

namespace polymorphism
{
    public class Sef
    {
        public virtual void AkortEt()
        {
            Console.WriteLine("Çalgılar akort edilsin!");
        }
    }

    public class Gitar : Sef
    {
        public override void AkortEt()
        {
            Console.WriteLine("Gitar akort edildi.");
        }
    }

    class Keman : Sef
    {
        public override void AkortEt()
        {
            Console.WriteLine("Keman akort edildi.");
        }
    }

    class Mandolin : Sef
    {
        public override void AkortEt()
        {
            Console.WriteLine("Mandolin akort edildi.");
        }
    }
}