3.8 Polimorfizm (Polymorphism)

Polimorfizm, nesne yönelimli programlamanın temel özelliklerinden biridir ve bir nesnenin farklı formlarda davranabilmesi anlamına gelir. C++ dilinde polimorfizm, genellikle iki ana türde bulunur: statik (compile-time) polimorfizm ve dinamik (run-time) polimorfizm.

1. Statik Polimorfizm

Statik polimorfizm, derleme zamanında belirlenir. Genellikle fonksiyon aşırı yükleme (function overloading) ve operator aşırı yükleme (operator overloading) ile gerçekleştirilir. Bu türde, aynı isimde birden fazla fonksiyon tanımlanabilir, ancak parametre sayısı veya türleri farklı olmalıdır.

Örnek: Fonksiyon Aşırı Yükleme

#include <iostream>
using namespace std;

class Matematik {
public:
    int topla(int a, int b) {
        return a + b;
    }

    double topla(double a, double b) {
        return a + b;
    }
};

int main() {
    Matematik matematik;
    cout << "Tamsayı toplama: " << matematik.topla(5, 10) << endl; // 15
    cout << "Ondalık toplama: " << matematik.topla(5.5, 2.3) << endl; // 7.8
    return 0;
}

2. Dinamik Polimorfizm

Dinamik polimorfizm, çalışma zamanında belirlenir. Genellikle virtual anahtar kelimesi kullanılarak gerçekleştirilir. Bir üst sınıfta tanımlanan bir metot, alt sınıfta geçersiz kılındığında (override) dinamik polimorfizm sağlanır. Bu sayede, bir işaretçi veya referans ile üst sınıf türünden bir nesne kullanıldığında, alt sınıfın geçersiz kılınmış metodu çağrılır.

Örnek: Dinamik Polimorfizm

#include <iostream>
using namespace std;

class Hayvan {
public:
    virtual void sesCikar() { // Virtual anahtar kelimesi ile tanımlanır
        cout << "Hayvan ses çıkarıyor!" << endl;
    }
};

class Kedi : public Hayvan {
public:
    void sesCikar() override { // Geçersiz kılma
        cout << "Kedi miyavlıyor!" << endl;
    }
};

class Kopek : public Hayvan {
public:
    void sesCikar() override { // Geçersiz kılma
        cout << "Köpek havlıyor!" << endl;
    }
};

void hayvanSesiniCikar(Hayvan* hayvan) {
    hayvan->sesCikar(); // Dinamik olarak çağırılır
}

int main() {
    Kedi kedi;
    Kopek kopek;

    hayvanSesiniCikar(&kedi); // Kedi'nin sesi
    hayvanSesiniCikar(&kopek); // Köpek'in sesi
    return 0;
}

Polimorfizmin Avantajları

  1. Kodun Yeniden Kullanımı: Polimorfizm, benzer kodları tekrar kullanarak kodun daha modüler ve bakımı kolay olmasını sağlar.

  2. Esneklik: Dinamik polimorfizm, çalışma zamanında farklı nesne türlerini işleme yeteneği sunarak kodun esnekliğini artırır.

  3. Bakım Kolaylığı: Geçersiz kılma (override) ile üst sınıfın metotları altında yeni davranışlar tanımlamak, yazılım bakımını kolaylaştırır.

Sonuç

Polimorfizm, C++ dilinde nesne yönelimli programlamanın güçlü özelliklerinden biridir. Statik ve dinamik polimorfizm, yazılımcılara daha esnek ve bakımı kolay kod yazma imkanı sunar.

Last updated