Scala 如何用OOP语言包装过程算法

Scala 如何用OOP语言包装过程算法,scala,oop,Scala,Oop,我必须实现一个完全符合程序设计方法的算法。它与某些数据结构没有关系,它只需要几个对象、一堆控制参数并对它们执行复杂的操作,包括创建和修改中间时态数据、子程序调用、许多cpu密集型数据转换。该算法过于具体,无法作为方法包含在任何参数对象中 用OOP语言包装这些算法的惯用方法是什么?使用执行计算的静态方法定义静态对象?定义一个类,该类将所有算法参数作为构造函数参数,并使用result方法返回结果?还有别的办法吗 如果你需要更多的细节,我用scala写。但是任何通用的OOP方法都是适用的。静态方法(或

我必须实现一个完全符合程序设计方法的算法。它与某些数据结构没有关系,它只需要几个对象、一堆控制参数并对它们执行复杂的操作,包括创建和修改中间时态数据、子程序调用、许多cpu密集型数据转换。该算法过于具体,无法作为方法包含在任何参数对象中

用OOP语言包装这些算法的惯用方法是什么?使用执行计算的静态方法定义静态对象?定义一个类,该类将所有算法参数作为构造函数参数,并使用
result
方法返回结果?还有别的办法吗

如果你需要更多的细节,我用scala写。但是任何通用的OOP方法都是适用的。

静态方法(或者Scala中单例对象上的方法——我将称之为静态方法,因为这是最常用的术语)可以很好地工作,并且可能是最常用的方法

使用其他方法有一些原因,但它们并不是绝对必要的,我会避免使用它们,除非你确实需要它们带来的优势。这是因为静态方法是最简单(如果通用性最低的话)的方法

使用非静态方法可能很有用,因为您可以利用设计模式,如factory模式。例如,您可能有一个带有方法
evaluate
操作符
类。现在,您可以让不同的工厂创建不同的
操作符
s,这样您就可以动态地交换算法。也许一个计算器可能有一个
AddOperatorFactory
MultiplyOperatorFactory
等等。显然,这要求您能够实例化表示算法的对象。当然,正如Scala和许多其他语言所允许的那样,您可以直接传递函数。然而,类允许继承,这为某些设计模式打开了大门,而且,您要问的是OOP,而不是Scala

还有一个很有用的功能是能够对对象进行状态设置。对于静态方法,保留状态的唯一选项是使用全局状态(ew)或让静态方法的用户跟踪此状态(用户需要做更多工作)。对于对象的实例,可以将该状态保留在实例中。例如,如果您的算法是图形搜索,那么您可能希望允许在找到第一个匹配项后恢复搜索(这显然需要存储状态)

要做
newmyalgorithm().doStuff()
而不是
MyAlgorithm.doStuff()
,并不难,因此如果有疑问,如果您认为需要实例提供的功能,我会选择避免使用静态方法。

静态方法(或者Scala中单例对象上的方法——我将称之为静态方法,因为这是最常见的术语)可以很好地工作,并且可能是最常见的方法

使用其他方法有一些原因,但它们并不是绝对必要的,除非您确实需要它们所带来的优势,否则我会避免使用它们。之所以这样做,是因为静态方法是最简单(如果通用性最低的话)的方法

使用非静态方法可能很有用,因为您可以使用类似工厂模式的设计模式。例如,您可能有一个
操作符
类和一个方法
evaluate
。现在您可以让不同的工厂创建不同的
操作符
以便您可以动态交换算法。可能是calculator可能有一个
AddOperatorFactory
MultiplyOperatorFactory
等等。显然,这要求您能够实例化一个表示算法的对象。当然,您可以直接传递一个函数,就像Scala和许多其他语言所允许的那样。不过类允许继承,这是可行的为一些设计模式打开了大门,你问的是OOP,而不是Scala

还有一个很有用的功能是对象具有状态。对于静态方法,保留状态的唯一选项是具有全局状态(ew)或使静态方法的用户跟踪此状态(用户需要做更多工作)。对于对象的实例,您可以将该状态保留在实例中。例如,如果您的算法是图形搜索,则可能希望允许在找到第一个匹配项后恢复搜索(这显然需要存储状态)


newmyalgorithm().doStuff()代替
MyAlgorithm.doStuff()并不难
,因此,如果有疑问,如果您认为需要实例提供的功能,我会避免使用静态方法。

特别是在scala中,使用实现过程算法的函数定义创建一个
对象
。是的,它本质上是
静态的静态对象也很容易用其他语言声明。但我很好奇的是,这种组织算法的方式适用于OOP语言。我很好奇,如果在这种情况下有常见的设计模式,我不知道它是否正确,为什么你会认为它不适合?它看起来很难看。我的直觉说不,不,但我不能理解这种方法的实际问题是什么。你能给我们看一下代码吗?或者你想把它发布到。特别是在scala中,创建一个带有实现过程算法的函数定义的
对象
很简单。是的,它本质上是
静态的
,在需要算法或在助手类上。静态对象也很容易用其他语言声明。但我是cur