Я программист на C ++, пытающийся научиться проектировать, вначале я пытаюсь научиться проектировать, поставив перед собой задачу создать ОО-дизайн для игры в шахматы. Это не домашняя работа, а просто попытка развивать некоторые навыки.
Вот краткое изложение того, что я имею в виду до сих пор:
Класс "Piece", который будет хранить текущую позицию фигуры на доске.
специализированные классы "Верблюд", "Лошадь", "Королева", "Рыцарь", "Пешка" и "Слон", которые будут производными от класса "Кусок". Каждый из этих классов будет содержать по 2 члена: «Нет мест, в которых разрешено перемещаться» и «Правило перемещения», и методы get для его получения.
Базовый класс "Player", который будет расширен за счет классов "BlackPiecePlayer" и "WhitePiecePlayer". Каждый из этих классов будет содержать другой экземпляр класса под названием «PieceManager». Класс «PieceManager» будет определять логику перемещения фигур на доске.
Класс "Шахматная доска", который будет содержать отображение всех фигур на доске и иметь доступ к набору правил, с помощью которых можно перемещать фигуры. Он предоставит интерфейсы для проверки подлинности перемещения, рассчитанного «PieceManager», а затем выполнит перемещение при обновлении своих собственных сопоставлений.
Вот общий поток, который я могу визуализировать. Классу «WhitePiecePlayer» предлагается сделать ход, он попросит собственный «WhitePieceManager» сделать ход. «WhitePieceManager» будет получать доступ к позициям фигур на доске, используя интерфейсы класса «Board». Затем он будет использовать свою внутреннюю логику для расчета перемещения для фигуры. Каждая фигура сохраняет свою позицию, чтобы вычислить позицию для этой фигуры. Затем аутентифицировать перемещение можно, вызвав метод класса Board, а затем выполнить перемещение, используя интерфейс класса Board ... и т. Д.
Извините за длинную историю, я просто пытаюсь развить чувство дизайна, и это то, что я имею в виду прямо сейчас. Как вы думаете, это хорошо для начала или какие-либо предложения о том, как сделать его лучше (если это правильно)