# Çok biçimlilik

Adres: https://softwaredictionary.org/tr/terimler/polymorphism
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
İngilizcesi: Polymorphism
Türkçe karşılığı: polimorfizm, çok şekillilik
Okunuşu: polimorfizım

Kısaca: Çok biçimlilik, kodun farklı türlerdeki değerlerle ortak bir arayüz üzerinden çalışabilmesidir; her tür kendi davranışını sağlar.

## Programlamada çok biçimlilik (polymorphism) nedir?

Yunancadaki 'birçok biçim' anlamından gelen çok biçimlilik, aynı kod parçasının farklı türlerdeki nesnelerle çalışabilmesi demektir. Bir şeklin daire mi kare mi olduğunu bilmeden onun üzerinde `area()` gibi bir metot çağırırsınız ve her nesne kendi doğru yöntemiyle yanıt verir. Bu, genel kodu bir kez yazıp yeni türleri sonradan onu değiştirmeden eklemenizi sağlar.

Nesne yönelimli programlamada en yaygın biçimi alt tür çok biçimliliğidir (subtype polymorphism): ortak bir ebeveyn sınıfı ya da interface'i paylaşan sınıfların her biri aynı metodu geçersiz kılar ve çalışma zamanında dil, nesnenin gerçek türüne göre doğru sürümü seçer; buna dinamik gönderim (dynamic dispatch) denir. Bir sınıfın aynı ada ama farklı parametrelere sahip birkaç metodu olduğu metot aşırı yüklemesi (overloading) ise derleme zamanında çözümlenen başka bir biçimdir. Generics, tek bir fonksiyonun ya da sınıfın birçok türle çalıştığı parametrik çok biçimlilik denen üçüncü biçimdir.

Evrensel kumanda iyi bir benzetmedir: güç düğmesine basmak, her cihaz kendi yöntemiyle açılsa da televizyonda, ses çubuğunda ve akış kutusunda çalışır. Aynı şekilde bir ödeme sistemi kart, banka havalesi ya da cüzdan nesnelerinin hepsinde `pay()` çağırabilir ve bir çizim uygulaması bir şekiller listesi üzerinde dönüp her birinde `draw()` çağırabilir.

Çok biçimlilik sıklıkla kalıtımla karıştırılır. Kalıtım sınıflar arasında kod paylaşmanın bir yoludur; çok biçimlilik ise farklı türleri ortak bir arayüz üzerinden kullanabilme yeteneğidir ve bu, interface'lerden ya da Python ve JavaScript gibi dinamik dillerdeki, doğru metoda sahip her nesnenin çalıştığı duck typing'den de gelebilir. Bir nesnenin türünü denetleyip ne yapacağına karar veren uzun bir `if` ya da `switch` deyimi, çok biçimliliğin yardımcı olacağının bir işaretidir.

## Önemli noktalar

- Çok biçimlilik, tek arayüz ve birçok uygulama demektir.
- Alt tür çok biçimliliği, nesnenin gerçek türüne göre doğru geçersiz kılınmış metodu çalışma zamanında seçer.
- Metot aşırı yüklemesi ve generics, çok biçimliliğin diğer biçimleridir.
- Duck typing, dinamik dillere ortak bir ebeveyn sınıf olmadan çok biçimlilik sağlar.
- Tür denetleyen uzun `if` ya da `switch` zincirlerinin yerine tek bir metot çağrısı koyar.

## Örnek: JavaScript'te tek döngü, birçok şekil

```javascript
class Shape {
  area() { return 0; }
}
class Circle extends Shape {
  constructor(r) { super(); this.r = r; }
  area() { return Math.PI * this.r ** 2; }
}
class Square extends Shape {
  constructor(side) { super(); this.side = side; }
  area() { return this.side ** 2; }
}

// One loop works for every kind of shape, including ones added later
const shapes = [new Circle(1), new Square(2)];
for (const s of shapes) console.log(s.area()); // 3.14159..., then 4
```

## Sık sorulan sorular

**Çok biçimlilik ile kalıtım arasındaki fark nedir?**

Kalıtım bir sınıfın başka bir sınıfın kodunu yeniden kullanıp genişletmesini sağlar; çok biçimlilik ise kodun farklı türlerdeki nesnelere ortak bir arayüz üzerinden davranmasına izin verir. Kalıtım çok biçimlilik elde etmenin yaygın yollarından biridir, ancak interface'ler ve duck typing hiç kod paylaşmadan aynısını sağlar.

**Aşırı yükleme (overloading) ile geçersiz kılma (overriding) arasındaki fark nedir?**

Aşırı yükleme, aynı sınıftaki birkaç metodun aynı adı taşıyıp farklı parametreler alması demektir ve derleyici birini derleme zamanında seçer. Geçersiz kılma ise bir alt sınıfın aynı imzaya sahip ebeveyn metodunun yerini almasıdır ve doğru sürüm çalışma zamanında seçilir.

**Çok biçimlilik türleri nelerdir?**

Ana türler alt tür çok biçimliliği (ortak bir ebeveynden ya da interface'ten gelen metotları geçersiz kılma), ad hoc çok biçimlilik (metot ve operatör aşırı yüklemesi) ve parametrik çok biçimliliktir (generics). Dinamik diller ayrıca büyük ölçüde duck typing'e dayanır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
