2009-02-16 76 views
1

当您发现应用程序有很多类时,您会做什么,但类不是真正的可插入对象,而是一组常用函数?OO设计问题

例子:

Class Point 
{ 
calculatePoints(something) {} 
calculatePointsAnotherWay(something) {} 
} 
+0

听起来像静态类/方法对我来说......你是什么意思“你做什么?”你想重构这段代码吗?为什么? – 2009-02-16 21:49:55

回答

11

我会看看功能,看看他们是如何使用可实例化的对象。如果函数:

  • 取用户定义的类型作为参数的一个对象,从对象
  • 提取数据,并
  • 产生基于对这些提取的数据的计算结果,

那么该函数是成为它的参数类的方法的候选人。这种编码有时是创建原始类型的程序员或编写“外部”函数(或两者)的程序员可能仍然在思考命令式/程序式风格,而不是面向对象风格。

4

如果它是由语言允许,我会想办法让他们自由(非成员)函数。如果他们不属于一个阶级,他们就属于这个阶级。

如果您想对它们进行分组,请将它们放在单独的名称空间中。

在C#或Java中,这当然是不可能的,所以我可能会把它们放在单独的静态类中。

+0

我知道python有这个。哪些人? – 2009-02-16 22:07:44

+0

C++是我想到的。 :) – jalf 2009-02-16 22:18:56

1

从我所经历的一点经验,以及从问题中的有限信息开始工作,在这种情况下似乎没有什么应该做的。拥有仅包含常用函数和子例程的静态对象(不可实例化)是完全合法的。

2

使方法成为静态的,并且类也是如此(如果可以的话),如果名称错误(例如,Point是该类的非常糟糕的名称),则重命名这些类,然后在适当的情况下移动或重新组合方法。

我的猜测是你关心的是类的名称。如果周围有很多这样的类,则需要简洁地命名,并且应该遵守Single Responsiblity Principle而不仅仅是通用方法分组。

0

从我读过的看,分组相关函数显然是OOP世界中一个类的有效使用。

0

可能代码是用程序风格编写的,本身并不坏。我首先要确保所有的方法都比较小,不超过50行。如果有大的方法,我会把它们分成更小的方法。这样我会确保我有良好的程序设计。再说一次,如果做得对,程序编程不是一件坏事。

然后,我会查找超过5个参数的方法,并尝试根据参数创建类。然后我会做我称之为C到C++的转换:将这些“参数”类与操作它们的方法捆绑在一起,所以OO风格将开始出现。

1

正如您将问题标题为OO。我想你想知道如何构造它作为OO代码。

目前,正如您所描述的那样,作者已经编写了程序代码,但恰好碰巧使用了面向对象的语言。

如果你有这样的代码,并希望它在一个更纯粹的面向对象的形式,你需要努力研究面向对象是什么,以及如何在你的设计中使用它的功能。

这是比我能适应在这里的答案。我认为一本书或一本阅读书应该让你走上正轨。

这一条可能是一个良好的开端: http://www.amazon.com/Object-Oriented-Modeling-Design-James-Rumbaugh/dp/0136298419

1

这听起来像你能说出类PointUtilities,使功能是静态的。

0

好吧,似乎框架中的常用方式(例如Java API中的java.lang.Math,.NET Framework类库中的System.Math)将这些方法分组到静态/最终/密封类中并使其statis/final/sealed方法。

是的 - 这是一个程序方法。

在另一方面,如果你看过吨的书籍(开玩笑的),也许你可以使它更加面向对象的...

在我看来,我对这个观点没有什么地方是合适的 - 也许最终承认这个世界并非纯粹面向对象更容易。 :)