Overriding Neden Kullanılır ?

Yaren

New member
Overriding Nedir?

Overriding, nesne yönelimli programlamada (OOP) bir terim olup, bir alt sınıfın (child class) üst sınıftan (parent class) miras aldığı bir yöntemi (method) yeniden tanımlaması işlemidir. Alt sınıf, üst sınıftan gelen metodu, kendi ihtiyaçlarına göre değiştirir. Bu, bir alt sınıfın, üst sınıftan alınan metodun işlevselliğini değiştirmesini sağlar. Overriding, genellikle bir alt sınıfın, üst sınıfın verdiği genel davranışı daha spesifik veya daha farklı bir şekilde implement etmesi gerektiğinde kullanılır.

Örneğin, bir "Hayvan" sınıfı ve ondan türeyen "Köpek" sınıfı düşünün. Eğer "Hayvan" sınıfında "sesÇıkar" adında bir metod varsa, bu metodun "Köpek" sınıfında, köpeklerin havlama özelliğini yansıtacak şekilde değiştirilmesi için overriding yapılır. Bu şekilde, her iki sınıfın da aynı metodu kullanması sağlanır fakat her birinin davranışı farklı olur.

Overriding Neden Kullanılır?

Overriding kullanmanın başlıca nedenleri şunlardır:

1. Polimorfizmin Gerçekleştirilmesi: Polimorfizm, nesne yönelimli programlamanın temel prensiplerinden biridir ve aynı türdeki nesnelerin farklı şekillerde davranabilmesini sağlar. Overriding, polimorfizmin gerçekleştirilmesinde önemli bir rol oynar. Alt sınıf, üst sınıftan miras aldığı metodu kendi ihtiyaçlarına göre değiştirerek, aynı metodun farklı nesnelerde farklı şekillerde çalışmasını sağlar.

2. Genel Davranışı Spesifikleştirme: Bir üst sınıf genellikle genel bir işlevsellik sunar, ancak bu işlevselliğin alt sınıflar için daha özel bir versiyona ihtiyacı olabilir. Örneğin, bir “Araç” sınıfında “hareketEt” metodunu düşünün. Bu metod, tüm araçlar için geçerli bir işlevi tanımlar, ancak bir "Araba" sınıfı veya "Kamyon" sınıfı bu metodu kendi ihtiyaçlarına göre daha spesifik şekilde tanımlayabilir. Overriding, bu gibi durumlarda alt sınıfın üst sınıftan gelen işlevi değiştirmesine olanak tanır.

3. Kodun Yeniden Kullanılabilirliği: Overriding, kodun yeniden kullanılabilirliğini artırır. Alt sınıf, üst sınıftan gelen temel fonksiyonelliği kullanmaya devam ederken, yalnızca özel ihtiyaçları için gerekli değişiklikleri yapabilir. Bu, kodun tekrarı olmadan esnek bir yapı oluşturulmasını sağlar.

4. Bakım Kolaylığı: Overriding, yazılımın bakımını kolaylaştırır. Çünkü bir üst sınıfın değişiklikleri, alt sınıflarda gerekli olan yerlerde sadece ilgili metodun üzerinden yapılır. Bu, yazılımda tutarlılık sağlar ve her bir sınıfın kendi sorumluluklarını yerine getirmesine olanak tanır. Üst sınıfın genel davranışı değişse bile, alt sınıflarda sadece o davranışa özgü metodlar değiştirilir.

5. İhtiyaçlara Göre Davranış Değiştirme: Bazı durumlarda, bir üst sınıfın sunduğu davranış genel bir çözüm olabilir ancak alt sınıfın kendi işlevsel gereksinimlerine daha uygun özel bir çözüm sunması gerekebilir. Overriding, bu tür ihtiyaçlar için kullanılır. Örneğin, bir ödeme sisteminde "ÖdemeYap" metodunu alt sınıf üzerinden özelleştirebiliriz; bu, her ödeme türüne özgü işlem akışlarını daha verimli bir şekilde yönetebilir.

Overriding ve Overloading Arasındaki Farklar

Overriding ve overloading sıkça karıştırılabilen kavramlardır. Ancak bu iki özellik arasındaki farklar belirgindir:

- Overriding: Overriding, bir alt sınıfın üst sınıftan miras aldığı bir metodu yeniden tanımlamasıdır. Bu durumda, metot adı, parametreleri ve dönüş tipi aynıdır. Overriding, kalıtım (inheritance) ile ilişkilidir ve polimorfizmi mümkün kılar.

- Overloading: Overloading ise aynı sınıf içinde aynı metot adını birden fazla kez tanımlamaktır. Fakat bu metotlar, parametre listesi, sayı ya da tipi bakımından farklılık gösterir. Overloading, metotların aşırı yüklenmesiyle ilgili bir durumdur ve genellikle aynı işlevi farklı parametrelerle gerçekleştirmeyi amaçlar.

Overriding Kullanım Örnekleri

Overriding kullanımı genellikle bir uygulamanın gereksinimlerine göre değişir, fakat aşağıda bu kullanımın yaygın örneklerine yer verilmiştir:

1. Hayvanlar ve Ses Çıkarmak: Bir "Hayvan" sınıfı üzerinden ses çıkarma fonksiyonu genel olarak belirlenebilir. Fakat "Köpek", "Kedi" gibi alt sınıflar, her biri için uygun ses çıkarma fonksiyonlarını overriding ile kendi sınıflarında tanımlayabilirler.

```python

class Hayvan:

def sesCikar(self):

print("Bir ses çıkarıyor...")

class Kopek(Hayvan):

def sesCikar(self):

print("Hav Hav")

class Kedi(Hayvan):

def sesCikar(self):

print("Miyav")

```

2. Ödeme İşlemleri: Farklı ödeme yöntemlerinin kendi ödeme işlemleri olabilir. Örneğin, kredi kartı ile ödeme ve PayPal ile ödeme arasında farklılıklar olabilir. Bu durumda her ödeme türü için ödeme yapma metodunun overridden edilmesi gerekebilir.

```python

class Odeme:

def odemeYap(self):

print("Genel ödeme yapılıyor.")

class KrediKartı(Odeme):

def odemeYap(self):

print("Kredi kartı ile ödeme yapılıyor.")

class PayPal(Odeme):

def odemeYap(self):

print("PayPal ile ödeme yapılıyor.")

```

Overriding Nasıl Çalışır?

Overriding işlemi, metodun adı ve parametreleri aynen kalacak şekilde, sadece metodun içeriğini değiştirmeyi içerir. Bir sınıf, başka bir sınıftan miras aldığı metodu değiştirebilir, ancak bu metodun imzası (metod adı, parametre sayısı ve türü) alt sınıfta tamamen aynı olmalıdır. Aksi takdirde, metot overriding olarak kabul edilmez.

Örneğin, "Hayvan" sınıfında bir metod tanımlandığında, bu metod alt sınıfta aynı şekilde yazılırsa overriding gerçekleşir. Alt sınıfta aynı metod adı ve parametreler bulunmazsa, bu bir yeni metod olur, overriding değil, o metot o sınıf için bir ekleme olarak kabul edilir.

Sonuç

Overriding, nesne yönelimli programlamada sınıflar arasında esneklik sağlayan, kodun daha bakımı yapılabilir ve modüler olmasını sağlayan önemli bir tekniktir. Özellikle büyük yazılım projelerinde, kodun yeniden kullanılabilirliğini artırmak, bakımını kolaylaştırmak ve polimorfizmi mümkün kılmak adına overriding kullanımı oldukça yaygındır. Bu, alt sınıfların, üst sınıflardan miras aldıkları metodları ihtiyaçlarına göre özelleştirmelerine imkan tanır ve yazılımın daha esnek bir yapıda olmasını sağlar.