İçeriğe geç
parazade

Çok Biçimlilik Nedir?

İngilizce: Polymorphism

Yayın: · Son güncelleme:

Çok Biçimlilik Nedir? Kısaca

Çok biçimlilik (polymorphism), nesne yönelimli programlamada aynı adlı metot çağrısının, çağrıldığı nesnenin türüne göre farklı biçimde çalışmasıdır. Böylece farklı nesneler tek ve ortak bir arayüzle kullanılabilir.

Çok Biçimlilik nedir?
İçindekiler
  1. Çok biçimlilik nedir?
  2. Nasıl çalışır?
  3. Türleri

Çok biçimlilik nedir?

Çok biçimlilik, aynı komutun farklı nesnelerde farklı sonuç üretmesidir. Bir uygulamada KrediKarti, Havale ve KapidaOdeme sınıflarının her birinde ode() metodu olduğunu düşünün. Program yalnız odeme.ode() der; kart ise banka onayı ister, havale IBAN bilgisi gösterir, kapıda ödeme ise kuryeye not düşer.

Kelime Yunanca "çok" ve "biçim" sözcüklerinden gelir ve İngilizcede polymorphism olarak geçer. Kısaca "tek arayüz, çok uygulama" diye özetlenebilir.

Nasıl çalışır?

En yaygın biçim, kalıtım ve metot ezmeyle kurulur. Ortak bir üst sınıf ya da arayüz ode() metodunu tanımlar, her alt sınıf bu metodu kendi kuralına göre yeniden yazar. Program çalışırken hangi sürümün çağrılacağı, nesnenin gerçek türüne bakılarak belirlenir.

Bunun pratik faydası şudur: sepet ekranındaki kod, ödeme türlerini tek tek kontrol eden uzun bir if-else zinciri yerine tek satırla çalışır. Yarın "dijital cüzdan" adlı yeni bir ödeme yöntemi eklendiğinde, sepet kodu değişmez; yalnız yeni sınıf yazılır.

Türleri

Kavram iki ana türde incelenir. Çalışma zamanı çok biçimliliği, yukarıdaki gibi metot ezmeye dayanır. Derleme zamanı çok biçimliliği ise aynı adlı metodun farklı parametrelerle birden fazla kez tanımlanmasıdır; buna metot aşırı yüklemesi (overloading) denir. Java'da topla(int, int) ve topla(double, double) aynı sınıfta yan yana durabilir.

Python gibi dinamik dillerde "ördek tipi" yaklaşımı da yaygındır: bir nesne ode() metoduna sahipse, hangi sınıftan geldiğine bakılmadan kullanılır. Kendi kodunuzda tür kontrolü yapan uzun koşul zincirleri görüyorsanız, çok biçimlilikle sadeleştirmeyi düşünebilirsiniz.

Sıkça Sorulan Sorular

Polymorphism ne demek?

Polymorphism, Türkçede çok biçimlilik olarak karşılanır. Aynı adlı metodun farklı nesnelerde farklı davranış göstermesini anlatan nesne yönelimli programlama ilkesidir.

Overloading ile overriding arasındaki fark nedir?

Overloading, aynı sınıfta aynı adlı metodun farklı parametrelerle birden fazla tanımlanmasıdır. Overriding ise alt sınıfın, üst sınıftan devraldığı metodu yeniden yazmasıdır.

İlgili terimler

Kalıtım(Inheritance)Kalıtım (inheritance), nesne yönelimli programlamada bir sınıfın başka bir sınıfın özelliklerini ve metotlarını devralmasıdır. Devralan sınıfa alt sınıf, devredilen sınıfa üst sınıf denir.Arayüz(Interface)Arayüz (interface), nesne yönelimli programlamada bir sınıfın hangi metotları sağlaması gerektiğini tanımlayan, ancak bu metotların nasıl çalışacağını belirtmeyen sözleşmedir. Günlük dilde arayüz, kullanıcının yazılımla etkileşim kurduğu ekranı da ifade eder.Nesne Yönelimli Programlama(Object-Oriented Programming)Nesne yönelimli programlama (OOP), yazılımı veri ve bu veri üzerinde çalışan davranışları bir arada tutan nesneler etrafında düzenleyen programlama yaklaşımıdır. Kapsülleme, kalıtım, çok biçimlilik ve soyutlama temel ilkeleridir.Soyutlama(Abstraction)Soyutlama (abstraction), programlamada karmaşık ayrıntıları gizleyip kullanıcıya yalnız ihtiyaç duyduğu işlevleri sade bir biçimde sunma ilkesidir. Nesne yönelimli programlamada soyut sınıflar ve arayüzlerle uygulanır.Metot(Method)Metot (method), nesne yönelimli programlamada bir sınıfa ya da nesneye ait olan fonksiyondur. Nesnenin verisiyle çalışır ve genellikle `nesne.metot()` biçiminde çağrılır; örneğin `hesap.para_yatir(500)` bir metot çağrısıdır.Sınıf(Class)Sınıf (class), nesne yönelimli programlamada aynı türden nesnelerin hangi verileri ve davranışları taşıyacağını tanımlayan şablondur. Sınıftan üretilen her somut örneğe nesne denir.Derleme(Compilation)Derleme (compilation), kaynak kodun bir derleyici tarafından makine koduna ya da ara koda çevrilerek çalıştırılabilir hâle getirilmesi işlemidir. Bu sırada sözdizimi ve tür hataları da denetlenir.Nesne(Object)Nesne (object), nesne yönelimli programlamada bir sınıftan üretilen, kendi verilerini (özellikler) ve davranışlarını (metotlar) taşıyan somut örnektir. Örneğin `Araba` sınıfından üretilen her araç ayrı bir nesnedir.