Projektuję grę w szachy w Javie (bez sztucznej inteligencji, tylko kontrolowana przez użytkownika) i wciąż przyzwyczajam się do OOP. Mam dwa pytania.Projektowanie obiektów do gry w szachy w java
Myślałam o konieczności, oprócz Game
, Cell
, Piece
i Board
obiektów, a Player
obiektu.
Moje pytanie brzmi: czy naprawdę muszę? Oczywiście nie muszę, ale czy jest to opcja uważana za lepszą konstrukcję? Z jednej strony wydaje się, że gracz jest przydatny do przechowywania informacji o graczach i powinien zawierać takie metody, jak takeTurn()
. (Dla mojej implementacji chcę również śledzić wszystkie możliwe ruchy, więc będę miał metodę getAllMoves()
). Z drugiej strony, czy nie jest to po prostu reorganizacja istniejących danych? Każdy element ma już wskazanie, do którego gracza należy. A ponieważ moja gra nie zawiera sztucznej inteligencji, może mieć sens, by takeTurn()
należało do Game
, a nie do Player
. Z pierwszej strony ponownie może Player
może mieć tylko metodę getAllMoves()
, która używa swoich danych, ale nie podejmuje działania.
Drugie pytanie, istotne, jeśli odpowiedź na pierwsze pytanie brzmi "tak", brzmi: jak uporządkować relacje między obiektami? getAllMoves()
przyjmie jako dane wejściowe tablicę komórek; ale wydaje się dziwne, że wtedy klasa Player zależy od faktu, że jej komórki pasują (są podzbiorem) komórek przekazanych jako dane wejściowe. Byłoby lepiej, gdyby dane podzielone na komórki były przechowywane razem z tablicą wszystkich komórek w Tablicy i aktualizowane razem, gwarantując tym samym, że się zgadzają. Oczywiście, gwarancja, że się zgadzają, istniałaby tak czy inaczej, ale wydaje się, że obiekt Gracza nie powinien być świadomy gwarancji, która ma miejsce w obiekcie Board
.
Jak radzić sobie z tymi pytaniami?
Dzięki!
To brzmi tak, jakbyś próbował [BDUF] (http://en.wikipedia.org/wiki/Big_Design_Up_Front) - być może mógłbyś rozważyć alternatywny sposób wyparcia twojego modelu obiektowego, np. [TDD] (http://msdn.microsoft.com/en-us/magazine/dd882516.aspx) – razlebe
BTW Myślę, że projektowanie gry w szachy jest bardzo dobrym podejściem do zapoznania się z OOP. Pamiętaj, aby faworyzować asocjaty przez interfejs nad bezpośrednimi podklasami, ponieważ te ostatnie tworzą ścisłe sprzężenie, które nie zawsze jest konieczne. –