我正在为我正在制作的游戏编写一个自定义物理引擎,我的物理对象类有大量变量(距离、速度、加速度、质量、重力、力、脉冲持续时间等)。为每个变量创建setter和getter函数会影响性能吗?(在给定的时间内至少有100个此类实例)
我还应该创建setter和getter吗?我听说公共变量是很糟糕的做法,但是有很多变量,这是个例外吗?
发布于 2017-05-26 13:54:11
为每个变量创建setter和getter函数会影响性能吗?(在给定的时间内至少有100个此类实例)
可能没有。理论上是的,但在实践中,调用额外的函数以获得特定值的成本可以忽略不计。影响性能的唯一方法是,如果您始终调用这些方法(例如,每秒50000次)。
我还应该创建setter和getter吗?
可能没有。良好的OO设计遵循一个名为“告诉,不要问”的指导方针。通常,您应该看到需要这些变量的操作,然后在类中实现这些操作,或者在具有访问权限的类中实现这些操作,或者使用不同的模型(可以考虑访问者模式)。
我听说公共变量是很糟糕的做法,但是有很多变量,这是个例外吗?
拥有公共变量并不是一种糟糕的做法。当您有不变量时,使用公共变量是错误的做法。
例如,如果您有一个度量对象权重的变量,则需要确保不能将其设置为无效值(例如负数,或数量大得离谱)。如果将变量公开,则必须检查在修改该变量的客户端代码中的任何位置设置的值,或者放弃验证该值。
两者都是坏的,因为它们是错误,如果您有一个propper的话,这些错误是不存在的。
简而言之,只有在没有不变量的情况下,才能接受公共变量。
考虑因素:
在这种情况下,getter和setter有时是有意义的(很少),但不是因为类中有变量。
发布于 2017-05-26 13:06:50
为每个变量创建setter和getter函数会影响性能吗?
至于简单的getter/setter函数,它们通常可以由编译器内联,这样就不会对性能产生影响。
我还应该创建setter和getter吗?我听说公共变量是很糟糕的做法
公共变量本身并不是一种糟糕的实践,尽管通常您希望将数据封装到一个类中,特别是如果存在应用于它们的计算。
只提供getter/setter函数的类是无用的,这些类通常可以简单地用所有公共变量替换为struct
。
发布于 2021-04-13 06:03:42
简单地说,公共变量违反了OO设计原则,但是getter setter没有,这就是为什么我们总是需要用户获取和设置
https://stackoverflow.com/questions/44202284
复制相似问题