C#

C# Polymorphism

Yazar - UĞUR

Polymorphism kelimesi “birçok forma sahip olmak” anlamına gelir.
Genellikle polymorphism, bir sınıf hiyerarşisi olduğunda ve ortak bir taban sınıftan inheritance(miras) yoluyla ilişkilendirildiğinde oluşur.
polymorphism, bir üye metot çağrısının, metodu çağıran nesnenin türüne bağlı olarak farklı bir işlemi gerçekleştirilmesine neden olacağı anlamına gelir.

Basitçe polymorphism, tek bir metodun farklı uygulamalara sahip olabileceği anlamına gelir.

Kullanıcıların farklı şekillerde çizmelerine olanak tanıyan bir program düşünün. Her şekil farklı şekilde çizilir ve kullanıcının hangi şekli seçeceğini bilmiyorsunuzdur.
Burada, polymorphism, türetilmiş sınıfın uygun Draw metodunu çağırmak için temel sınıfta aynı metodu geçersiz kılarak uygun Draw metodunu çağırmak için kullanılabilir
Bu tür metotlar, temel sınıfta virtual anahtar sözcüğünü kullanarak bildirilmelidir.
Örneğin;

class Shape {
 public virtual void Draw() {
 Console.Write("Base Draw");
 }
}

Virtual anahtar sözcüğü, metotların türetilmiş sınıflarda geçersiz kılınmasını sağlar.

Virtual metotlar, ilgili nesnelerin grupları ile tek biçimli olarak çalışmanıza olanak tanır.

Şimdi, override anahtar kelimesini kullanarak kendi Draw metotlarını tanımlayan farklı shape sınıfları türetebiliriz:

class Circle : Shape {
 public override void Draw() {
 // draw a circle...
 Console.WriteLine("Circle Draw");
 }
}
class Rectangle : Shape {
 public override void Draw() {
 // draw a rectangle...
 Console.WriteLine("Rect Draw");
 }
}

Shape temel sınıfındaki virtual Draw metodu, türetilmiş sınıflarda geçersiz(override) kılınabilir. Bu durumda, Circle (Çember) ve Rectangle(Dikdörtgenin) kendi Draw metotları vardır.
Şimdi, türemiş her tür için ayrı Shape nesneleri oluşturabilir ve ardından Draw yöntemlerini çağırabiliriz:

static void Main(string[] args) {
 Shape c = new Circle();
 c.Draw();
 //Outputs "Circle Draw"

 Shape r = new Rectangle();
 r.Draw();
 //Outputs "Rect Draw"
}

Gördüğünüz gibi, her nesne polymorphism sayesinde kendi Draw yöntemini çağırdı.

Özetlemek gerekirse, polymorphism, aynı nesneyi farklı nesneler için çağırmanın ve nesne türüne göre farklı sonuçlar üretmenin bir yoludur. Bu davranış, temel sınıftaki virtual metotlarla sağlanır.
Bunu uygulamak için temel türdeki nesneleri oluşturuyoruz, ancak bunları türetilmiş tür olarak örneklendiriyoruz:

Shape c = new Circle();

Shape temel sınıftır, Circle türetilmiş sınıf.
Peki neden polymorphism kullanıyorsunuz? Sadece kendi türünün her nesnesini örnekleyebilir ve metodunu şu şekilde çağırabilirdik:

Circle c = new Circle();
c.Draw();

Polimorfik yaklaşım, her nesneyi aynı şekilde tedavi etmemize izin verir. Tüm nesneler Shape türündeyken, onlarla çalışmak ve düzeltme yapmak daha kolaydır. Örneğin, bu türdeki nesnelerin bir listesini (veya dizisini) elinizde tutabilir ve her nesnenin türetilen türünü bilmeden dinamik olarak çalışabilirsiniz.

polymorphism çoğu durumda faydalı olabilir. Örneğin, Attack metodu için ayrı bir davranış gösteren her bir Player‘ın farklı Player türlerine sahip olacağımız bir oyun oluşturabiliriz.
Bu durumda, Attack temel sınıf Player‘ın virtual metodu olur ve türetilmiş her sınıf onu geçersiz kılar.

Yorum Yap

This site uses Akismet to reduce spam. Learn how your comment data is processed.