Hem trolün hem de kurtadamın niteliklerini düşmandan miras almasının ve bazılarının üzerine yazmasının harika olacağını düşünüyorum.
Ne yazık ki 90'larda popüler olan polimorfizme bu yaklaşım, pratikte kötü bir fikir olduğunu göstermiştir. Düşman listesine 'kurt' eklediğinizi düşünün - iyi, kurtadamla bazı özellikleri paylaşıyor, bu yüzden bunları paylaşılan bir temel sınıfta birleştirmek istiyorsunuz, örn. 'Wolflike'. Artık düşman listesine 'İnsan' ekliyorsunuz, ama kurtadamlar bazen insanlardır, bu yüzden 2 ayak üzerinde yürümek, konuşabilmek, vb. Gibi özellikleri de paylaşırlar. İnsanlar ve kurtadamlar için 'İnsansı' ortak bir üs oluşturuyor musunuz? ve sonra kurt kurtlarını WolfLike'tan türeyen durdurmanız mı gerekiyor? Yoksa ikisinden de miras alırsınız - bu durumda, Humanoid'deki bir şey WolfLike'daki bir şeyle çakıştığında hangi özellik öncelik kazanır?
Sorun şu ki, gerçek dünyayı bir sınıf ağacı olarak denemek ve modellemek etkisizdir. Herhangi bir 3 şey alın ve muhtemelen davranışlarını paylaşılan ve paylaşılmayan olarak değerlendirmek için 4 farklı yol bulabilirsiniz. Bu nedenle, birçoğu, bir nesnenin bütünü oluşturan birkaç küçük nesneden oluştuğu ve daha küçük nesnelerin, istediğiniz davranışı oluşturmak için değiştirilebileceği veya değiştirilebileceği modüler veya bileşen tabanlı bir modele dönüşmüştür. Burada sadece 1 Düşman sınıfınız olabilir ve nasıl yürüdüğüne dair alt nesneler veya bileşenler (örn. Bipedal vs. Quadrupedal), saldırı yöntemleri (örn. Isırık, pençe, silah, yumruk), cildi (yeşil) troller için, kurtadamlar ve kurtlar için tüylü) vb.
Bu hala tamamen nesne yönelimlidir, ancak yararlı bir nesnenin ne olduğu kavramı, eskiden ders kitaplarında yaygın olarak öğretilenlerden farklıdır. Ağacın uçlarında çeşitli soyut sınıflardan ve birkaç somut sınıftan oluşan büyük bir miras ağacına sahip olmak yerine, genellikle soyut bir kavramı temsil eden (örneğin 'düşman') ancak daha soyut kavramları temsil eden daha somut sınıflar içeren sadece 1 beton sınıfınız vardır. (örn. ataklar, cilt tipi). Bazen bu ikinci sınıflar en iyi 1 miras düzeyi (örneğin, bir temel Saldırı sınıfı ve belirli saldırılar için türetilmiş birkaç sınıf) aracılığıyla uygulanabilir, ancak derin miras ağacı kaybolur.
Ama belki dersler pratik olamayacak kadar ağır, bilmiyorum ...
Çoğu modern dilde, sınıflar 'ağır' değildir. Kod yazmanın başka bir yoludur ve genellikle daha kolay sözdizimi dışında, yazdığınız prosedürel yaklaşımı sararlar. Ama elbette, bir işlevin yapacağı bir sınıf yazmayın. Sınıflar kendiliğinden daha iyi değildir, sadece kodun yönetilmesini veya anlaşılmasını kolaylaştırdığı yerlerde.