【发布时间】:2020-12-04 04:33:12
【问题描述】:
我有一个 Track 类,它包含一组 Points 并及时代表人的位置。为了得到这个结果,我运行了一个结合不同数据的迭代优化例程。为了做到这一点,我用一个类OptimizedPoint 扩展Point,该类包含用于优化该点和当前值的数据。我还介绍了 OptimizedTrack,它是 OptimizedPoints 的集合以及与整个轨道相关的优化所需的其他数据。
我在OptimizedTrack 上运行优化,在最后一次迭代中,我返回给用户清理数据 (Track),它只有结果,没有其他数据。但是,我找不到用 OOP 表示 OptimizedTrack 在某种程度上是 Track 的扩展并为它们引入通用例程的方法。 F.e 获得了应该对他们俩都可用的轨道长度,因为它只使用在 OptimizedTrack 和 Track 中都可以找到的数据
现在我有这样的架构Point{x, y, z}, OptimizedPoint extends Point {additional_data}. Track {array<Point>}, OptimizedTrack {array<OptimizedPoint>, additional_data}。我不明白如何表达 OptimizedTrack 是 Track 的扩展,因为我无法表达 array<OptimizedPoint> 扩展 array<Point>。所以我不能介绍一个通用例程length,它可以为数组计算,因此也可以从数组计算。
我不坚持我当前的架构。很可能是错误的,我在这里写它只是为了表达我面临的问题。在这种情况下,您会如何建议重构我的架构?
【问题讨论】:
-
为什么要扩展Track?如果优化完成后不再需要临时数据,则可以将
optimize()定义为Track的方法。如果你想保留额外的数据,你可以创建一个class TrackOptimizer,它有一个Track实例作为成员(组合继承)和一个方法optimize(),它返回一个干净的Track。 -
@Lini
Track包含Points。为了优化我需要存储OptimizedPoints。在OptimizedTrack -
我知道你想将
OptimizedPoints 存储在一个集合中。它是否必须是扩展Track的新类OptimizedTrack?您是返回给用户Track还是OptimizedTrack? -
@lini 不一定是扩展名;我正在为我的任务寻找可能的架构。我想将
Track返回给用户。
标签: oop inheritance design-patterns containers