Bagaimana cara menerapkan Desain Berorientasi Data dengan Pemrograman Berorientasi Objek? [Tutup]

17

Saya telah membaca banyak artikel tentang Desain Berorientasi Data (DOD) dan saya memahaminya tetapi saya tidak dapat merancang sistem Pemrograman Berorientasi Objek (OOP) dengan mengingat DOD, saya pikir pendidikan OOP saya menghalangi saya. Bagaimana saya harus berpikir untuk mencampur keduanya? Tujuannya adalah untuk memiliki antarmuka OOP yang bagus saat menggunakan DOD di belakang layar.

Saya melihat ini juga tetapi tidak banyak membantu: /programming/3872354/how-to-apply-dop-and-keep-a-nice-user-interface

Pombal
sumber
3
Anda perlu posting sesuatu yang jauh lebih spesifik (dan game-terkait), pertanyaan ini jauh terlalu umum.
DeadMG
Anda benar, tapi saya belum melihat ini sedang dibahas di bidang lain selain pemrograman game.
Pombal
4
@DeadMG: Saya belum pernah melihat istilah desain berorientasi data yang digunakan di luar pengembangan game, kecuali ketika merujuk pada praktik yang berasal dari pengembangan game. Jika Anda memikirkan desain berbasis data, itu bukan hal yang sama.

Jawaban:

16

Saya akan mengatakan bahwa blog Noel Llopis mungkin adalah instruksi terbaik untuk kombinasi pemrograman berorientasi objek dan desain berorientasi data. Dia adalah salah satu penggagas istilah DOD, adalah seorang programmer C ++ yang kuat, dan telah menulis banyak tentang gayanya dan bagaimana dia mengambil keuntungan dari fitur O ++ C ++.

Saya kira jika saya memanggil elemen kunci untuk menggabungkannya, menurut Noel:

  • Gunakan POD dan fungsi non-anggota, non-teman sebanyak mungkin. Non-anggota, fungsi non-teman meningkatkan enkapsulasi dan merupakan bagian kunci dari orientasi data karena mereka menyimpan data, data.
  • Hindari menyimpan status "sementara" pada objek Anda. Keadaan sementara menyumbat data Anda. Jika Anda perlu men-cache sesuatu (misalnya untuk kinerja) maka itu termasuk dalam kelas baru, dengan fungsi non-anggota non-teman yang menghubungkan kedua jenis, bukan hubungan is-a atau has-a.
  • Hindari objek yang bisa dalam keadaan A atau keadaan B. Lebih suka beralih di antara dua objek, salah satunya adalah A, dan salah satunya adalah B.
  • Hindari polimorfisme, hindari fungsi virtual, hindari templat, hindari apa pun yang membuat data Anda memiliki tampilan sintaksis yang sama dari pada kesamaan yang sebenarnya .

Nama besar lainnya dalam propaganda DOD sekarang adalah Mike Acton dari Insomniac, tetapi membaca apa yang ditulisnya, saya katakan dia tidak benar-benar pro-OO (atau anti-OO, asalkan masih berorientasi data).


sumber
Terima kasih atas jawabannya tetapi apa yang Anda katakan adalah apa yang harus saya lakukan untuk menggunakan DOD, bukan bagaimana saya bisa menggunakan OO dengannya. Saya sudah membaca blog Noel, kata-kata kasar Mike Acton (: D), publikasi DICE antara lain dan saya mengerti cara menggunakan DOD, hanya saja tidak dengan OO campur.
Pombal
2
Menurutmu apa itu OO? Saya akan memanggil sebagian besar kode Noel OO, misalnya - masih ada kelas dan contoh, masih ada pengiriman berbasis tipe, mungkin masih ada warisan (definisi C ++ 0x tentang POD telah diubah untuk memungkinkan ini). Satu masih memodelkan masalah dimulai dengan data, bukan operasi.
Misalnya polimorfisme adalah bagian penting dari OOP, seperti halnya keadaan objek. Desain yang berorientasi data harus untuk memberikan properti entitas game seperti dapat bernyawa, dapat berinteraksi, dapat bergerak, ... menggunakan warisan. Itu semua tergantung pada manajer data pintar yang hanya menyediakan entitas yang diperlukan untuk setiap komponen, misalnya untuk fisika atau animasi.
danijar
@sharethis: Jika saya memahami keberatan Anda, polimorfisme subtipe adalah fitur utama dari OO. Saya setuju bahasa yang mengaku sebagai OO tanpa dukungan untuk itu akan aneh, tapi itu tidak berarti itu alat pertama untuk jenis masalah yang dihadapi permainan pemrograman, bahkan ketika permainan diprogram dalam gaya OO . Saya juga berpendapat bahwa DOD benar-benar tentang menghindari jenis polimorfisme tertentu (subtyping nominal) tetapi mendorong orang lain (dalam C ++, polimorfisme ad hoc dengan ADL, atau polimorfisme struktural melalui jaminan tentang representasi nilai).