函数应该在两个类中的一个/两个中运行,还是独立运行?
Should a function go in one/both of two classes or be free-standing?
我对OOP比较陌生。有时我遇到我不确定方法应该放在哪里的情况。我会尽量给出一个最小的例子;我希望我不会做得太过火,使它太抽象。
假设我有一个Point
类,它包含一个点的位置,一个Line
类,它包含一条直线的方程。我现在需要一种方法来计算Point
和Line
之间的(垂直)距离。我可以:
- :: distance_to_line (L)
- :: distance_to_point(点P)
- 一个独立函数:point_line_distance(Line L, point P)
在一般的OOP中是否有首选的方法,或者它是否依赖于语言?在c++中,独立函数是一种选择,但从我对Java的有限理解来看,它不允许独立函数。在这种情况下,你会创建一个类PointLineDistanceCalculator
吗?
不属于Point
或Line
类的第三个选项是最好的选择。
Points
不应该知道Lines
,反之亦然。否则,它们将紧密耦合。
但是,可能有其他类同时知道这两个。
在java中,我可能会做第三个Distance
类或DistanceCalculator
,可以计算几个对象之间的距离。
Distance.between(Point a, Point b)
Distance.between(Point a, line l)
等在java中,您总是可以将独立函数创建为两个类之一(或第三个辅助类)的静态方法。
我不认为一般来说有一个首选的方法,但是您可以同时使用这三种方法以获得最大的灵活性,并重用代码。
例如,一个方法将包含以下逻辑:
class Point {
...
float distToLine (Line l) {
....
return some result;
}
...
}
,然后其他方法将调用原始方法:
class Line {
...
float distToPoint (Point p) {
return p.distToLine (this);
}
...
static float pointToLineDistance (Point p, Line l) {
return p.distToLine (l);
}
...
}
第四个选项是在类层次结构中找到/构造一个共同的祖先类似于"GeometricEntity"。
相关文章:
- 在声明中合并两个常量"std::set"(不是在运行时)
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 合并两个排序链表时运行时出错
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 在编译时而不是运行时创建一个由两个字节组成的值
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 从Qt/C++-App并行运行两个Lua函数
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- 两个并发的 Python 进程可以在 Boost Python 中运行吗?
- 如何使用 Turbo C++并行运行两个功能,一个用于键盘,一个用于鼠标?
- 在C++中,如何同时运行两个语法命令?
- 两个不同类的运行时多态性
- 在运行时开始时填充两个大向量
- *char数组到字符串(两次运行代码和两个不同的结果)
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 如何连接两个文件夹/项目的生成文件,这两个文件夹/项目必须一起运行且独立运行
- 为什么两个执行矩阵乘法的过程并行运行比连续运行慢
- 在Qt中,我如何成功运行两个查询
- 基于标志运行两个不同的函数