何时使用私有成员 - 何时传递为函数/方法参数

时间:2009-08-05 15:19:24

标签: language-agnostic

我经常发现自己在编写一个新类时,我在类中传递了许多私有方法中的参数。另一方面,我也创建了一些私人成员,并在一种方法中使用它们。

所以我的问题是“你在什么规则之后创建一个私有成员,什么时候不这样做,并将变量从私有方法传递给私有方法”?

你能给我一些简单的提示或提示,以便设计变得更好吗?

7 个答案:

答案 0 :(得分:18)

如果参数是类的“状态”的一部分,则使用私有成员。另一方面,如果参数只是一个临时对象,只需将其作为参数传递。

答案 1 :(得分:4)

我同意“如果参数是类的'状态'的一部分,那么使用私有成员”,但这会立即带来一个新问题:当参数被认为是状态的一部分时类吗

为了赞美所说的话,我想补充一下:

如果在调用方法之后我们需要保留值,则参数是类的状态的一部分。

示例1参数不是类的状态的一部分。

Car级别没有任何理由记住用于启动汽车的钥匙。

Class Car{
    Lock lock;        

    [...]

    public boolean startCar (Key keyUsedToStart){
        return (canStartCarWithThisKey (keyUsedToStart));
    }

    private boolean canStartCarWithThisKey (Key keyUsedToStart){
        return (lock.canStartCarWithThisKey(keyUsedToStart));
    }

    [...]
}

示例2参数是类的状态的一部分。

班级汽车需要知道它有多少燃料。

Class Car{
    Fuel fuel;        

    [...]

    public void putSomeFuel (Fuel fuelToAdd){
        this.fuel.add(fuelToAdd);
    }

    [...]
}

答案 2 :(得分:1)

创建私有数据只是为了避免必须传递一个圆形数据作为函数参数看起来像是伪装成全局数据。仅当数据是类的状态的一部分时,数据才应该是类的一部分(即,它需要保持在类的成员函数的调用之间)。

答案 3 :(得分:1)

类应该是自包含的,自我维持的对象。如果正在使用的数据是类的状态的一部分,则应使用内部变量。如果数据仅用于临时计算或其他内容,请将其作为参数传递。

此外,您应该使用私有类成员,使用访问器和更改器来访问和修改它们。不要让外部代码将它交给你班级的内部。

答案 4 :(得分:0)

我总是将变量传递给函数。您永远不知道何时需要在不同的上下文中使用该函数,参数也会发生变化。

答案 5 :(得分:0)

此实体的生命周期是否与对象相同?

当然,这并不是一个严格的标准,它在所有情况下都给出了正确答案,但它经常运作良好而且非常简单......

答案 6 :(得分:-6)

执行Python社区的工作。

提示1:不要在隐私上浪费时间。

提示2:通过委派策略插件(或“注入”)而非复杂的私有属性和方法,隐私通常更容易处理。

技巧3:隐私使单元测试比需要的更复杂。简单地将事情公之于众就更容易了。

提示4:只有在需要通过隐藏算法来保护知识产权的律师管理您的代码时才使用私有。这确实发生了,当它发生时,很明显你必须将事物声明为私有以防止泄露。