Java国际象棋:查找附近的square是square类还是Board类的方法?

Java国际象棋:查找附近的square是square类还是Board类的方法?,java,oop,architecture,Java,Oop,Architecture,我正在用Java编写一个国际象棋游戏,我用一个Board类设置了它,该类有一个二维正方形对象数组。每个正方形都有一个高度和宽度(介于0和7之间)。我要写一个方法,它接受一个正方形物体,一个垂直偏移,一个水平偏移 例如:如果我调用getNearbySquare(mySquare,3,2),它应该返回我的板中的正方形对象,它在mySquare上方3,在mySquare右侧2 我最初是在Square类中作为一个实例方法编写的,它只接受了垂直和水平偏移。问题是,我创建并返回了一个新的方形对象,而不是Bo

我正在用Java编写一个国际象棋游戏,我用一个Board类设置了它,该类有一个二维正方形对象数组。每个正方形都有一个高度和宽度(介于0和7之间)。我要写一个方法,它接受一个正方形物体,一个垂直偏移,一个水平偏移

例如:如果我调用getNearbySquare(mySquare,3,2),它应该返回我的板中的正方形对象,它在mySquare上方3,在mySquare右侧2

我最初是在Square类中作为一个实例方法编写的,它只接受了垂直和水平偏移。问题是,我创建并返回了一个新的方形对象,而不是Board类中2d数组中的正确对象

我看到两种选择:

1) 在Square类中创建一个实例方法,该实例方法接受Board对象、垂直偏移和水平偏移。我将找到调用此方法的正方形对象的当前高度和宽度,添加垂直和水平偏移以获得所需正方形在板中的新位置,然后使用Board[newHeight][newWidth]访问它

2) 在Board类中生成一个实例方法执行相同的操作,但不需要像1)中那样传入Board对象。相反,我需要传入方形对象

就做出这些决定而言,是否有一种普遍接受的做法

谢谢你的帮助,
Mariogs

从一个非常简单的角度来看,将
getNearbySquare()
方法作为
电路板的实例方法比从正方形中获取更为合理,因为该方法需要有关电路板布局和总体的详细信息,这将更容易实现(并保持封装/松耦合)从
实例中

将该方法放在
Square
实例上意味着让Square对象访问可能属于私有的关于电路板的信息

相关阅读


正方形知道它所属的板是可以的,因为正方形不是孤立的。否则,正方形知道它的位置是没有意义的。当用户单击正方形时,正方形可能只是将该事件告知其板,而板将能够根据正方形的位置对用户的操作作出反应。给定董事会还应该知道它的平方,这样可以很容易地计算出哪一个将成为下一个行动的目标


另请参见

board需要了解方块,而不是相反。这应该是board类的一个方法。但问题是:当用户单击方块时,我想访问该board(如您所建议的,调用getNearbySquare()).但是我没有提到董事会,除非我把它变成一个正方形的区域…但是,Square知道它的董事会…@Mariogs-只是为了反映Leandro的情绪,一个正方形有一个它所属的董事会的参考是好的,只要董事会有它自己的内部组件(字段)私有。