저는 객체 지향 방식으로 디자인하고 생각하는 방법에 대한 느낌을 얻으려고 노력하고 있으며이 주제에 대한 커뮤니티의 피드백을 받고 싶습니다. 다음은 제가 OO 방식으로 디자인하고 싶은 체스 게임의 예입니다. 이것은 매우 광범위한 디자인이며이 단계에서 저의 초점은 누가 어떤 메시지를 담당하고 게임을 시뮬레이션하기 위해 오브젝트가 서로 어떻게 상호 작용하는지 식별하는 것입니다. 잘못된 설계 요소 (높은 커플 링, 나쁜 응집성 등)가 있는지 여부와 개선 방법을 지적하십시오.
체스 게임에는 다음과 같은 클래스가 있습니다.
- 판
- 플레이어
- 조각
- 광장
- 체스 게임
Board는 사각형으로 구성되어 있으므로 Board는 Square 개체의 생성 및 관리를 담당 할 수 있습니다. 각 조각은 또한 사각형에 있으므로 각 조각에는 해당 사각형에 대한 참조도 있습니다. (이게 말이 되요?). 그런 다음 각 조각은 한 사각형에서 다른 사각형으로 이동해야합니다. Player 클래스는 그가 소유 한 모든 조각에 대한 참조를 보유하고 있으며 또한 조각을 생성해야합니다 (플레이어가 조각을 만들어야합니까?). Player에는 현재 위치에서 다른 위치로 조각의 위치를 변경하는 조각 클래스에 속하는 movePiece 메서드를 차례로 호출하는 takeTurn 메서드가 있습니다. 이제 Board 클래스가 정확히 무엇을 담당해야하는지 혼란 스럽습니다. 나는 게임의 현재 상태를 확인하고 게임이 언제 끝나는 지 알기 위해 필요하다고 생각했습니다. 하지만 조각이 바뀌면 s 위치 게시판은 어떻게 업데이트해야합니까? 조각이 존재하고 조각이 이동함에 따라 업데이트를받는 별도의 사각형 배열을 유지해야합니까?
또한 ChessGame은 처음에 각각 사각형과 조각을 생성하고 시뮬레이션을 시작하는 보드 및 플레이어 개체를 생성합니다. 간단히 말해서 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();
}
이사회 상태가 어떻게 업데이트되는지 확실하지 않습니다. 조각에 보드에 대한 참조가 있어야합니까? 책임은 어디에 있어야합니까? 누가 어떤 참조를 가지고 있습니까? 당신의 의견을 도와 주시고이 디자인의 문제점을 지적 해주세요. 나는 디자인 측면에만 관심이 있기 때문에 의도적으로 알고리즘이나 게임 플레이의 추가 세부 사항에 초점을 맞추지 않습니다. 이 커뮤니티가 귀중한 통찰력을 제공 할 수 있기를 바랍니다.
takeTurn()
p1의 움직임이 게임을 끝내면 p2는 콜해서는 안됩니다 . 덜 간결한 댓글 : 플레이어white
및black
.