Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何使用类变量?_Class_Oop_Methods_State_Private - Fatal编程技术网

Class 如何使用类变量?

Class 如何使用类变量?,class,oop,methods,state,private,Class,Oop,Methods,State,Private,一个简单的问题。如果我有类A,方法是m1和m2。m1更改a的状态是否是一种良好的做法。然后当调用m2时,它依赖于A的状态被m1改变。换句话说,如果m2依赖于在调用m2之前调用m1。m1和m2都是私有的。不同的说法是,私有方法将对象状态视为共享内存是可行的吗?当它们被称为无序时,问题就出现了。但好处是不必复制参数。有什么建议吗 你的描述不是一个好的设计 类变量应该具有在任何(和所有)方法调用之前和之后都为真的类不变量。通话顺序应该无关紧要。您描述它的方式听起来似乎是,在某些情况下,这是不正确的,例

一个简单的问题。如果我有类A,方法是m1m2m1更改a的状态是否是一种良好的做法。然后当调用m2时,它依赖于A的状态被m1改变。换句话说,如果m2依赖于在调用m2之前调用m1m1m2都是私有的。不同的说法是,私有方法将对象状态视为共享内存是可行的吗?当它们被称为无序时,问题就出现了。但好处是不必复制参数。有什么建议吗

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

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

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

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


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

回答得好,但假设它们都是帮助函数,是私有的,不能从外部访问,它们是我的另一个函数的帮助函数。我把它切碎了,这样函数就不会太大了。我阅读了一些建议,将较大的函数分成较小的部分,这样它们更容易理解。但是,如果在将参数从一个函数传递到另一个函数时,我不得不一直复制参数,我担心这会明显降低性能。但我想这是一种权衡,它或多或少取决于一个人试图实现的实际目标。只要你设计的方法在本质上是“原子”的,那么较长的方法就比两种强制拆分的方法好。我所说的原子是指在某种程度上是完整的,做得很好,并且以一种完整的方式。从名称和参数中应该可以清楚地看到它的作用。