1

这个问题困扰了我很久:

我有一Room堂课,可以说我想添加一个Ball实体。

Ball应该有xy坐标代表这个房间的一个位置。

所以这是一个问题:

哪个类应该保存坐标?

1)每个人都Ball为它自己。

2)Room将保存每个 的坐标Ball

我知道这可能无关紧要,但什么是首选或什么更受欢迎?

编辑

我真正担心的是,对象可以随心所欲地改变它的内容,所以让它受到一些第三方的限制可以解决它。但我想它只对具有多个用户的应用程序有效,而不是我的情况。

4

5 回答 5

7

当谈到对象设计时,我最开始的口头禅之一是“对象知道自己的一切”。想象一下,球不得不问房间——我在哪里?我将从持有它的坐标的球开始。这样,房间只需要知道自己和 Ball 对象的集合。相反,球知道关于它自己的一切。房间可能需要的关于球坐标的任何细节都可以通过迭代集合来收集。当您开始在房间中添加其他物品时,您对设计的影响也会小得多。

于 2012-12-14T15:28:03.213 回答
1

坐标应该与类一起去Ball。例如:您可以在 中拥有一个、两个、三个或更多(或动态数量的)Balls 实例,Room并且每个实例都有自己的坐标。

例外情况是,如果您需要对球的坐标进行一些繁重的处理,并且您更喜欢将这些坐标存储为向量。在这种情况下,选择是将这些向量作为 的成员Room

于 2012-12-14T15:11:57.390 回答
0

我认为这在很大程度上取决于你如何看待这个问题。球是一个对象,每个对象在现实世界中都有一个坐标。另一方面,Room 是对象的容器,可以包含它所包含的对象的位置。

我通常做的是看看我的程序以哪种方式更容易开发,因为我太懒了 :D 。也就是说,我更喜欢从 PositionableObject 继承 Ball 并将坐标存储在该类中。所以,在这个父类的任何继承之后,我所有的对象都会有坐标或位置......

于 2012-12-14T15:10:43.810 回答
0

如果 Room 类有一个 Ball 对象,而 Ball 对象是 Ball 在 Room 内的位置,我不得不说 Ball 对象应该有 XY 坐标。

假设房间没有球;现在您将球的 XY 坐标存储在 Room 对象中,即使没有球(设计不佳)。

如果房间里有不止一个球,额外的。每个球可能有不同的坐标。

于 2012-12-14T15:11:41.727 回答
0

在您所描述的情况下,可能将坐标作为球的属性很容易,并给出了......要点;-)

但用更一般的术语来说,这个问题可能会令人惊讶:想象有许多球和许多房间,每个都有更多的坐标系。球坐标只有在选择了坐标系后才有意义,所以坐标实际上是球和坐标系之间的联系。

如果您对描述球相对于所有系统的位置感兴趣,这不能通过线性组合来完成,而是需要一组球、一组房间和一组坐标,其中每个房间都包含一组记录每个包含一个球参考和该球在该上下文中的坐标参考。然后球本身可以有一个集合或记录,每个都是房间参考和坐标参考。

你需要一个空间管理器,它是房间和球的朋友,如果房间或球被移动,它会负责更新所有坐标,并保持集合的相互一致性。

但这远远超出了您最初的目的。我只是指出这一点,让您考虑一个潜在的更广泛的抽象。

于 2012-12-14T15:57:32.480 回答