Я пытаюсь понять, как проектировать и думать объектно-ориентированным образом, и хочу получить от сообщества ответы на эту тему. Ниже приведен пример шахматной игры, которую я хочу создать в стиле OO. Это очень широкий дизайн, и я сосредоточен на этом этапе, чтобы определить, кто несет ответственность за то, что сообщения и как объекты взаимодействуют друг с другом, чтобы имитировать игру. Пожалуйста, укажите, есть ли элементы плохого дизайна (высокая сцепность, плохая сплоченность и т.д.) И как их улучшить.
В шахматной игре есть следующие классы
- Совет
- Игрок
- шт
- Площадь
- ChessGame
Совет состоит из квадратов, и поэтому Совет может быть ответственным за создание и управление квадратными объектами. Каждая часть также находится на квадрате, поэтому каждая часть также имеет ссылку на квадрат, на котором он находится. (Имеет ли это смысл?). Затем каждый кусок отвечает за то, чтобы переместиться с одного квадрата на другой. Класс игрока содержит ссылки на все принадлежащие ему части и также отвечает за их создание (должен ли игрок создавать пьесы?). У игрока есть метод takeTurn, который, в свою очередь, вызывает метод movePiece, который принадлежит кусочку класса, который изменяет местоположение части из ее текущего местоположения в другое место. Теперь я смущен тем, за что должен отвечать класс Совета. Я предположил, что это необходимо, чтобы определить текущее состояние игры и узнать, когда игра окончена. Но когда часть изменит его местоположение, как обновить доску? должен ли он поддерживать отдельный массив квадратов, на которых существуют кусочки, и которые обновляются, когда куски движутся?
Кроме того, ChessGame создает объекты Board и player, которые, в свою очередь, создают квадраты и куски соответственно и запускают симуляцию. Вкратце, это может означать, что код в 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();
}
Я не понимаю, как будет обновляться состояние совета. Должна ли штука иметь ссылку на борт? Где должна быть ответственность? Кто владеет ссылками? Пожалуйста, помогите мне с вашими данными и укажите проблемы в этом дизайне. Я намеренно не фокусируюсь на каких-либо алгоритмах или дальнейших деталях игры, поскольку меня интересует только дизайн. Я надеюсь, что это сообщество может предоставить ценную информацию.