代码之家  ›  专栏  ›  技术社区  ›  nWorx

何时使用私有成员-何时作为函数/方法参数传递[关闭]

  •  4
  • nWorx  · 技术社区  · 15 年前

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

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

    你能给我一些简单的提示或提示,这样设计会更好吗?

    7 回复  |  直到 11 年前
        1
  •  17
  •   kgiannakakis    15 年前

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

        2
  •  4
  •   Alberto Gutierrez    15 年前

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

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

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

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

    这辆普通车没有任何理由去记住是用什么钥匙发动的。

    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);
        }
    
        [...]
    }
    
        3
  •  1
  •   Mike Trpcic    15 年前

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

    另外,您应该使用 私人班级成员 ,使用访问器和转换器访问和修改它们。不要让外部代码接触到类的内部。

        4
  •  1
  •   sbi    15 年前

    创建私有数据只是为了避免传递圆形数据,因为函数参数对我来说就像是伪装的全局数据。只有当数据是类的“状态”的一部分时,它才应该是类的一部分(即,它需要在类的“成员函数”调用之间保持)。

        5
  •  0
  •   maxim1000    15 年前

    此实体是否应与对象具有相同的生存期?

    当然,这不是一个严格的crterion,它在所有情况下都给出正确的答案,但它经常工作得很好,而且非常简单…

        6
  •  0
  •   BenMorel Sonaten    11 年前

    我总是把变量传递给函数。您永远不知道什么时候需要在不同的上下文中使用该函数,参数也会改变。

        7
  •  -6
  •   S.Lott    15 年前

    做Python社区所做的。

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

    提示2:隐私通常更容易被授权给 策略 插件(或“注入”)比复杂的私有属性和方法。

    提示3:隐私使单元测试比需要的更复杂。把事情公之于众更容易。

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