Design patterns 面向对象设计问题

Design patterns 面向对象设计问题,design-patterns,Design Patterns,当你注意到一个应用程序有很多类,但这些类不是真正的无形对象,而是一组常见的函数时,你会怎么做 例如: Class Point { calculatePoints(something) {} calculatePointsAnotherWay(something) {} } 如果语言允许,我会让它们成为自由(非成员)函数。如果他们不属于某个类,他们就属于该类之外 如果要对它们进行分组,请将它们放在单独的命名空间中 当然,在C#或Java中,这是不可能的,所以我可能会将它们放在一个单独

当你注意到一个应用程序有很多类,但这些类不是真正的无形对象,而是一组常见的函数时,你会怎么做

例如:

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

如果语言允许,我会让它们成为自由(非成员)函数。如果他们不属于某个类,他们就属于该类之外

如果要对它们进行分组,请将它们放在单独的命名空间中


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

如果语言允许,我会让它们成为自由(非成员)函数。如果他们不属于某个类,他们就属于该类之外

如果要对它们进行分组,请将它们放在单独的命名空间中


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

根据我的一点经验,以及问题中有限的信息,在这种情况下似乎没有什么需要做的。拥有只包含公共函数和子例程的静态对象(不可实例化)是完全合法的

从我的一点经验来看,从问题中有限的信息来看,在这种情况下,似乎你不应该做什么。拥有只包含公共函数和子例程的静态对象(不可实例化)是完全合法的

将方法设置为静态,并将类也设置为静态(如果可以的话),如果命名错误,请重命名类(例如,Point对于该类来说是一个非常糟糕的名称),然后在适当的情况下移动或重新组合方法


我猜您关心的是类的名称。如果有很多这样的类,那么需要简洁地命名,并且应该遵守,而不仅仅是泛型方法分组。

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


我猜您关心的是类的名称。如果有很多这样的类,那么需要简洁地命名,并且应该遵守,而不仅仅是泛型方法分组。

根据我所读的,分组相关函数显然是OOP世界中类的有效使用。

根据我所读的,分组相关函数显然是OOP世界中类的一种有效用法。

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

  • 将用户定义类型的对象作为参数
  • 从该对象提取数据,然后
  • 根据对提取数据的计算生成结果

然后,该函数是成为其参数类上的方法的候选函数。这种编码有时是一种线索,表明创建原始类型的程序员或编写“外部”函数的程序员(或两者兼而有之)可能仍在以命令式/过程式的方式思考,而不是OO式的方式思考。

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

  • 将用户定义类型的对象作为参数
  • 从该对象提取数据,然后
  • 根据对提取数据的计算生成结果

然后,该函数是成为其参数类上的方法的候选函数。这种编码有时是一种线索,表明创建原始类型的程序员或编写“外部”函数的程序员(或两者兼而有之)可能仍在以命令式/过程式而不是OO式思考。

可能代码是以过程式编写的,这本身并不坏。我首先要确保所有的方法都相对较小,不超过50行。如果有较大的方法,我会将它们拆分为较小的方法。这样我可以确保我有良好的程序设计。同样,如果做得好,过程编程也不是一件坏事


然后,我将查找具有5个以上参数的方法,并尝试基于这些参数创建类。然后我会做我称为C到C++的转换:用这些操作的方法将这些“参数”类捆绑在一起,这样OO风格就会开始出现。

< P>也许代码是用过程风格编写的,这本身就不错。我首先要确保所有的方法都相对较小,不超过50行。如果有较大的方法,我会将它们拆分为较小的方法。这样我可以确保我有良好的程序设计。同样,如果做得好,过程编程也不是一件坏事


然后,我将查找具有5个以上参数的方法,并尝试基于这些参数创建类。然后我会做我称为C到C++的转换:用这些方法对这些“参数”类捆绑在一起,这样OO风格就会开始出现。

< P>因为你把问题命名为OO。我猜您想知道如何将其构造为OO代码

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

如果你到处都有这样的代码,并且希望它是一种更纯粹的OO形式,那么你需要认真研究OO是什么,以及如何在设计中使用它的特性

这超出了我的回答范围。我认为读一本书或10本书应该会让你走上正轨

这可能是一个好的开始:

正如您将问题命名为OO一样。我猜您想知道如何将其构造为OO代码

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

如果你到处都有这样的代码,并且希望它是一种更纯粹的OO形式,那么你需要努力研究OO是什么,以及如何实现