Saya akui, saya telah berbuat dosa karena terlalu banyak menggunakan, dan bahkan menyalahgunakan warisan. Proyek game (teks) pertama yang saya buat ketika saya mengambil kursus OOP saya berjalan sejauh "Locked door" dan "unlocked door" dari "Door" dan "Room with one door", "Room with two door", dan seterusnya dari "Kamar".
Dengan game (grafis) yang saya garap baru-baru ini, saya pikir saya telah mempelajari pelajaran saya dan membatasi penggunaan warisan. Namun saya perhatikan masalah segera mulai muncul. Kelas root saya mulai membengkak semakin banyak, dan kelas daun saya penuh dengan kode duplikat.
Saya pikir saya masih melakukan hal-hal yang salah, dan setelah mencari secara online saya menemukan bahwa saya bukan satu-satunya yang memiliki masalah ini. Begitulah akhirnya saya menemukan sistem Entity setelah beberapa penelitian menyeluruh (baca: googlefu)
Ketika saya mulai membacanya, saya bisa melihat betapa jelasnya ia bisa menyelesaikan masalah yang saya alami dengan hierarki OOP tradisional dengan komponen. Namun ini ada dalam bacaan pertama. Ketika saya menemukan lebih banyak ... pendekatan "radikal" ES, seperti yang ada di T-machine .
Saya mulai tidak setuju dengan metode yang mereka gunakan. Sistem komponen murni tampak berlebihan, atau lebih tepatnya, tidak intuitif, yang mungkin merupakan kekuatan OOP. Penulis melangkah lebih jauh dengan mengatakan bahwa sistem ES adalah kebalikan dari OOP, dan sementara itu dapat digunakan di sepanjang OOP, itu sebenarnya tidak seharusnya. Saya tidak mengatakan itu salah, tapi saya tidak merasa seperti solusi yang ingin saya terapkan.
Jadi bagi saya, dan untuk menyelesaikan masalah yang saya alami di awal posting, tanpa bertentangan dengan intuisi saya, adalah masih menggunakan hierarki, namun itu tidak akan menjadi hierarki monolitik seperti yang saya gunakan sebelumnya, melainkan sebuah polylithic (saya tidak dapat menemukan kata yang berlawanan dengan monolitik), yang terdiri dari beberapa pohon yang lebih kecil.
Contoh berikut menunjukkan apa yang saya maksud (ini terinspirasi oleh contoh yang saya temukan di Arsitektur Mesin Game, Bab 14).
Saya akan memiliki pohon kecil untuk kendaraan. Kelas root kendaraan akan memiliki komponen rendering, komponen tabrakan, komponen posisi dll.
Kemudian sebuah tangki, subkelas kendaraan akan mewarisi komponen-komponen itu darinya, dan diberi komponen "meriam" itu sendiri.
Hal yang sama berlaku untuk Karakter. Karakter akan memiliki komponennya sendiri, maka Kelas Pemain akan mewarisinya, dan diberi pengontrol Input, sedangkan kelas musuh lainnya akan mewarisi dari kelas Karakter dan diberi pengontrol AI.
Saya tidak benar-benar melihat masalah dengan desain ini. Meskipun tidak menggunakan Sistem Pengendali Entitas murni, masalah dengan efek menggelegak, dan kelas akar besar diselesaikan dengan menggunakan hierarki multi-pohon, dan masalah berat, daun duplikasi kode hilang karena daun tidak memiliki kode untuk memulai, hanya komponen. Jika perubahan perlu dilakukan ke level daun, maka itu semudah mengubah satu komponen, daripada menyalin paste kode di mana-mana.
Tentu saja, karena tidak berpengalaman seperti saya, saya tidak melihat masalah ketika saya mulai menggunakan hirarki tunggal, model berat warisan, jadi jika ada masalah dengan model yang saat ini saya pikirkan untuk diterapkan, saya tidak akan dapat melihatnya.
Pendapat Anda?
PS: Saya menggunakan Java, jadi menggunakan multiple inheritance untuk mengimplementasikan ini daripada menggunakan komponen normal tidak mungkin.
PPS: Komunikasi antar komponen akan dilakukan dengan menghubungkan komponen-komponen yang saling bergantung satu sama lain. Ini akan mengarah pada penggandengan, tapi saya pikir ini merupakan trade off yang baik.