Saya pikir itu akan keren bahwa troll dan manusia serigala mewarisi atributnya dari musuh dan menimpa beberapa dari mereka.
Sayangnya pendekatan polimorfisme ini, populer pada tahun 90-an, telah menunjukkan dirinya sebagai ide yang buruk dalam praktik. Bayangkan Anda menambahkan 'serigala' ke daftar musuh - yah, ia berbagi beberapa atribut dengan manusia serigala, jadi Anda ingin mengkonsolidasikan mereka ke dalam kelas dasar bersama, misalnya. 'WolfLike'. Sekarang Anda menambahkan 'Manusia' ke daftar musuh, tetapi manusia serigala kadang-kadang manusia, sehingga mereka berbagi atribut juga, seperti berjalan dengan 2 kaki, bisa berbicara, dll. Apakah Anda membuat pangkalan umum 'Humanoid' untuk manusia dan manusia serigala , dan apakah Anda kemudian harus menghentikan manusia serigala yang berasal dari WolfLike? Atau apakah Anda berlipat ganda mewarisi dari keduanya - dalam hal ini, atribut mana yang didahulukan ketika sesuatu di Humanoid berselisih dengan sesuatu di WolfLike?
Masalahnya adalah bahwa mencoba dan memodelkan dunia nyata sebagai pohon kelas tidak efektif. Ambil 3 hal dan Anda mungkin dapat menemukan 4 cara berbeda untuk memfaktorkan perilaku mereka menjadi bersama dan tidak dibagi. Inilah sebabnya mengapa banyak yang beralih ke model berbasis modular atau komponen, di mana suatu objek terdiri dari beberapa objek yang lebih kecil yang membentuk keseluruhan, dan objek yang lebih kecil dapat ditukar atau diubah untuk membentuk perilaku yang Anda inginkan. Di sini Anda mungkin hanya memiliki 1 kelas Musuh, dan berisi sub-objek atau komponen untuk cara berjalannya (mis. Bipedal vs Quadrupedal), metode serangannya (misalnya, gigitan, cakar, senjata, kepalan tangan), kulitnya (hijau untuk troll, berbulu untuk manusia serigala dan serigala), dll.
Ini masih sepenuhnya berorientasi objek, tetapi gagasan tentang apa yang merupakan objek berguna berbeda dari apa yang biasanya diajarkan dalam buku teks. Daripada memiliki pohon warisan besar dari berbagai kelas abstrak dan beberapa kelas konkret di ujung pohon, Anda biasanya hanya memiliki 1 kelas beton yang mewakili konsep abstrak (mis. 'Musuh') tetapi yang berisi lebih banyak kelas konkret yang mewakili konsep yang lebih abstrak (mis. serangan, jenis kulit). Kadang-kadang kelas kedua ini dapat diimplementasikan dengan baik melalui 1 level warisan (mis. Kelas serangan dasar dan beberapa kelas turunan untuk serangan tertentu) tetapi pohon warisan yang dalam hilang.
Tapi mungkin kelas terlalu berat untuk praktis, saya tidak tahu ...
Di sebagian besar bahasa modern, kelas tidak 'berat'. Mereka hanyalah cara lain untuk menulis kode, dan mereka biasanya hanya membungkus pendekatan prosedural yang akan Anda tulis, kecuali dengan sintaks yang lebih mudah. Tetapi dengan segala cara, jangan menulis kelas di mana fungsi akan dilakukan. Kelas pada hakekatnya tidak lebih baik, hanya di mana mereka membuat kode lebih mudah untuk dikelola atau dimengerti.