如何避免在OOP中“耦合”

时间:2014-12-17 19:02:15

标签: c++ oop

好的,我不确定耦合是否真的描述了我的问题。问题是,我正在创建自己的基于食人魔的3D游戏引擎。我也使用物理库PhysX,但是因为我需要在我的主引擎代码和PhysX之间创建一个抽象层 - 所以万一我们可以使用另一个物理引擎 - 我决定创建一个包装器,Quantum。

  • 所以食人魔有一个实体类来控制屏幕上的实体

  • PhysX还有一个 PxActor 类,其中包含有关PhysX工作中actor位置的信息。

  • 量子包装器将具有 QEntity 类,它将充当引擎和PhysX之间的层

  • 最后,引擎将有一个 Entity 类,至少有两个成员,即食人魔实体对象和量子实体。在每个update()上,它会询问QEntity是什么,并更新食人魔实体位置。

发现问题?一个实体有4个班级?请记住,我们需要访问所有四个实体至少60次/秒!那么数据分区呢?没有真正优化。此外,可能会有更多的类,一个用于AI,一个用于脚本引擎......

1 个答案:

答案 0 :(得分:4)

使用多个类的对象在多个上下文中表示相同的事物本身并不是一件坏事。实际上,如果您在所有这些上下文中使用了相同的对象,可能会更糟 - 例如,通过一些创造性地使用多重继承。

您的QEntity课程已经为您解耦 - 只要您编程到其界面,并且不允许特定于PhysX&#34的课程突然出现"从QEntity * 的界面,你很好。

看起来您的项目在" bridge"中引入了耦合。类,它正是它所属的位置。只要你把它放在那里,你的设计就不会有耦合问题。

至于60 FPS,在设计阶段不要太担心它。只要依赖虚函数没有冗长的责任链,您的编译器就应该能够为您做好优化。

例如,

* QEntity不应该接受参数或返回特定于PhysX的对象,除非在创建"的构造函数中。包装"