Saya mencoba untuk merasakan bagaimana merancang dan berpikir dengan cara Berorientasi Objek dan ingin mendapatkan umpan balik dari komunitas tentang topik ini. Berikut contoh game catur yang ingin saya desain secara OO. Ini adalah desain yang sangat luas dan fokus saya pada tahap ini hanya untuk mengidentifikasi siapa yang bertanggung jawab atas pesan apa dan bagaimana objek berinteraksi satu sama lain untuk mensimulasikan permainan. Harap tunjukkan jika ada elemen dengan desain yang buruk (kopling tinggi, kohesi buruk, dll.) Dan cara memperbaikinya.
Permainan Catur memiliki kelas-kelas berikut
- Naik
- Pemain
- Bagian
- Kotak
- Permainan catur
Papan terdiri dari bujur sangkar sehingga Papan dapat diberi tanggung jawab untuk membuat dan mengelola objek Persegi. Tiap bidak juga ada di bujur sangkar sehingga setiap bidak juga memiliki referensi ke bujur sangkar tempatnya berada. (Apakah ini masuk akal?). Masing-masing bagian kemudian bertanggung jawab untuk berpindah dari satu kotak ke kotak lainnya. Kelas pemain memegang referensi ke semua bidak yang dimilikinya dan juga bertanggung jawab atas pembuatannya (Haruskah pemain membuat Bidak?). Pemain memiliki metode takeTurn yang pada gilirannya memanggil metode movePiece yang termasuk dalam Kelas bidak yang mengubah lokasi bidak dari lokasi saat ini ke lokasi lain. Sekarang saya bingung tentang apa sebenarnya kelas Dewan harus bertanggung jawab. Saya berasumsi bahwa hal itu diperlukan untuk menentukan status game saat ini dan mengetahui kapan game tersebut selesai. Tapi ketika sepotong mengubahnya ' Lokasi bagaimana seharusnya papan diperbarui? haruskah itu mempertahankan array terpisah dari kotak di mana potongan ada dan yang mendapat pembaruan saat potongan bergerak?
Selain itu, ChessGame pada awalnya membuat objek Papan dan pemain yang pada gilirannya membuat kotak dan bidak masing-masing dan memulai simulasi. Singkatnya, mungkin seperti inilah tampilan kode di ChessGame
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
Saya tidak jelas tentang bagaimana status papan akan diperbarui. Haruskah sepotong memiliki referensi ke papan? Dimana seharusnya tanggung jawab itu berada? Siapa yang memegang referensi apa? Tolong bantu saya dengan masukan Anda dan tunjukkan masalah dalam desain ini. Saya sengaja tidak fokus pada algoritme apa pun atau detail lebih lanjut dari permainan game karena saya hanya tertarik pada aspek desain. Semoga komunitas ini bisa memberikan wawasan yang berharga.
takeTurn()
jika langkah p1 mengakhiri permainan. Kurang komentar rewel: Saya merasa lebih alami untuk memanggil para pemainwhite
danblack
.