【问题标题】:How to use class variables?如何使用类变量?
【发布时间】:2018-12-09 22:33:54
【问题描述】:

一个简单的问题。如果我的类 A 带有方法 m1m2m1 改变 A 的状态是否是一个好习惯。然后当 m2 被调用时,它依赖于 A 的状态被 m1 改变。换句话说,如果 m2 依赖于 m1m2 被调用之前被调用。 m1m2 都是私有的。措辞不同的是可以吗?私有方法将对象状态视为共享内存?当它们被无序调用时就会出现问题。但好处是不必复制论点。有什么建议吗?

【问题讨论】:

    标签: class oop methods state private


    【解决方案1】:

    你的描述不是一个好的设计。

    类变量应该具有在任何(和所有)方法调用之前和之后都为真的类不变量。调用的顺序应该无关紧要。您描述它的方式听起来会在某些情况下不正确,例如如果尚未调用 m1m2 是。

    此外,在设计方面,类应该封装(隐藏)内部依赖项。例如,消费类服务(方法)的人不应该关心调用的顺序。

    我的建议是,您将声明(明确地作为 cmets)这些不变量,然后推理如何保持它们为真(它们唯一可能为假的情况是在方法调用期间)。这可以帮助您减少对调用顺序的依赖。

    这可能会导致您合并方法中的一些代码或使 m2 成为从 m1 调用但不能在外部调用的辅助函数。

    【讨论】:

    • 很好的答案,但假设它们都是辅助功能,私有的,不能从外部访问,它们是我的其他功能之一的辅助功能。我把它切成薄片,这样函数就不会变得太大。我阅读了将较大的函数分割成更小的部分的建议,这样它们更容易理解,但是如果我必须在将参数从一个函数传递到另一个函数时一直复制它们,我担心它会明显降低性能。但我想这是一种权衡,或多或少取决于一个人试图实现的实际目标。
    • 只要你设计你的方法来做一些本质上是“原子”的事情并不过分,那么更长的方法比两个强制拆分的方法要好。我所说的原子是指在某种程度上是完整的,做得很好,并且以一种完整的方式。从名称和参数中应该可以清楚地看到它的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2022-01-21
    • 2019-02-23
    • 2012-09-29
    • 2018-05-22
    • 2019-08-23
    相关资源
    最近更新 更多