将过程代码重写为面向对象的等效代码的一般建议

时间:2014-06-05 14:52:03

标签: perl oop object refactoring procedural-programming

我有程序Perl代码(大约500行),我想重写为面向对象的等价物(在程序方面它慢慢变得一团糟)。如果有兴趣的话,我可以在这里发布代码(只有简单的评论)。

将程序重写为OOP等效的最佳做法是什么?

2 个答案:

答案 0 :(得分:4)

在你的过程Perl代码中,我想你的函数依赖于很多全局状态:访问全局变量或一次接收几十个参数。 OOP允许您在对象中封装状态,方法(在对象上定义的函数)可以访问对象中包含的所有状态。

如果有许多函数在相同的全局变量上运行,请创建一个包含这些变量的类,并将这些函数移动到该类中。然后,您的数据将受到全球范围的保护,您将不再需要声明您正在使用全局变量,也不需要具有大量参数的函数签名。

OOP实际上只是一种更简洁的方式来传递程序状态,从而产生更容易推理的更好的代码(比具有大量全局副作用的程序代码)。方法不需要您定义一个巨大的参数列表,因为它正在处理的对象实例(包括其所有状态)作为参数传递给引擎下的方法。

class Person { ... }
p = Person(...)
print p.to_string()

在上面,p实际上是to_string()的一个参数,只是在典型的OOP语法中它被传递到函数调用的左侧。

类似的东西在C中会是这样的:

struct Person { ... };
char* to_string(struct Person);
struct Person p = { ... };
printf(to_string(p));

答案 1 :(得分:2)

OOP主要关注通过将相关行为分组到对象中来保持本地状态(而不是全局)和模块化功能。鉴于问题的广泛普遍性,我建议首先考虑你的对象(主要数据是什么/主域对象是什么),并将程序功能分解为这些对象的方法。