2010-09-07 159 views
5

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

我有一个main.cpp和几个头为不同的目的。每个头文件基本上是一些相关函数的集合,其中有一些全局变量用来保存数据我也有一个windowing.h来管理窗口。这包含winMain()和winProc()。当事件发生时(比如点击一个按钮)或者它需要信息时(比如'这个窗口有多大?'),它会调用驻留在main.cpp中的函数。这些函数在windowing.h中包含的独立.h文件中声明。

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

欢迎各位反馈,谢谢您花时间阅读本文。

回答

6

不,我认为如果它没有损坏,不要修复它。

任何窗口系统在本质上都是一定程度上的OO。您有一个由OS管理的窗口句柄,您可以对其执行某些操作。无论您使用window->resize()还是resize(window)都不重要。这种语法重排显然没有价值。

但是,随着应用程序的增长,您可能会发现很多窗口大部分是相似的,并且有微妙的差异。最好的实现是附有特殊功能的样板基本功能。要做到这一点的方法是使用基类和多态。

因此,如果您可以通过面向对象来重构该程序以使其更加优雅,那就去做吧。如果它随着自然进化而成长为OO范式,请遵循最佳实践并让它成为现实。但不要试图成为流行语。

1

这取决于你想要完成的项目。如果不使用C++的面向对象特性为您工作,并且没有充分的理由需要改变,那么继续按照您的方式行事。另一方面,如果您想了解更多关于面向对象的知识,并且您有时间去应用它,将其重构为更加面向对象的风格将为您提供一个很好的学习机会。

1

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

2

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

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

成本包括传统成本,如花费时间,花钱等。益处包括更清洁的实施,使未来更容易维护。无论其他成本和收益如何,都取决于你自己的情况。

但有一点经常被忽视的是机会成本。这应该考虑到您的分析的成本。这是一个意味着放弃机会的经济术语。

换句话说,如果你确实转换了你的代码,你的代价就包括你无法在那段时间做其他事情。

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

+0

有趣的一点。我的代码通过将其更改为OO而看起来更漂亮,但我不会获得太多功能。 – 2010-09-07 03:17:30

+1

功能并不是一切,代码的可爱性是无关紧要的。代码的可维护性是相关的,漂亮的代码可能更易于维护,但这并不总是给定的。 – paxdiablo 2010-09-07 03:18:59