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.

Polymorphism, yazılımın daha esnek olmasını sağlar ve kodun bakımını kolaylaştırır. Aynı metod adıyla farklı işlevler gerçekleştirmek mümkündür.

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 edilecek
4
5class Dikdortgen(Sekil):
6def __init__(self, en, boy):
7self.en = en
8self.boy = boy
9
10def alan_hesapla(self):
11return self.en * self.boy # Dikdörtgen için alan hesaplama
12
13class Daire(Sekil):
14def __init__(self, yaricap):
15self.yaricap = yaricap
16
17def alan_hesapla(self):
18return 3.14 * self.yaricap ** 2 # Daire için alan hesaplama
19
20# Nesneler oluşturuluyor
21sekiller = [Dikdortgen(5, 10), Daire(7)]
22
23for sekil in sekiller:
24print(f"Alan: {sekil.alan_hesapla()}")
Python'da, her sınıf kendi alan_hesapla() metodunu tanımlar ve farklı şekillerde işlevsellik sağlar. Polymorphism sayesinde, farklı türdeki nesneler aynı metod adıyla çağrılabilir.

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<?php
2// Üst sınıf
3class Sekil {
4public function alan_hesapla() {
5return 0;
6}
7}
8
9// Alt sınıf - Dikdörtgen
10class Dikdortgen extends Sekil {
11private $en;
12private $boy;
13
14public function __construct($en, $boy) {
15$this->en = $en;
16$this->boy = $boy;
17}
18
19public function alan_hesapla() {
20return $this->en * $this->boy;
21}
22}
23
24// Alt sınıf - Daire
25class Daire extends Sekil {
26private $yaricap;
27
28public function __construct($yaricap) {
29$this->yaricap = $yaricap;
30}
31
32public function alan_hesapla() {
33return 3.14 * $this->yaricap * $this->yaricap;
34}
35}
36
37// Nesneler oluşturuluyor
38$sekiller = [
39new Dikdortgen(5, 10),
40new Daire(7)
41];
42
43foreach ($sekiller as $sekil) {
44echo "Alan: " . $sekil->alan_hesapla() . "<br>";
45}
46?>
PHP'de polymorphism, extends anahtar kelimesiyle alt sınıf oluşturulup, üst sınıftaki metodlar geçersiz kılınarak sağlanır.

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ıf
3Class Sekil
4Public marka
5
6Sub Class_Initialize()
7marka = "Genel Şekil"
8End Sub
9
10Function alan_hesapla()
11' Genel alan hesaplama işlemi
12alan_hesapla = 0
13End Function
14End Class
15
16' Alt sınıf - Dikdörtgen
17Class Dikdortgen
18Inherits Sekil
19
20Private en, boy
21
22Sub Class_Initialize()
23marka = "Dikdörtgen"
24en = 5
25boy = 10
26End Sub
27
28Function alan_hesapla()
29alan_hesapla = en * boy
30End Function
31End Class
32
33' Alt sınıf - Daire
34Class Daire
35Inherits Sekil
36
37Private yaricap
38
39Sub Class_Initialize()
40marka = "Daire"
41yaricap = 7
42End Sub
43
44Function alan_hesapla()
45alan_hesapla = 3.14 * yaricap * yaricap
46End Function
47End Class
48
49' Nesneler oluşturuluyor
50Dim sekiller(2)
51Set sekiller(0) = New Dikdortgen
52Set sekiller(1) = New Daire
53
54For Each sekil In sekiller
55Response.Write("Alan: " & sekil.alan_hesapla() & "<br>")
56Next
57%>
ASP'de, Inherits anahtar kelimesi ile alt sınıf oluşturulup, üst sınıfın metodları override edilerek polymorphism sağlanır.

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.

Polymorphism, yazılımın bakımını kolaylaştırır, çünkü aynı metod adı ile farklı işlevler gerçekleştirilmesini sağlar. Bu da kodun tekrarını azaltır ve esnekliği artırır.




konu hakkında tepkinizi verebilirsiniz