私有方法和公共领域一样糟糕吗?

时间:2013-09-06 11:56:09

标签: java oop

请原谅挑衅性问题标题。众所周知,你永远不应该在Java程序中使用公共字段(除了类似结构的类,你应该避免使用它)。但人们谈论硬币的另一面 - 私人方法。

我看到它的方式是:如果你有私有方法,那么你正在编写本地程序代码。具有私有字段的Java类与调用许多私有方法的一些公共方法以及具有全局变量和一些函数的C模块之间基本上没有区别,其中一些函数在其他地方extern编辑(除了你无法实例化C模块的相当大的区别。鉴于很多关心良好Java实践的人都认为你应该尽可能远离程序性的工作,我很惊讶没有更多的指导方针限制私有方法的使用。

请注意,我不想暗示任何人都认为永远不应该使用私有方法(或者它们实际上和公共字段一样糟糕)。但这是我的问题,我尽量使其尽可能客观:

  • 是否有任何标准的Java指南限制私有方法的使用?(标准指南的一个例子是“没有公共字段” - 尽管你可以说这是一个意见问题,它很漂亮非常普遍接受的是不使用公共领域的良好做法)。
  • 如何使用私有方法绕过? (例如,通过声明私有和使用公共get / set方法,可以使用公共字段进行循环。如果我有一个包含大量私有方法的类,我想我应该创建一个新类来保存它们但是,如果我这样做,那么我冒着编写一个从未实例化的Java类的风险,并且行为与C模块完全相同。是否有任何广泛使用的设计模式可以帮助我减少私有方法的数量在我的课程中?

5 个答案:

答案 0 :(得分:9)

  

是否存在限制私有使用的标准Java准则   方法

没有

恰恰相反 - private应该是private。类中的许多private方法绝不是坏习惯(只要类本身不太长)。接口应该只提供外部类可用的方法。私下内部发生的事情是没有人的事。

实际上,有一个简短的public方法和一些私有方法(即使它们没有被重复调用)实际上要好得多,因为它提高了可读性并对一种公共方法进行了高级概述。如果你有一个public方法可以分成多个独立的部分,你可以命名这些部分,然后去做。使用私人方法。

答案 1 :(得分:3)

一般来说,我不认为私有方法是代码中的设计缺陷。当一个人应该做很多计算并且他们被迫编写复杂的长方法时,他们可以将它分成更小的(私有)方法。如果要在类的许多部分(方法)中使用私有方法,则好处更广泛。它不优雅,不建议重复相同的代码。

答案 2 :(得分:2)

  

私有方法和公共字段一样糟糕吗?

没有好的和坏的问题。它严格基于您的项目设计要求。的期。

如果您想要任何仅由定义类使用的函数,并且不应该将其暴露给其他类,您只需将其定义为私有。从另一个角度来看,为什么要公开一种在课堂外无意义的方法,将其公之于众。

答案 3 :(得分:1)

没有。无论如何,private方法设计都不错。它们是很好的设计,原因与你不想要public字段的原因相同。这个原因就是封装。

private方法通过保护代码免于从类外部调用来启用封装。此限制允许您保证对象的状态。

使用private方法并不像程序语言那样。要在OO语言中实现过程语言的效果,可以在static字段上运行static个方法。

public static CUnitEquivilent // Don't do this!
{
   private static int SomeVariableDefinedInCFile;

   public static int SomeVariableDefinedInHeader;

   private static SomeMethodDefinedInCFile(...){...}

   public static SomeMethodDefinedInHeader(...){...}
}

答案 4 :(得分:0)

不,他们为什么要这么糟糕?我们鼓励他们,因为您可以拆分public方法,而不是拥有200行或更多的方法,并在class中重复使用同一批代码。

一个缺点是您无法测试您的private方法,但实际上您不应该这样做。因为它们不打算进行测试。 (public方法是要测试的。)