4

挑発的な質問タイトルをお許しください。Java プログラムでパブリック フィールドを使用してはならないことはよく知られています (構造体のようなクラスは除きますが、とにかく避けるべきです)。しかし、コインの反対側、つまりプライベートな方法についてはあまり語られません。

私の見方は次のとおりです。プライベート メソッドがある場合は、ローカルで手続き型コードを記述しています。プライベート フィールドといくつかのプライベート メソッドを呼び出すいくつかのパブリック メソッドを含む Java クラスと、グローバル変数といくつかの関数を含む C モジュールの間に本質的な違いはありませんextern。 C モジュールをインスタンス化することはできません)。優れた Java プラクティスに最も関心を持っている多くの人々が、手続き型のわだち掘れからできるだけ離れるべきだと考えていることを考えると、private メソッドの使用を制限するガイドラインがこれ以上ないことに驚いています。

プライベート メソッドは絶対に使用してはならない (または実際にはパブリック フィールドと同じくらい悪い) と誰もが考えているとは言いたくないことに注意してください。しかし、ここに私ができる限り客観的にしようとした私の質問があります:

  • プライベート メソッドの使用を制限する標準の Java ガイドラインはありますか? (標準的なガイドラインの例は「パブリック フィールドを使用しない」です。これは意見の問題であると主張することもできますが、パブリック フィールドを使用しないことをお勧めします)。
  • プライベートメソッドを使用して回避するにはどうすればよいですか? (たとえば、パブリック フィールドをプライベートとして宣言し、パブリックの get/set メソッドを使用することで、パブリック フィールドを使用することができます。多くのプライベート メソッドを含むクラスがある場合、それらを保持する新しいクラスを作成する必要があると思います。 . しかし、そうすると、インスタンス化されず、C モジュールとまったく同じように動作する Java クラスを作成するリスクがあります. クラス内のプライベート メソッドの数を減らすのに役立つ、広く使用されているデザイン パターンはありますか? ? )
4

5 に答える 5

3

一般に、私はプライベート メソッドをコードの設計上の欠陥とは考えていません。多くの計算を行う必要があり、複雑で長いメソッドを書かなければならない場合、それをより小さな (プライベート) メソッドに分割できます。プライベート メソッドがクラスの多くの部分 (メソッド) で使用される場合、利点はより大きくなります。同じコードを繰り返すことはエレガントではなく、お勧めできません。

于 2013-09-06T12:02:46.060 に答える
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(...){...}
}
于 2013-09-06T12:05:14.943 に答える
0

いいえ、なぜ彼らは悪いのですか?メソッドを分割する能力がありpublic、200 行以上のメソッドを持たず、同じコードのバッチをclass.

1 つの欠点は、メソッドをテストできないことですがprivate、実際にはすべきではありません。それらはテストされることを意図していないからです。(publicメソッドはテストするためのものです。)

于 2013-09-06T12:05:14.733 に答える