我正在为学校做一个项目,这个项目正在挑战我对OOP的理解。我有同一个班级的多个对象,City。每个城市都有一个位置。如果我的理解是正确的,因为每个城市之间的距离取决于另一个城市" int distance"不能成为班级城市中的一个领域。我可以编写一种方法来计算每个城市之间的距离,但我不确定如何/在哪里保存这些数据。我想最终对这些数据进行排序,以找出最接近的城市对象。
答案 0 :(得分:1)
我建议使用Map
类(如制图中,而不是通常的Collection
),其实例将包含Set
Cities
。他们可以提供计算其Cities
之间关系的其他信息的方法,并在需要时缓存结果。
Map
不一定包含Cities
,但听起来合乎逻辑,肯定有助于操纵它们。如果您不想要,可以使用"帮助类",类似DistancesHelper
,定义静态方法以处理可能与静态缓存交互的Cities
。
答案 1 :(得分:0)
在我看来,距离的计算应该是Location
的方法而不是City
的方法。您可以稍后决定您的地图除了具有位置的城市之外还有其他兴趣点。
所以我对结构的建议是:
interface PointOfInterest {
Location getLocation();
default int distanceTo(PointOfInterest other) {
return getLocation().distanceTo(other.getLocation());
}
}
class City implements PointOfInterest {
private final Location location;
@Override public Location getLocation() {
return location;
}
}
class Location {
public int distanceTo(Location other) {
...
}
}
这样,定义位置所需的任何数据(例如纬度,经度)都完全包含在Location
对象中。