Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何管理需要了解属于上层上下文的自身情况的对象?_Oop - Fatal编程技术网

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
的对象,我想:/