Polymorphism (Çok Biçimlilik) Nedir? Python, PHP ve ASP ile Örnekli Anlatım
Nesne Yönelimli Programlama (OOP) paradigmasında, yazılımın daha esnek, genişletilebilir ve sürdürülebilir olmasını sağlayan temel ilkelerden biri Polymorphism (Çok Biçimlilik)'tir. Bu kavram, aynı metodun veya işlemin, farklı nesneler üzerinde farklı şekillerde çalışabilmesini sağlar. Bu yazıda, polymorphism kavramını Python, PHP ve ASP örnekleriyle detaylı bir şekilde açıklayacak ve önemli noktaları vurgulayacağız.
1. Polymorphism (Çok Biçimlilik) Nedir?
Polymorphism, kelime anlamı olarak "çok biçimlilik" demektir ve nesne yönelimli programlamada bir metodun veya işlemin, farklı sınıflar üzerinde farklı şekilde çalışabilme yeteneği olarak tanımlanır. Polymorphism, genellikle aynı isimli metodların farklı sınıflarda farklı şekilde davranmasını sağlamak için kullanılır.
Polymorphism'in Temel Özellikleri:
Aynı Metod, Farklı Davranışlar: Polymorphism sayesinde, bir metodun farklı nesnelerde farklı sonuçlar vermesi sağlanır.
Dinamik Bağlantı (Dynamic Binding): Program çalıştığında, hangi metodun çağrılacağı belirlenir. Bu, polymorphism’in çalışma prensibidir.
Esneklik ve Genişletilebilirlik: Polymorphism, yazılımların daha esnek ve genişletilebilir olmasını sağlar. Yeni sınıflar eklenmesi, mevcut kodu değiştirmeyi gerektirmez.
2. Python'da Polymorphism
Python'da polymorphism, aynı metodun farklı sınıflarda farklı şekillerde çalışabilmesini sağlamak için kolayca uygulanabilir. Python'da metodların değiştirilmesi (method overriding) yaygın bir polymorphism örneğidir. Ayrıca, Python'da polimorfizm, duck typing (ördek tipi) adı verilen bir özellik ile de desteklenir. Yani, bir nesnenin türü, o nesnenin hangi metodları desteklediğine bağlıdır.
Python Örneği: Polymorphism
1class Sekil:2def alan_hesapla(self):3pass # Genel bir metod, alt sınıflarda implement edilecek45class Dikdortgen(Sekil):6def __init__(self, en, boy):7self.en = en8self.boy = boy910def alan_hesapla(self):11return self.en * self.boy # Dikdörtgen için alan hesaplama1213class Daire(Sekil):14def __init__(self, yaricap):15self.yaricap = yaricap1617def alan_hesapla(self):18return 3.14 * self.yaricap ** 2 # Daire için alan hesaplama1920# Nesneler oluşturuluyor21sekiller = [Dikdortgen(5, 10), Daire(7)]2223for sekil in sekiller:24print(f"Alan: {sekil.alan_hesapla()}")3. PHP'de Polymorphism
PHP'de polymorphism, method overriding (metodun geçersiz kılınması) ile sağlanabilir. Üst sınıfın metodları, alt sınıflarda değiştirilerek farklı şekillerde çalıştırılabilir. PHP, nesne yönelimli özelliklerini desteklediğinden, polymorphism PHP'de de yaygın olarak kullanılır.
PHP Örneği: Polymorphism
1<?php2// Üst sınıf3class Sekil {4public function alan_hesapla() {5return 0;6}7}89// Alt sınıf - Dikdörtgen10class Dikdortgen extends Sekil {11private $en;12private $boy;1314public function __construct($en, $boy) {15$this->en = $en;16$this->boy = $boy;17}1819public function alan_hesapla() {20return $this->en * $this->boy;21}22}2324// Alt sınıf - Daire25class Daire extends Sekil {26private $yaricap;2728public function __construct($yaricap) {29$this->yaricap = $yaricap;30}3132public function alan_hesapla() {33return 3.14 * $this->yaricap * $this->yaricap;34}35}3637// Nesneler oluşturuluyor38$sekiller = [39new Dikdortgen(5, 10),40new Daire(7)41];4243foreach ($sekiller as $sekil) {44echo "Alan: " . $sekil->alan_hesapla() . "<br>";45}46?>4. ASP'de Polymorphism
ASP'de, özellikle klasik ASP (VBScript), OOP yapısını kısıtlı bir şekilde destekler. Ancak ASP.NET gibi daha modern ASP platformları, OOP destekler ve polymorphism, sınıflar arasında inheritance ve method overriding ile uygulanabilir. ASP'de polymorphism için Inherits anahtar kelimesi kullanılır.
ASP Örneği: Polymorphism
1<%2' Üst sınıf3Class Sekil4Public marka56Sub Class_Initialize()7marka = "Genel Şekil"8End Sub910Function alan_hesapla()11' Genel alan hesaplama işlemi12alan_hesapla = 013End Function14End Class1516' Alt sınıf - Dikdörtgen17Class Dikdortgen18Inherits Sekil1920Private en, boy2122Sub Class_Initialize()23marka = "Dikdörtgen"24en = 525boy = 1026End Sub2728Function alan_hesapla()29alan_hesapla = en * boy30End Function31End Class3233' Alt sınıf - Daire34Class Daire35Inherits Sekil3637Private yaricap3839Sub Class_Initialize()40marka = "Daire"41yaricap = 742End Sub4344Function alan_hesapla()45alan_hesapla = 3.14 * yaricap * yaricap46End Function47End Class4849' Nesneler oluşturuluyor50Dim sekiller(2)51Set sekiller(0) = New Dikdortgen52Set sekiller(1) = New Daire5354For Each sekil In sekiller55Response.Write("Alan: " & sekil.alan_hesapla() & "<br>")56Next57%>5. Polymorphism İpuçları ve En İyi Uygulamalar
Metod Overriding Kullanımı: Alt sınıflarda üst sınıfın metodlarını geçersiz kılmak (overriding), polymorphism'in en yaygın kullanım şeklidir.
Kodu Daha Esnek Hale Getirme: Polymorphism, uygulamanın esnekliğini artırır çünkü yeni sınıflar eklemek, mevcut sınıflarda herhangi bir değişiklik yapmadan mümkündür.
Daha Temiz Kod: Aynı metod adıyla farklı işlevler gerçekleştirmek, kodu daha temiz ve anlaşılır kılar. Aynı isimdeki metodlar, farklı nesnelerde farklı işlevler yerine getirir.
Interface Kullanımı: Polymorphism, interface’ler ile de kullanılabilir. Birden fazla sınıf, aynı interface’i implement ederek aynı metodları kullanabilir.
Polymorphism (Çok Biçimlilik), nesne yönelimli programlamanın en güçlü özelliklerinden biridir ve yazılımlarımızı daha esnek, modüler ve bakım yapılabilir hale getirir. Python, PHP ve ASP gibi dillerde polymorphism, metod overriding (metod geçersiz kılma) ve inheritance (kalıtım) kullanılarak uygulanabilir. Polymorphism sayesinde, aynı metod adıyla farklı nesnelerde farklı davranışlar sergileyebilirsiniz, bu da yazılım geliştirmede büyük bir esneklik sağlar.
0 yorum