面向对象编程

5
我正在开发一个C++项目。我意识到我的程序不是面向对象的。
我有一个main.cpp和几个头文件,每个头文件基本上都是一组相关函数和一些全局变量来保留数据。我还有一个windowing.h用于管理窗口。它包含winMain()和winProc()。当事件发生(如单击按钮)或需要信息时(如“要使此窗口多大?”),它调用驻留在main.cpp中的函数。这些函数在单独的.h文件中声明,并包含在windowing.h中。
是否值得将其改为面向对象?是否值得付出努力?是否有更好的方法可以构建程序而不需要太多更改?
欢迎所有反馈,感谢您抽出时间阅读此内容。
4个回答

6
不,我认为如果它没有问题,就不要修复它。
窗口系统在某种程度上天然是面向对象的。您拥有一个句柄来管理由操作系统管理的窗口,并且可以对其执行某些操作。无论您使用window->resize()还是resize(window),都无关紧要。这种语法的重新排列显然没有价值。
然而,随着应用程序的增长,您可能会发现许多窗口大部分相似但微妙不同。最佳实现是具备特殊功能的样板基本功能。实现这一点的方法是使用基类和多态性。
因此,如果您可以通过面向对象的方式重新设计程序更加优雅,请去做。如果自然演化为面向对象范式,则遵循最佳实践并让它成为现实。但不要仅仅试图符合流行术语。

2

你需要考虑两件事情:成本效益分析和机会成本。

改变代码实现面向对象编程所需的成本是多少?又有什么好处?如果后者大于前者,那么我倾向于进行更改。

成本包括传统成本,如花费时间、金钱等。好处包括更清晰的实现,使未来维护更加容易。其他成本和收益取决于您自己的情况。

但经常被忽视的一件事是机会成本。这是应该考虑在您的分析中的成本。它是一个经济学术语,意思是“放弃的机会”。

换句话说,如果您转换了代码,您的成本包括无法利用此时间做其他事情。

经典的例子是,如果您进行了转换并且客户决定不购买您的软件,因为您没有添加他们想要的功能,那么失去的销售机会就是一种成本。


有趣的观点。把我的代码改成面向对象编程会更美观,但我不会获得太多功能。 - Alexander Rafferty
1
功能并不是一切,代码的美观也不重要。代码的可维护性才是关键,美观的代码可能更易于维护,但这并非总是如此。 - paxdiablo

1

这取决于您想通过项目实现什么。如果不使用 C++ 的面向对象特性适合您,并且没有很好的理由进行更改,那么继续走您目前的路线就可以了。另一方面,如果您想学习更多关于面向对象编程,并且有时间应用它,那么重构成更符合面向对象风格的代码将为您提供很好的学习机会。


1
我会遵循最佳实践,针对你所使用的任何窗口管理器进行编程。大多数窗口管理器使用面向对象的风格,当你按照它的使用模式时,你将自动继承它的这种风格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接