我正在学习OOP,我发现编程习惯很糟糕 一方的信息包装类和另一方面处理第一方的方法的类,但我不明白这个概念,所以我要求一些解释和一个例子,如果可能的话。
提前致谢
答案 0 :(得分:2)
我认为你似乎正处于这样的情况:信息类中的方法会更好 - 两者应该合并,而作用于信息的类也应该存储它。
class CoordinatePair
{
float x, y;
public Coordinate(float xIn, float yIn) {x = xIn; y = yIn;}
public getX() {return x;}
public getY() {return y;}
}
class CoordinateTools
{
public CoordinatePair add(Coordinate a, Coordinate b)
{
return new CoordinatePair(a.getX() + b.getX(), a.getY() + b.getY());
}
public float dotProduct(Coordinate a, Coordinate b)
{
returna a.getX() * b.getX() + a.getY() * b.getY());
}
}
最好用:(或者重载运算符,至少是静态工具类)
class CoordinatePair
{
float x, y;
public Coordinate(float xIn, float yIn) {x = xIn; y = yIn;}
public getX() {return x;}
public getY() {return y;}
public CoordinatePair sumWith(CoordinatePair other) {//body}
public float dotProductWith(CoordinatePair otheR) {//body}
}
这个例子有点微不足道,但你希望可以看到更多涉及的内容会变得更糟。
答案 1 :(得分:1)
你所描述的是一个“愚蠢的模型”,这是一个非常小的问题。密切关注信息类中每个字段的代码,或者开始进入其数据结构以更改或读取它们 - 特别是如果您发现自己在应用程序的多个部分中执行类似的操作。当你抓住其中任何一个时,尝试将这项工作转移到信息类的方法中。
跟踪第二类问题的好方法是一点规则 - 如果你发现自己在另一个类中调用类的方法,那么第一个类应该可以处理方法中的操作。
答案 2 :(得分:1)
我会说:这取决于。
在某些情况下,将数据与行为分开将是最佳解决方案,例如data transfer objects或domain entities。在设计算法时,这种分离也很有用 - 看看visitor pattern或如何设计STL algoritms。
一般来说,Single responsibility principle在这里很重要。如果您的对象试图执行许多不同的,逻辑上独立的操作,那么将这些操作与数据分离可能是一个很好的解决方案。