OOP'de neden composition over inheritance prensibini beninseriz?



Nesne yönelimli programlamada (OOP), "composition over inheritance" (kalıtım yerine bileşimi tercih etme) prensibi, genellikle çeşitli nedenlerle tercih edilir. Bu prensibin temel avantajları şunlardır:


Esneklik: Bileşim, kodu daha esnek hale getirir. Bir sınıfın davranışını, ona yeni bir sınıf ekleyerek değiştirebilirsiniz. Bu, kalıtım kullanılarak yapılan değişikliklere göre genellikle daha az kısıtlayıcı ve daha modülerdir.


Yeniden Kullanılabilirlik: Bileşim, kod parçalarının daha kolay yeniden kullanılmasını sağlar. Bir sınıf içinde kullanılan nesneler, başka sınıflarla kolayca paylaşılabilir ve yeniden kullanılabilir.


Sıkı Bağlantıyı Azaltma: Kalıtım, sınıflar arasında sıkı bir bağlantı oluşturur ve bu, değişikliklerin yapılmasını zorlaştırabilir. Bileşim, daha gevşek bir bağlantı sağlayarak, sınıfların birbirlerine olan bağımlılığını azaltır.


Karmaşıklığın Azaltılması: Kalıtım, özellikle çoklu kalıtım durumlarında, kodun anlaşılmasını ve bakımını zorlaştırabilir. Bileşim, bu karmaşıklığı azaltmaya yardımcı olur ve kodun daha okunabilir ve yönetilebilir olmasını sağlar.


Elmas Problemi: Çoklu kalıtım kullanıldığında, "elmas problemi" gibi bazı karmaşık durumlar ortaya çıkabilir. Bileşim, bu tür sorunları önlemeye yardımcı olur.


Soyutlama Seviyesi: Bileşim, daha yüksek bir soyutlama seviyesi sağlar. Böylece, sistemdeki nesneler arasındaki ilişkiler daha net ve esnek bir şekilde ifade edilebilir.


Bu prensibin uygulanması, kodun daha modüler, bakımı daha kolay ve genişletilebilir olmasını sağlar. Bununla birlikte, her durum için en uygun yaklaşımı belirlemek, geliştiricinin ihtiyaçlarına ve proje özelliklerine bağlıdır. Kalıtımın da kendi avantajları vardır ve bazı durumlarda daha uygun olabilir.



 bir örnek verelim. Bu sefer, bir araç kontrol sistemi üzerinden gidelim. Bu sistemde, bir aracın bazı temel özellikleri ve işlevleri olacak ve bu işlevler farklı bileşenler tarafından sağlanacak.


Kalıtım (Inheritance) Örneği

Kalıtımda, Araç sınıfı bazı temel işlevleri tanımlayacak ve Araba sınıfı bu işlevleri genişletecek.


java

Copy code

class Arac {

    public void hareketEt() {

        System.out.println("Araç hareket ediyor.");

    }


    public void dur() {

        System.out.println("Araç duruyor.");

    }

}


class Araba extends Arac {

    public void kornaCal() {

        System.out.println("Beep! Beep!");

    }

}


public class Main {

    public static void main(String[] args) {

        Araba araba = new Araba();

        araba.hareketEt();

        araba.dur();

        araba.kornaCal();

    }

}

Bileşim (Composition) Örneği

Bileşimde, Araba sınıfı, Motor ve Fren gibi farklı bileşenleri içerecek ve bu bileşenlerin işlevselliğini kullanacak.


java

Copy code

class Motor {

    public void hareketEt() {

        System.out.println("Motor çalışıyor, araç hareket ediyor.");

    }

}


class Fren {

    public void dur() {

        System.out.println("Frenler çalışıyor, araç duruyor.");

    }

}


class Araba {

    private Motor motor;

    private Fren fren;


    public Araba() {

        motor = new Motor();

        fren = new Fren();

    }


    public void hareketEt() {

        motor.hareketEt();

    }


    public void dur() {

        fren.dur();

    }


    public void kornaCal() {

        System.out.println("Beep! Beep!");

    }

}


public class Main {

    public static void main(String[] args) {

        Araba araba = new Araba();

        araba.hareketEt();

        araba.dur();

        araba.kornaCal();

    }

}

Bu örnekte, Araba sınıfı, Motor ve Fren sınıflarını kullanarak hareket etme ve durma işlevlerini gerçekleştirir. Bu yaklaşım, Araba sınıfının sadece ihtiyaç duyduğu işlevleri içermesini sağlar ve ileride bu bileşenlerin başka araç türleri için de kullanılmasını kolaylaştırır. Ayrıca, bu yaklaşım Araba sınıfının, araç bileşenlerinde yapılacak değişikliklerden daha az etkilenmesini sağlar, çünkü bu bileşenler birbirinden bağımsız olarak geliştirilebilir ve güncellenebilir.

Hiç yorum yok

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo