解释这种“糟糕的编程习惯”?

时间:2010-12-17 18:09:56

标签: oop

我正在学习OOP,我发现编程习惯很糟糕 一方的信息包装类和另一方面处理第一方的方法的类,但我不明白这个概念,所以我要求一些解释和一个例子,如果可能的话。

提前致谢

3 个答案:

答案 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 objectsdomain entities。在设计算法时,这种分离也很有用 - 看看visitor pattern或如何设计STL algoritms

一般来说,Single responsibility principle在这里很重要。如果您的对象试图执行许多不同的,逻辑上独立的操作,那么将这些操作与数据分离可能是一个很好的解决方案。