The board must move the player or the player move itself?
I would say neither. The board and player are 2 objects managed by a different object that runs logic depending on the information given by the board and applied ononto the player. So you move the player by this game "logic" whichthe "game logic". Which depends on the information ofreturned by the board. Which in this scenario could be the cell(A space on your board) relatively from the players current position to the next calculated cell determined by the die. A Cell holds various information, like which player owns it ( if we are talking about monopoly) trough id. The condition the player must meet before progressing any further etc.
Your player could simply be a sprite, and by using an additional object you can keep track of stats like id and position. ( although you could just program the sprite and the stats into one object) This information is passed onto the board itself and processed internally to handle its own information. It then gives information back to the "game logic" and the player is moved by the conditions that are given.
So basically :
GameLogicObject ( or simply put BoardGame)
|
\-->Board //contains position grid, etc.
|
\-->playerList[] ( using id 0, 1 , 2 and 3 to access the right player
information in combination with currentPlayer++ after each
round depending on the amount of players and looped back to 0)
|
\-->Other properties
Game stats like current gameState, Time etc.