Jawaban Josh luar biasa, tetapi saya ingin menambahkan:
Salah satu fitur paling keren dari Entity / Component adalah cara yang didorong oleh data di mana setiap "hal" dalam gim Anda dibuat dan dikelola. Dari apa yang saya lihat, setelah Anda memiliki perpustakaan yang bagus untuk jenis komponen dan sistem yang dibuat, Anda dapat membangun apa saja dengan modifikasi kode minimal. (Catatan: minimal! = 0 )
Dengan mendefinisikan game Anda dari segi perilaku, dan memberi diri Anda kemampuan untuk memodifikasi perilaku tersebut dengan cepat - saat runtime, selama inisialisasi dengan memuatnya dari skrip atau database, dll. - Anda membuka seluruh dunia kemungkinan baru. Ingin melihat mengapa bayangan Anda tidak mendarat di tempat yang Anda harapkan? Tambahkan komponen kamera / POV ke cahaya Anda.
Entitas / komponen memungkinkan Anda membangun apa pun yang Anda inginkan, selama Anda telah membuat blok.
Juga, pewarisan berganda menyebabkan masalah yang sama dengan pewarisan tunggal. Saat Anda menambahkan atribut atau perilaku dalam hierarki, itu menyebar. Selama Anda membuat hierarki yang mendalam, Anda akan menghadapi situasi di mana Anda membawa beban yang tidak perlu, kode duplikat, atau menyelesaikan konflik. Sebagian besar itu bisa dihindari ketika Anda membayangkan game Anda sebagai data.
Saya baru saja mulai bermain dengan ini dalam beberapa minggu terakhir, tetapi saya terkesan dengan betapa hal-hal sederhana telah terjadi. Ini bukan peluru perak - saya telah menemukan beberapa kasus di mana menempelkan lambda ke komponen adalah cara paling bersih dan paling bijaksana untuk menyelesaikan masalah - tetapi ini adalah pola yang cukup hebat, jika Anda bisa menyebutnya begitu.
Pada catatan yang sedikit terkait: salah satu generator pemeliharaan yang besar dan membosankan dalam aplikasi data-sentris (situs web, dll.) Adalah memetakan objek hierarkis ke dalam basis data relasional. Kami memiliki banyak solusi bagus, tetapi pada akhirnya semua peretasan dirancang untuk meratakan hierarki. Alih-alih membangun model Anda sehingga melayani tujuan aplikasi, Anda akhirnya berkompromi antara hierarki yang efektif dan representasi relasional yang logis. Saya telah mempermainkan ide membangun kembali hierarki yang cukup besar di salah satu aplikasi saya sebagai sistem entitas / komponen - membuang hierarki dan menjadikan basis data sebagai Standar Emas untuk sisa implementasi - dan ini menjanjikan.
Ketika Anda mengintegrasikan kemampuan seperti pembuatan kode / caching kode dinamis yang dapat mengatasi masalah kinerja, Anda akhirnya dengan arsitektur yang cepat, fleksibel, dan logis yang mungkin saja mewujudkan tujuan kode OOP yang dapat digunakan kembali dengan cara yang jauh lebih baik.