polimorfizm nedir
Polimorfizm nedir?
Cevap:
Polimorfizm (İngilizce: Polymorphism), nesne yönelimli programlamanın (OOP) temel kavramlarından biridir. Kelime anlamı olarak “birden çok şekil” veya “çok biçimlilik” anlamına gelir. Yazılımda polimorfizm, aynı arayüzü veya yöntemi kullanarak farklı nesnelerin farklı davranışlar sergilemesi yeteneğidir.
Bu kavram sayesinde, programcılar ortak bir işlem için farklı nesneleri farklı şekillerde kullanabilir ve böylece kod tekrarını azaltıp, genişletilebilir ve bakımı kolay programlar yazabilirler.
Polimorfizmin Temel Türleri
| Türü | Açıklama | Örnek |
|---|---|---|
| Derleme Zamanı Polimorfizmi (Statik Polimorfizm) | Aynı isimdeki fonksiyonların farklı parametrelerle aşırı yüklenmesi (Overloading) veya şablonlarla (template) kullanımı. | Aynı isimli fonksiyonun farklı parametre tipleri ile çağrılması. |
| Çalışma Zamanı Polimorfizmi (Dinamik Polimorfizm) | Taban sınıftaki bir fonksiyonun, türetilen sınıflarda geçersiz kılınması (override) ve çalışırken hangi fonksiyonun çağrılacağına karar verilmesi. | Bir hayvan sınıfının sesi() metodu, köpek ve kedi sınıflarında farklı şekilde uygulanır. |
Polimorfizm Nasıl Çalışır?
1. Sınıf Mirası (Inheritance)
Polimorfizm genellikle sınıf mirası ile birlikte kullanılır. Bir taban sınıf (base class) tanımlanır, ardından bu sınıftan türetilmiş alt sınıflar yazılır.
2. Fonksiyon Geçersiz Kılma (Method Overriding)
Alt sınıflar, taban sınıftaki fonksiyonları kendi ihtiyaçlarına göre yeniden yazar.
3. Çok Biçimlilik (Polymorphic Behavior)
Bir taban sınıf türündeki işaretçi ya da referans ile farklı alt sınıf nesneleri aynı şekilde kullanılabilir. Çalışma zamanı sırasında, nesnenin gerçek türüne göre doğru fonksiyon çağrılır.
Örnek: Hayvan Sınıfı (C++)
#include <iostream>
using namespace std;
class Hayvan {
public:
virtual void ses() {
cout << "Hayvan ses çıkartıyor" << endl;
}
};
class Kedi : public Hayvan {
public:
void ses() override {
cout << "Miyav" << endl;
}
};
class Kopek : public Hayvan {
public:
void ses() override {
cout << "Hav hav" << endl;
}
};
int main() {
Hayvan* h1 = new Kedi();
Hayvan* h2 = new Kopek();
h1->ses(); // "Miyav" çıktısını verir
h2->ses(); // "Hav hav" çıktısını verir
delete h1;
delete h2;
return 0;
}
Bu örnekte:
- Hayvan sınıfı bir arayüz görevi görür.
- Kedi ve Kopek alt sınıfları, ses() metodunu kendilerine özgü olarak yeniden tanımlar.
- Hayvan* tipindeki işaretçiler, farklı alt sınıf nesnelerini tutar ve doğru ses() metodu çağrılır.
Polimorfizmin Faydaları
- Kodun esnekliği ve yeniden kullanılabilirliği artar.
- Yeni sınıflar eklemek, mevcut kodu değiştirmeden mümkün olur.
- Daha az kod, daha temiz ve anlaşılır yapılar.
- Çalışma zamanı kararları sayesinde dinamik davranış sergilenir.
Özet Tablo
| Kavram | Açıklama |
|---|---|
| Polimorfizm | Aynı isimli fonksiyonların farklı nesne türlerine göre farklı davranması. |
| Statik Polimorfizm | Fonksiyon aşırı yüklemesi (Overloading), compile-time’da karar verilir. |
| Dinamik Polimorfizm | Fonksiyon geçersiz kılma (Override), çalışma zamanında hangi metodun çağrılacağı belirlenir. |
| Yararları | Esneklik, genişletilebilirlik, kod tekrarı önleme, bakım kolaylığı. |
Polimorfizm, nesne yönelimli programlamanın en güçlü özelliklerinden biridir ve modern yazılımlarda yaygın şekilde kullanılır. İyi tasarlanmış polimorfik yapılar, programların esnek, bakımı kolay ve gelişime açık olmasını sağlar.
Kaynaklar:
- Robert Lafore, Object Oriented Programming in C++
- Bjarne Stroustrup, The C++ Programming Language
- OpenStax, Introduction to Programming