Overriding Neden Kullanılır ?

Dilara

Bilgili
Overriding Nedir ve Neden Kullanılır?



Overriding, nesne yönelimli programlamada (OOP) kullanılan önemli bir tekniktir. Bir alt sınıfın (subclass) üst sınıfının (superclass) bir metodunu yeniden tanımlaması işlemi olarak tanımlanabilir. Bu makalede, overriding'in ne olduğunu, nasıl çalıştığını ve neden kullanıldığını ayrıntılı bir şekilde inceleyeceğiz.



Overriding Nedir?



Overriding, bir alt sınıfın, bir üst sınıfta tanımlanan bir metodu yeniden tanımlaması sürecidir. Üst sınıfta tanımlı olan metodun işleyişi, alt sınıfta farklı bir şekilde değiştirilir. Bu işlem, alt sınıfların üst sınıf metodlarını kendi ihtiyaçlarına göre özelleştirmesine olanak tanır.



Örneğin, bir "Hayvan" sınıfında "sesÇıkar()" adında bir metod tanımladığınızda, bu metod tüm hayvanların ortak özelliğini temsil eder. Ancak, "Köpek" ve "Kedi" gibi alt sınıflar, bu metodu kendi türlerine uygun olarak yeniden tanımlayabilirler. Köpeklerin "havlama" sesi çıkarması ve kedilerin "miyavlama" sesi çıkarması gerektiği durumlarda overriding kullanılır.



Overriding Nasıl Çalışır?



Overriding işlemi, genellikle metodların aynı isimle tanımlandığı durumlarda gerçekleşir. Ancak bu metodların imzaları (metod adı, parametre listesi ve dönüş tipi) aynı olmalıdır. Overriding süreci şu şekilde işler:



1. **Üst Sınıf Metodunun Tanımlanması**: İlk olarak, bir üst sınıf (superclass) oluşturulur ve bu sınıfta bir metod tanımlanır. Bu metod genel bir işlevi temsil eder ve çoğu durumda genel bir davranış sağlar.



2. **Alt Sınıfın Oluşturulması**: Üst sınıftan türetilmiş bir alt sınıf (subclass) oluşturulur. Alt sınıf, üst sınıftan miras alır ve üst sınıf metodunun işlevselliğini kendi gereksinimlerine göre özelleştirebilir.



3. **Metodun Yeniden Tanımlanması**: Alt sınıf içinde, üst sınıf metodunun aynı isimle ve aynı imzaya sahip olacak şekilde yeniden tanımlanır. Bu, metodun işlevselliğinin alt sınıfa özgü şekilde değiştirilmesini sağlar.



4. **Polimorfizm ve Dinamik Bağlama**: Overriding'in en önemli özelliklerinden biri, polimorfizmi desteklemesidir. Polimorfizm, aynı metodun farklı nesneler üzerinde farklı şekillerde çalışabilmesini sağlar. Bu özellik, dinamik bağlama (dynamic binding) ile mümkün olur, yani metod çağrısı çalışma zamanında (runtime) yapılır ve hangi metodun çağrılacağı belirlenir.



Overriding Neden Kullanılır?



Overriding'in kullanım sebepleri çok çeşitli olabilir. İşte bazı temel nedenler:



1. **Davranışın Özelleştirilmesi**: Overriding, alt sınıfların üst sınıflardan miras aldıkları metodları kendi ihtiyaçlarına göre özelleştirmesine olanak tanır. Bu, alt sınıfların belirli bir metodun davranışını değiştirmelerine ve bu metodun kendi özelliklerine uygun şekilde çalışmasını sağlar. Örneğin, bir “Şekil” sınıfında bir “alanHesapla()” metodu olabilir, ancak “Dikdörtgen” ve “Çember” sınıflarında bu metodun hesaplamaları farklı olacaktır.



2. **Polimorfizmin Desteklenmesi**: Overriding, polimorfizmin gerçekleştirilmesinde kritik bir rol oynar. Polimorfizm, aynı metodun farklı alt sınıflarda farklı şekillerde çalışmasını sağlar. Bu, programların daha esnek ve genişletilebilir olmasına yardımcı olur. Örneğin, bir “Hayvan” sınıfı içinde tanımlı olan “sesÇıkar()” metodu, farklı hayvan türlerinde farklı sesler çıkarmak için overriding ile özelleştirilebilir.



3. **Kodun Yeniden Kullanımı**: Overriding, kodun yeniden kullanılmasını teşvik eder. Üst sınıf, genel bir metodun temel işlevselliğini sağlar, ancak alt sınıflar bu metodun spesifik ihtiyaçlara göre özelleştirilmiş versiyonlarını sağlar. Bu, kodun tekrar yazılmasını önler ve bakımını kolaylaştırır.



4. **İşlevselliğin Genişletilmesi**: Üst sınıflardan türetilmiş alt sınıflarda, üst sınıfın metodlarını genişletmek mümkündür. Bu, üst sınıfın temel işlevselliğini korurken, alt sınıfların kendi ek işlevselliklerini eklemelerine olanak tanır. Örneğin, bir “Araç” sınıfında “hareketEt()” metodu olabilir, ancak bu metodun “Araba” ve “Motosiklet” gibi alt sınıflarda farklı hareket etme biçimleri olabilir.



5. **Kapsülleme ve Abstraction**: Overriding, kapsülleme ve abstraction (soyutlama) prensipleriyle de ilişkilidir. Üst sınıf, genel bir metodun soyut bir tanımını sağlar, alt sınıflar ise bu metodun somut implementasyonlarını sağlar. Bu, kullanıcıların sadece gerekli işlevselliği görmelerini ve karmaşıklığı gizlemelerini sağlar.



Örnekler ve Uygulamalar



Overriding’in anlaşılmasını kolaylaştırmak için bazı basit örnekler inceleyelim:



1. **Java’da Overriding Örneği**:

```java

class Hayvan {

void sesCikar() {

System.out.println("Hayvan ses çıkarıyor");

}

}



class Kopek extends Hayvan {

@Override

void sesCikar() {

System.out.println("Hav hav");

}

}



class Kedi extends Hayvan {

@Override

void sesCikar() {

System.out.println("Miyav miyav");

}

}



public class Main {

public static void main(String[] args) {

Hayvan myHayvan = new Kopek();

myHayvan.sesCikar(); // Çıktı: Hav hav



myHayvan = new Kedi();

myHayvan.sesCikar(); // Çıktı: Miyav miyav

}

}

```



Bu örnekte, `Hayvan` sınıfının `sesCikar()` metodu, `Kopek` ve `Kedi` alt sınıflarında yeniden tanımlanmıştır. `main` metodunda, dinamik bağlama sayesinde doğru metod çağrılır ve her bir alt sınıfın spesifik sesi çıkarılır.



2. **Python’da Overriding Örneği**:

```python

class Hayvan:

def ses_cikar(self):

print("Hayvan ses çıkarıyor")



class Kopek(Hayvan):

def ses_cikar(self):

print("Hav hav")



class Kedi(Hayvan):

def ses_cikar(self):

print("Miyav miyav")



def ana():

hayvan = Kopek()

hayvan.ses_cikar() # Çıktı: Hav hav



hayvan = Kedi()

hayvan.ses_cikar() # Çıktı: Miyav miyav



ana()

```



Python’daki örnek de benzer bir yapıyı takip eder. `Hayvan` sınıfında tanımlı `ses_cikar()` metodu, `Kopek` ve `Kedi` sınıflarında yeniden tanımlanmış ve doğru metod çağrısı yapılmıştır.



Sonuç



Overriding, nesne yönelimli programlamanın güçlü bir özelliğidir ve birçok avantaj sağlar. Davranışın özelleştirilmesi, polimorfizmin desteklenmesi, kodun yeniden kullanımı ve işlevselliğin genişletilmesi gibi nedenlerle önemli bir tekniktir. Bu teknik, yazılım geliştirme sürecinde esneklik ve genişletilebilirlik sağlayarak, daha düzenli ve sürdürülebilir kodların yazılmasına yardımcı olur. Overriding’i anlamak ve doğru şekilde kullanmak, etkili ve güçlü nesne yönelimli programlar oluşturmanın anahtarlarından biridir.
 

benzerkonular_benzer_konular

Üst