Thread overview
composition vs inheritance
Jun 21, 2018
hsencan
Jun 21, 2018
fatih (fatih)
Jun 22, 2018
kerdemdemir
Jun 22, 2018
hsencan
June 21, 2018

Merhabalar,

Şu günlerde internette bu konu hakkında bir kaç yazı okudum. Yazılarda sahiplik ilişkisinin kalıtımdan daha
iyi olacağı yazıyordu. Örneğin bir taban sınıftan kalıtım almak yerine o sınıf türünden parametre alan global fonksiyon oluşturup kullanmak veya yeni sınıf oluşturarak sahiplik ilişkisi kullanmanın daha mantıklı ve sağlıklı olacağı yazıyordu. Açıkçası ben daha önce hep bir temel sınıf oluşturup kalıtım yoluyla ilerleyerek kodlarımı yazdım. Bu konuda sizlerin görüşleri de merak ettim. (Yazılar C++ ile ilgiliydi. Belki D gibi daha gelişmiş dillerde daha farklıdır durum bilemiyorum.)

Umarım soru yeterince açıklayıcı olmuştur Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 22, 2018

Cok fazla inheritance based programlama yapmiyorum o yuzden yuzeysel olarak kendi kullandigim bir ayrim var ondan bahsedeyim:

Olay temelde has-a ile is-a iliskisi arasindaki farki gorebilmek. Ornegin, bir araba sinifi yazdigimizi dusunelim. Arabamizin bir motoru var, ve kendisi bir arac. Bu noktada arabamizla motor arasinda bir has-a iliskisi var. Fakat arabamiz bir arac, yani arabamizin bir araci yok direk bir arac.

Bunu koda su sekilde dokuyoruz:

class car : public vehicle
{
 engine m_eng;
};

Eger bu iliskiyi yanlis kurarsak, asagidaki gibi garip kodlar yazabiliyoruz:

class car : public vehicle, public engine
{
};

Alakali olarak su prensip epey saygi goruyor bildigim kadariyla: https://en.wikipedia.org/wiki/Liskov_substitution_principle


Tabi bunlar standart object oriented seyler yazmak icin faydali. Empty base class optimization yada private inheritence gibi, kalitim kullanarak optimizasyon vs yapilabilen durumlar var ama biraz ileri seviye seyler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 22, 2018

Bende Fatihin araba örneğini bu konuyu anlamaya çalışırken çok kullanıyorum.

Eğer "composition" kullanarak sorununu çözebiliyorsan genelde tercih etmeni tavsiye ederim. Örneğin Fatih'inde dediği gibi tekerlek - araba ilişkisi. Tekerlek arabanın bir parçası.

Ama eğer araba örneğini ele alacaksak ve senin kartal, şahin, doğan gibi değişik araba sınıfların olacaksadoğal olarak "inheritance" kullanılmalı. Çünkü bunlar araba çeşitleri.

Bunun yanı sıra "Design Pattern" ' lerini bilmek "inheritance" 'ın doğru kullanım alanlarını anlamamızda faydalı olabilir. En azından kendime faydası olduğunu düşünüyorum. Ve bu patternlerin en azından bir kısmını bilmek aynı projede çalışan birisine ne yapmak istediğini ve yaptığını anlatırkende çok faydalı oluyor.

Ben şu kitabın çok faydasını gördüm iş hayatımda "head first design patterns". Sanıyorsam iş hayatımda bana en faydalı kitaplardan biri buydu. Bana şu anda yaptığım işte toplantılarda birisi birşey anlatırken işte bu sınıf bir "decorator" bu sınıf bir "observer" bu sınıf "composer" diye anlattığı çok oluyor. Veya aynı şekilde bende derdimi bu şekilde anlattığımda insanlar beni daha çabuk anlıyor. Umarım seninde ilgini çeker.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 22, 2018

Cevaplarınız için Teşekkürler.

Alıntı (kerdemdemir):

>

Ben şu kitabın çok faydasını gördüm iş hayatımda "head first design patterns". Sanıyorsam iş hayatımda bana en faydalı kitaplardan biri buydu. Bana şu anda yaptığım işte toplantılarda birisi birşey anlatırken işte bu sınıf bir "decorator" bu sınıf bir "observer" bu sınıf "composer" diye anlattığı çok oluyor. Veya aynı şekilde bende derdimi bu şekilde anlattığımda insanlar beni daha çabuk anlıyor. Umarım seninde ilgini çeker.

Kendimi OOP konusunda çok zayıf birisi olarak görüyorum. Bu konuda kitap önerisi çok iyi oldu. Mutlaka okuyacağım. Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 22, 2018

Aynı konu üzerine bir kaç Türkçe söz:

http://ddili.org/ders/d/tureme.html#ix_tureme.o-t%C3%BCrdendir%20ili%C5%9Fkisi

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]