Oop 如何管理需要了解属于上层上下文的自身情况的对象?
想象一个游戏,你有一个棋盘,而这个棋盘是由多个单元格组成的(瓷砖,随便你怎么称呼它们) 我们有两类,Oop 如何管理需要了解属于上层上下文的自身情况的对象?,oop,Oop,想象一个游戏,你有一个棋盘,而这个棋盘是由多个单元格组成的(瓷砖,随便你怎么称呼它们) 我们有两类,Board和Cell。电路板具有二维单元阵列 如何处理这样一个事实,即每个单元格都知道自己的情况(如何在屏幕上绘制,如果播放角色可以在屏幕上行走等等),而其中一些信息只为上层所知(如Board所知)?例如,一个单元也应该知道它在哪里(x,y坐标),但在单元上(如x和y属性)和板上(作为数组中的索引)存储该信息是多余的。此外,例如,该单元了解其邻居也很有用 在这些情况下,什么是好的OOP设计?不要在
Board
和Cell
。电路板具有二维单元阵列
如何处理这样一个事实,即每个单元格都知道自己的情况(如何在屏幕上绘制,如果播放角色可以在屏幕上行走等等),而其中一些信息只为上层所知(如Board所知)?例如,一个单元也应该知道它在哪里(x,y坐标),但在单元上(如x和y属性)和板上(作为数组中的索引)存储该信息是多余的。此外,例如,该单元了解其邻居也很有用
在这些情况下,什么是好的OOP设计?不要在两个类上都存储冗余信息。如果你描述了整个故事,我认为这两门课都应该保持原样
Board
应该包含您所说的单元格
数组,该数组将保留您提到的信息(坐标),并使用getter函数向公众提供这些信息。大概是这样的:
class Board {
private:
Cell array[N][M];
..
};
class Cell {
public:
int getX() { return x; }
int getY() { return y; }
...
private:
int x;
int y;
...
};
当然,你可以让他们成为朋友,但我不会这么做,除非I/O出现了一些严重的问题
也许,您也应该开始考虑继承,因为有些信息是共享的。在这种情况下,
Board
可以访问它需要的数据成员,而Cell
类不必提供getter函数。您可以将Board用作抽象类,Cell可以使用Board的函数,而不必详细了解,同时可以定义自己的函数。抽象是否有用?Board可以包含公共函数,单元格可以使用Board的高级函数,并可以定义自己的函数,如GetNeighborDetails。但他希望拥有一个类Board
的对象,我想:/