我试图解决3D空间中的路径规划问题并且已经成功,但我不知道我的解决方案是否有足够松散的耦合。我有三个源文件,每个文件包含一个公共类:Vertex.java,VertexHeuristicComparator.java和PathPlanningUtil.java。
顶点包含三个字段:3D空间中的Point
(location
),对另一个顶点(parent
)的引用以及与目标保持距离的float
顶点(distToGoal
)。路径规划中使用顶点集合来探索环境并找到最佳路径。
VertexHeuristicComparator实现Comparator<Vertex>
。我已经覆盖compareTo方法,以便在比较中使用distToGoal
和parent
。此方法有效地定义了最佳顶点,以便路径规划可以优先考虑搜索。
PathPlanningUtil包含方法planPath(Point start, Point goal)
。此方法返回ArrayList<Vertex>
,表示从开始到目标的3D空间中的路径。此方法使用VertexHeuristicComparator
来确定如何通过探索VertexHeuristicComparator确定的顶点是最低的&#34;来探测环境的方式。顶点。
由于VertexHeuristicComparator
是路径规划逻辑的核心。更改VertexHeuristicComparator源代码将导致planPath
返回不同的路径。对VertexHeuristicComparator进行更改以大幅改变planPath
的输出是不是很糟糕?
答案 0 :(得分:1)
要回答您的直接问题,
将VertexHeuristicComparator更改为错误耦合 大幅改变planPath的输出?
没有。如果对VertexHeuristicComparator
的更改导致PathPlanningUtil
代码的更改,则只会导致严重(紧密)耦合。只要你可以改变一个类的代码而不必改变另一个类的代码,你就可以实现合理的松散耦合。
答案 1 :(得分:0)
我对耦合的一般理解是,它更多的是不依赖于特定的实现而不是通用接口 - 例如,显式返回或需要ArrayList而不是List,或硬编码特定的使用逻辑链中的东西。
我可能建议你的具体例子是让你的路径规划接受作为启发式使用的参数(作为比较器)。这将阻止您实现路径规划,具体取决于您为比较器编写的类,并允许客户端(在本例中为您的主程序)提供它想要用作启发式的比较策略。
因此,为了在代码示例中总结一下,我将路径规划方法的签名类似于:
List<Vertex> planPath(Point start, Point goal, Comparator<Vertex> heuristic)
并让调用计划路径的方法成为引用VertexHeuristicComparator类的方法,并将其用作启发式参数。