面向对象编程 我正在开发一个C++项目。我意识到我的程序不是面向对象的

面向对象编程 我正在开发一个C++项目。我意识到我的程序不是面向对象的,c++,c,oop,C++,C,Oop,我有一个main.cpp和几个用于不同目的的标题。每个标题基本上是相关函数的集合,带有一些全局变量以保留数据。我还有一个windowing.h用于管理windows。其中包含winMain()和winProc()。当事件发生(如单击按钮)或需要信息(如“此窗口有多大?”)时,它调用驻留在my main.cpp中的函数。这些函数在windowing.h中包含的单独的.h文件中声明 是否值得将此更改为OO?这工作值得吗。有没有更好的方法可以在不做太多更改的情况下构建程序 欢迎所有反馈,感谢您抽出时间

我有一个main.cpp和几个用于不同目的的标题。每个标题基本上是相关函数的集合,带有一些全局变量以保留数据。我还有一个windowing.h用于管理windows。其中包含winMain()和winProc()。当事件发生(如单击按钮)或需要信息(如“此窗口有多大?”)时,它调用驻留在my main.cpp中的函数。这些函数在windowing.h中包含的单独的.h文件中声明

是否值得将此更改为OO?这工作值得吗。有没有更好的方法可以在不做太多更改的情况下构建程序


欢迎所有反馈,感谢您抽出时间阅读此文章。

不,我想如果它没有损坏,就不要修复它

任何窗口系统在某种程度上都是面向对象的。您有一个由操作系统管理的窗口句柄,可以对其执行某些操作。无论是使用
window->resize()
还是
resize(window)
都无关紧要。这种句法重组显然没有任何价值

然而,随着应用程序的发展,您可能会发现许多窗口基本上是相似的,但也有细微的不同。最好的实现是附带特殊函数的样板基本功能。实现这一点的方法是使用基类和多态性


因此,如果你能用OO将程序重构得更加优雅,那就去做吧。如果它发展成为具有自然进化的OO范式,那么就遵循最佳实践,顺其自然。但是,不要只是尝试与流行语兼容。

这取决于您希望在项目中完成什么。如果不使用C++的OO特性,那么就没有好的理由去改变,然后继续前进。另一方面,如果您想了解更多关于OOP的知识,并且有时间应用OOP,那么将其重构为更多OO风格将为您提供一个很好的学习机会。

我将遵循使用任何窗口管理器的最佳实践。大多数使用OO样式,当您遵循其使用模式时,您将自动继承(!)

您需要考虑两件事:成本/收益分析和机会成本

将代码更改为OO的成本是多少?好处是什么?如果后者大于前者,那么我倾向于改变它

成本包括传统成本,如花费的时间、金钱等。好处包括更干净的实现,使将来的维护更容易。其他任何成本和收益都取决于你自己的情况

但有一件事经常被忽视,那就是机会成本。这是一个成本,应该考虑到你的分析。这是一个经济术语,意思是失去的机会

换言之,如果您确实转换了代码,那么您的成本包括您在这段时间内无法做其他事情


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

有趣的一点。如果将代码改为OO,我的代码看起来会更漂亮,但我不会获得太多的功能。功能不是一切,代码的漂亮也无关紧要。代码的可维护性是相关的,漂亮的代码可能更易于维护,但这并不总是一个给定的条件。