OOP是否鼓励良好的缓存,从而获得良好的性能?

时间:2012-02-15 20:03:39

标签: c++ performance oop

我正在使用Ogre3D,因此我使用了几个继承Ogre和OIS类的类来使我的项目运行。

我开始遇到一些问题,因为我经常需要从一个单例中访问变量来告诉另一个变量来执行我想要的操作,所以我有大量的getter / setter使我的项目膨胀

我知道保持数据的可及性对于性能非常重要,而且OOP有点默认鼓励这种做法,因为你在课堂上保留了你需要的变量,但在某些时候它感觉像是一个巨大的限制,我最终做了一些对所有这些构造函数进行了很多初始化,这很可悲。

我的小荒谬游戏永远不会需要那么多资源,Ogre3D使用OOP以便它可以有效地完成工作,它不需要我使用OOP来完成我的游戏。

我正在考虑将所有数据放入不同的结构中以使所有内容公开,而不关心封装。

尽管OOP设计不好,它会对性能产生影响吗?

3 个答案:

答案 0 :(得分:1)

如果你想通过缓存改善你的表现,OOP不是一个显示阻止,但也不是完美的编程范例:它通常会在你的对象中建议可变状态,例如:正如你所提到的,setters简化了构造函数。对于可变状态,对象的可重用性以及缓存变得更加困难。因此,请尝试尽量减少可变性(参见例如Josh Bloch's Effective Java,第15项)。

这就是功能范例更合适的原因。但是你可以在经典的OOP中很好地采用它。现代的OOP语言(例如Scala,C#,C ++ 11)实际上是多范式的,并提供了一般的简单不变性和函数式编程所需的所有功能。

答案 1 :(得分:1)

听起来你需要一个控制器(“我经常需要从一个单例访问变量来告诉另一个变量来做我想做的事情”)。通常,事件会导致需要有关状态信息的操作。

如果您对系统中的参与者,消息和操作有更多想法,您可能会开始将信息分布到代表系统中各个参与者的类中。

没有一种方法,但如果你使用OOP,它确实需要一定的建模工作量。特别是国家和谁知道国家的想法不一定非常适合存储在一个(或多个)巨型单身人士中。

答案 2 :(得分:0)

问题在于使用单身而不是OOP。 OOP是关于数据结构封装的。实际存储数据的方式取决于您,重要的是类提供的接口和服务。单身人士只是穷人的全局变量,假装他们是OOP。

放弃单身,写出更好的OOP,表现会再次上升。