我正在使用 Ogre3D,所以我使用了几个继承 Ogre 和 OIS 类的类来运行我的项目。
我开始遇到一些问题,因为我经常需要从一个单例访问变量以告诉另一个单例做我想做的事,所以我有大量的 getters/setters 使我的项目膨胀.
我知道保持数据触手可及对于性能很重要,OOP 默认情况下鼓励这种做法,因为您将需要的变量保存在类中,但在某些时候它感觉像是一个巨大的限制,我最终做了一些使用所有这些构造函数进行大量初始化,这很可悲。
我的小荒谬游戏永远不需要那么多资源,Ogre3D 使用 OOP 所以它可以高效地完成它的工作,它不需要我使用 OOP 来做我的游戏。
我正在考虑将所有数据放入不同的结构中以公开所有内容,而不关心封装。
尽管 OOP 设计糟糕,但它会对性能产生影响吗?
最佳答案
如果您想通过缓存提高性能,OOP 不是一个表演障碍,但也不是完美的编程范式:它通常建议对象中的可变状态,例如正如您所提到的,setter 用于简化构造函数。对于可变状态,对象的可重用性以及缓存变得更加困难。因此,尝试最小化可变性(参见例如 Josh Bloch's Effective Java ,第 15 项)。
这就是为什么函数式范式更合适的原因。但是您可以在经典 OOP 中很好地采用它。现代 OOP 语言(例如 Scala、C#、C++11)实际上是多范式的,并提供所有必要的功能,以实现简单的不变性和一般的函数式编程。
关于c++ - OOP 是否鼓励良好的缓存,从而获得良好的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9300467/