我正在使用OOP来编写具有不同类型角色的小型游戏(例如平台游戏,射击游戏)。我通常尝试将功能分散到易于管理的简单类中(例如,Environment
类将对其所有Inhabitants
执行常见的物理计算,因此他们不必担心这一点。但是,似乎我越是重构这些程序以符合OOP原则,我的角色对象就越重。由于它们是具有重要数据的人,因此他们使用自己的数据来执行自身的功能。这使他们与他们的领域之外的事物分离,但使他们的课程似乎成长和成长。我完全可以将这些字符类分解为更易于管理的组件,但我担心屏幕上有很多对象会从具有大量方法的类中实例化,这会导致游戏运行缓慢。
1)对象上的实例方法数量是否直接影响其运行时性能?
2)如果我最终使用重字符对象,我是否正确使用OOP?
答案 0 :(得分:1)
不,它不是您在对象中使用的方法,而是您使用它们会增加运行时成本的方法。当然,这是一个限制,但使用当前的硬件,你可以完全忘记它。然而,从设计的角度来看,超越一两个班级成员往往是个问题。拆分对象不需要产生任何重大成本,您可以内联所有的getter和setter,并通过指针和引用传递值。编译器可以将你的所有设计决策弄平,大多数来自“重”类的代码等同于来自小类星座的代码
在这种情况下,正确地完全取决于开发代码的人的品味。处理器不关心您做出的软件工程设计决策。如果你不想让你的物品包罗万象,那么你觉得这样做是正确的。可能有些事情对你来说感觉不对,那时候你可能会分开。
答案 1 :(得分:1)
对于基于角色的游戏,角色拥有大量相关数据是完全合理的。效率很少受到表示为单个“平面”原始对象集合或几个大型对象的树状集合的影响,每个对象(递归地)具有许多较小的组成部分。
对于影响性能的方法数量:方法的数量会影响缓存利用率,特别是如果你有(例如)许多极小的方法,并且大量使用的方法或多或少地与较少使用的方法交错,因此,最终会有大量缓存空间用于较少使用的方法,因为它们恰好位于相同的缓存行中,并且使用了更多的东西。方法会影响这一点主要是因为编译器通常会在内存中安排相同类的方法彼此接近,因此共享缓存行变得更加常见。但是,至少在典型的实现中,调用方法将是O(1),因此方法的数量不会直接影响速度。