Nesne yönelimli programlamada polimorfizm

Son Güncelleme: 4 Nisan 2026
  • polimorfizm nesnelerin sınıflarına bağlı olarak aynı yönteme farklı yanıtlar vermesini sağlar.
  • İki ana türü vardır: derleme zamanı polimorfizmi ve çalışma zamanı polimorfizmi.
  • Uygulanımı Java, Python ve C# gibi diller arasında farklılık gösterir ve her biri modüler ve uyarlanabilir geliştirme için kullanışlı yaklaşımlara sahiptir.
  • Performans ve karmaşıklık sorunları yaratabilmesine rağmen, kodun yeniden kullanılabilirliği, esneklik ve tasarımda açıklık gibi avantajlar sağlar.

Nesne yönelimli programlamada polimorfizm

Polimorfizm, nesne yönelimli programlamada ilk bakışta karmaşık görünebilen, ancak anlaşıldığında çok güçlü bir araç haline gelen merkezi bir kavramdır . Yunanca "poli" (çok) ve "morf" (biçimler) kelimelerinden türetilen bu terim, bir nesnenin farklı bağlamlarda birden fazla biçim veya davranış benimseme yeteneğini ifade eder.

Bu makale, polimorfizmin ne olduğunu, var olan türleri ve Java, Python ve C# gibi dilleri nasıl etkilediğini derinlemesine inceliyor. Ayrıca faydalarını , zorluklarını ve kalıtım ve kapsülleme gibi diğer nesne yönelimli programlama (OOP) temelleriyle ilişkisini de analiz edeceğiz . Daha fazla uzatmadan, bu büyüleyici konuya dalalım.

Nesne yönelimli programlamada polimorfizm nedir?

Nesne yönelimli programlamada polimorfizm, aynı metodun, özelliğin veya sınıfın bağlama bağlı olarak farklı şekillerde çalışmasına olanak tanır. Basitçe söylemek gerekirse, farklı sınıflara ait nesnelerin aynı mesaja veya çağrıya yanıt verebilme yeteneğidir. Bu, aynı metodun farklı nesnelere uygulandığında farklı davranabileceği anlamına gelir.

Örneğin, hayvanları modelleyen bir sistemde, "Hayvan" adında bir temel sınıfınız ( örnekler somut nesneler olurdu) ve "makeSound()" adında bir metodunuz olabilir. "Köpek" ve "Kedi" gibi türetilmiş sınıflar, havlama veya miyavlama gibi belirli sesler çıkarmak için bu metodu geçersiz kılabilir. Bu esnek ve uyarlanabilir davranışa polimorfizm diyoruz.

  En çok talep gören 5 programlama dili

Polimorfizm türleri

Polimorfizm iki ana türe ayrılabilir:

  • Derleme zamanı polimorfizmi (statik): Derleyicinin, geçirilen parametrelere göre hangi metodun çalıştırılacağını belirlemesi durumunda ortaya çıkar. Bu, birden fazla metodun aynı adı paylaşması ancak farklı imzalara (argüman sayısı ve türü) sahip olmasıyla gerçekleştirilir.
  • Çalışma zamanı polimorfizmi (dinamik): Bu durumda hangi metodun çalıştırılacağına program yürütülürken karar verilir. Bu, yöntemlerin geçersiz kılınmasıyla gerçekleştirilir. Özellikle türetilen nesnenin türüne göre davranışı uyarlamak için kullanışlıdır.

Programlama dillerinde polimorfizmin uygulanması

Polimorfizm farklı programlama dillerinde farklı şekillerde uygulanır. Bunlardan bazılarında nasıl çalıştığına bakalım:

Java

Java, güçlü tipli ve nesne yönelimli bir dil olduğundan, polimorfizmi uygulamak için çeşitli yollar sunar:

  • Metot aşırı yüklemesi: Statik polimorfizmin klasik bir örneği. Bir sınıfta aynı adı taşıyan ancak farklı imzalara sahip birden fazla metot tanımlamanıza olanak tanır.
  • Yöntem geçersiz kılmaları: Dinamik polimorfizmin örneği. Türetilmiş sınıflar, temel sınıf metodunun kendi uygulamasını sağlayabilirler.

Java'da tipik bir örnek, "Araba" ve "Bisiklet" gibi sınıflar tarafından geçersiz kılınan bir "move()" metoduna sahip bir "Araç" sınıfı olacaktır.

Python

Nesne yönelimli Python'da , dinamik tipleme sayesinde, polimorfizm kalıtıma sıkı sıkıya bağlı değildir. Bu özellik "ördek tipi" olarak bilinir: Bir nesnenin çağrılması beklenen yöntemlere sahip olması koşuluyla, Java'daki gibi resmi bir arayüzü paylaşmaya gerek kalmadan geçerli kabul edilebilir.

  Nesne Yönelimli Programlama Dili: OOP'de Ustalaşmak İçin 10 Temel Kavram

Örneğin, kalıtımı paylaşmayan "Köpek" ve "Kedi" gibi ayrı sınıflarınız olabilir, ancak her ikisi de bir "speak()" metodunu uygular. Çağrıldığında, her nesne kendi yönteminin sürümünü yürütür ve bu da katı yapılar olmadan çok biçimliliğe izin verir.

C#

C# dilinde polimorfizm öncelikle sanal yöntemler ve soyut sınıflar aracılığıyla elde edilir:

  • Sanal yöntemler: Türetilmiş sınıfların, "override" anahtar sözcüğünü kullanarak temel sınıfta tanımlanan bir yöntemi geçersiz kılmasına izin verirler.
  • Soyut dersler: Türetilen sınıfların uygulaması gereken temel arayüzü sağlarlar, böylece dinamik polimorfizm elde edilir.

Polimorfizmin faydaları

Polimorfizm yalnızca kod esnekliğini kolaylaştırmakla kalmaz, aynı zamanda birçok pratik avantaj da sağlar:

  • Kod yeniden kullanımı: Farklı tipteki nesnelerle çalışabilen genel yöntemler yazmanıza olanak tanır.
  • Daha az bakım: Daha modüler ve genişletilebilir kod, güncelleme ve ölçekleme için daha az çaba anlamına gelir.
  • esneklik: Polimorfik sistemler, mevcut kodu yeniden yapılandırmaya gerek kalmadan yeni gereksinimlere kolayca uyum sağlayabilir.
  • netlik: Temel sınıflar ve ortak metotlar kullanmak kodun karmaşıklığını azaltır ve daha anlaşılır hale getirir.

Polimorfizmin zorlukları

Polimorfizm, sayısız faydalarının yanı sıra bazı zorlukları da beraberinde getirir:

  • Performans Etkisi: Dinamik polimorfizm durumlarında çalışma zamanı çözümü programı yavaşlatabilir.
  • karmaşıklık: Gelişmiş uygulamaları yeni başlayan geliştiriciler için anlamak zor olabilir.

Polimorfizm, kalıtım ve kapsülleme arasındaki ilişki

Polimorfizm tek başına çalışmaz. Diğer OOP prensipleriyle birleştirildiğinde etkinliği artar:

  • Kalıtım: Türetilmiş sınıfların temel sınıfların metotlarını ve özelliklerini benimsemesine izin vererek kodun yeniden kullanılmasını kolaylaştırır.
  • kapsülleme: İç detayları gizleyerek ve yalnızca gerekli olanı ortaya çıkararak, polimorfizmin daha açık ve güvenli bir şekilde işleyebileceği bir ortam yaratırsınız.
  Yüksek seviyeli diller ve önemleri hakkında her şey

Bu tekniğin anlaşılması ve uygulanması yalnızca kodlama becerilerini geliştirmekle kalmaz, aynı zamanda daha etkili ve sürdürülebilir yazılım geliştirmeye de kapı açar.

nesne yönelimli programlama dili
İlgili makale:
Nesne Yönelimli Programlama Dili: OOP'de Ustalaşmak İçin 10 Temel Kavram