Programlamada, yeniden kullanılabilir kod, yeniden kullanılabilirlik ilkelerini kullanarak yeni bir yazılım oluşturmak için mevcut yazılımın kullanılmasıdır. Kod yeniden kullanılabilirliği, bilgi teknolojisi yoğun işletmelerde temel üretken bir işlevsellik olarak kabul edilir. Sınıflar arasında ilişkiler kurarak nesne yönelimli sistemlerde desteklenir. Nesneye yönelik programlamada bu ilişkileri kurmanın iki temel yolu vardır: Kalıtım ve Kompozisyon. Kalıtım uygulamak sınıfları ilişkilendirmenin bir yoludur, ancak OOP kompozisyon adı verilen sınıflar arasında yeni bir tür ilişki sağlar. Yeni ve var olan sınıflar arasında bir ilişki kurarak, yeni bir sınıf kodu bir veya daha fazla var olan sınıftan devralabilir veya gömebilir.
OOP'de kalıtım, bir nesnenin bir veya daha fazla başka nesnenin özelliklerini elde ettiği metodolojidir. OOP'de kod yeniden kullanılabilirliğinin uygulanmasında en güçlü araçlardan biridir. Kalıtım kullanılırken, varolan sınıflarla ebeveyn-çocuk ilişkileri kurularak yeni bir sınıf oluşturulabilir. Nesne kompozisyonu, sınıf mirasına bir alternatiftir. Başka bir nesnenin içinde bir nesnenin kullanılması kompozisyon olarak bilinir. Birçok durumda, bir nesneyi başka bir sınıf içinde alan olarak kullanmak istersiniz, çünkü önceden yazılmış, iyi tasarlanmış sınıfları bileşen olarak kullanarak karmaşık sınıflar oluşturmak kolaydır. Buna kompozisyon denir. Hem kalıtım hem de kompozisyon birçok durumda eşdeğer işlevsellik sağlar, nesne kompozisyonu sınıf mirasından daha iyi bir yeniden kullanım modelidir. Bu makale iki yaklaşımı karşılaştırmaktadır.
Kalıtım, nesne yönelimli programlamada kod yeniden kullanılabilirliğinin uygulanmasında en güçlü araçlardan biridir. Bir nesnenin, bir veya daha fazla diğer nesnenin özelliklerini edinme işlevselliğini ifade eder. C ++ 'da devralma, özniteliklerini mevcut sınıflardan türeyen sınıflar oluşturabileceğiniz anlamına gelir. Bu, sınıflar arasında temel ve türetilmiş sınıflar arasında güçlü bir bağlantıyla sonuçlanan bir is-a ilişkisi oluşturmak için bir sınıfı uzmanlaştıracağınız anlamına gelir. Var olan sınıflardan yeni sınıflar oluşturulduğu için mirasın uygulanması kodun yeniden kullanılabilirliğini artırır. Sınıf mirası ayrıca yeniden kullanılan uygulamayı değiştirmeyi kolaylaştırır. Ancak sınıf mirasının da bazı dezavantajları vardır. İlk olarak, kalıtım derleme zamanında tanımlandığından, çalışma zamanında üst sınıflardan devralınan uygulamaları değiştiremezsiniz.
OOP, kompozisyon olarak adlandırılan sınıflar arasında, bir ilişki olarak da bilinen başka bir ilişki sağlar. Bir nesnenin özelliklerinin başka bir nesnenin parçası olması gerekiyorsa, ilişki kompozisyonu gerektirir. Mevcut sınıflardan bir sınıf oluşturmak için, her sınıfın bir nesnesi yeni sınıfın üyesi olarak bildirilmelidir. Basit bir deyişle, başka bir nesnenin içindeki bir nesnenin kullanılması kompozisyon olarak bilinir. Çoğu zaman, bir nesneyi başka bir sınıf içinde alan olarak kullanmak isteyebilirsiniz. Kompozisyon içinde bir sınıfın içindeki bir nesneyi kullanırsınız. Sınıf mirasından farklı olarak, nesne kompozisyonu çalışma zamanında diğer nesnelere referans alan nesneler aracılığıyla dinamik olarak tanımlanır. Ayrıca, kompozisyon, nesnenin iç ayrıntılarından ödün vermeden, yani kompozisyonun yararlı olduğu bir nesneyi kullanmak için daha iyi bir yol sağlar.
Hem kalıtım hem de kompozisyon, sınıflar arasında ilişkiler kurarak nesne yönelimli sistemde kod yeniden kullanılabilirliğini teşvik ederken ve birçok yönden eşdeğer işlevsellik sağlarken, farklı yaklaşımlar kullanırlar. Kalıtım ile, sınıf oluşturmak için niteliklerini türeten sınıflar oluşturabilirsiniz, böylece bir sınıf oluşturmak için kalıtım kullanılırken mevcut bir sınıfı genişletebilirsiniz. Aksine, başka bir nesnenin içindeki bir nesnenin kullanılması kompozisyon olarak bilinir. Nesne kompozisyonu, sınıf mirasına bir alternatiftir. Bir nesnenin özelliklerinin başka bir nesnenin parçası olması gerekiyorsa, ilişki kompozisyonu gerektirir.
Kalıtımda, sınıflar arasında temel ve türetilmiş sınıflar arasında güçlü bir bağlantıyla sonuçlanan bir “is-a” ilişkisi oluşturmak için bir sınıfı uzmanlaştıracaksınız. Bir sınıflar hiyerarşisinin tasarlanmasını sağlar ve hiyerarşi en genel sınıfla başlar ve daha spesifik sınıflara geçer. Kalıtım uygulayarak, bir sınıftan üye işlevler, sınıf içinde açıkça kodlanmadan başka bir sınıfın özellikleri haline gelir. Kompozisyonda, sınıfın içindeki bir nesneyi kullanırsınız ve nesneye yapılan istekler nesneye yönlendirilir. İç detaylar kompozisyonda birbirlerine maruz kalmazlar, bu yüzden bir “has-a” ilişkisidir.
Sınıf mirası derleme zamanında tanımlandığından, çalışma zamanında üst sınıflardan devralınan uygulamaları değiştiremezsiniz. Miras, bir alt sınıfı ebeveyninin uygulamasının ayrıntılarına maruz bıraktığından, genellikle kapsüllemeyi keser. Üst sınıftaki tüm değişiklikler, bir alt sınıfı yeniden kullanmaya çalıştığınızda sorun yaratabilecek olan alt sınıfa yansır. Aksine, nesne kompozisyonu çalışma zamanında diğer nesnelere referans alan nesneler aracılığıyla dinamik olarak tanımlanır. Ve nesnelere yalnızca arabirimleri üzerinden erişildiği için, kapsüllemeyi bozmaz. Herhangi bir nesne, çalışma zamanında aynı türe sahip olduğu sürece başka bir nesne ile değiştirilebilir.
Birçok durumda, bir nesneyi başka bir sınıf içinde alan olarak kullanmak istersiniz çünkü karmaşık sınıfların önceden yazılmış, iyi tasarlanmış sınıfları kullanarak oluşturulması daha kolaydır. Burada kompozisyon kullanıyorsunuz. Kalıtım, bir sınıfı en az çabayla genişleterek kodu yeniden kullanmanın bir yolunu sunar, bu nedenle kalıtım, sınıflar arasında ilişkiler kurulmasında değerli bir araçtır. Genel olarak, bileşimin yararlı olduğu nesnenin iç detaylarından ödün vermeden bir nesneyi kullanmanın bir yolunu sağladığı için bileşimin kullanılması tercih edilir. Kalıtım sorunsuz değildir, ancak kalıtım gibi, nesne kompozisyonu da nesne oluşturma ve imha etme konusunda benzer performans endişeleri doğurur..