29

StringTokenizer.java私はクラスを調べていて、頭に浮かんだいくつかの質問がありました。

他のクラスで使用されるパブリックメソッドが、すべての作業を実行するプライベートメソッドを呼び出すことに気づきました。さて、OODの原則の1つは、できる限り多くのことを非公開にし、実装の詳細をすべて隠すことであることを私は知っています。しかし、この背後にある論理を完全に理解しているのかどうかはわかりません。

無効な値がフィールドに格納されないように、フィールドをプライベートにすることが重要であることを理解しています(多くの理由の1つにすぎません)。ただし、プライベートメソッドに関しては、なぜそれらが重要なのかわかりません。

たとえば、StringTokenizerクラスの場合、すべての実装コードをパブリックメソッド内に配置するだけでは不十分でしょうか。これらのメソッドのAPI(つまり、これらのパブリックメソッドを呼び出すルール)は同じままであるため、これらのメソッドを使用するクラスにどのような違いがありますか?プライベートメソッドが役立つ理由を私が考えることができる唯一の理由は、重複したコードを書くのを助けるからです。たとえば、すべてのパブリックメソッドが同じことを行った場合、このタスクを実行し、パブリックメソッドで使用できるプライベートメソッドを宣言できます。

他の質問、パブリックメソッドではなくプライベートメソッドで実装を書くことの利点は何ですか?

ここに小さな例があります:

public class Sum{

    private int sum(int a, int b){
        return a+b;
    }

    public int getSum(int a, int b){
        return sum(a,b);
    }
}

対...

public class Sum{

    public int getSum(int a, int b){
        return a+b;
    }
}

最初のサンプルはどのように有益ですか?

4

7 に答える 7

34

何かを追加するために、プライベートメソッドは常に安全に変更できます。これは、それが自分のクラスからのみ呼び出されることを確実に知っているため、外部クラスはプライベートメソッドを呼び出すことができません(彼らはそれを見ることができません)。

したがって、メソッドにパラメータを安全に追加できる場合でも、プライベートメソッドを変更しても問題がないことを知っているので、プライベートメソッドを持つことは常に良いことです。

ここで、パブリックメソッドについて考えてみましょう。誰でもそのメソッドを呼び出すことができるため、パラメータを追加/削除する場合は、そのメソッドへのすべての呼び出しも変更する必要があります。

于 2011-10-13T03:53:02.330 に答える
2

プライベートメソッドが役立つ理由を私が考えることができる唯一の理由は、重複したコードを書くのを助けるからです。

重複するコード(「Don'tRepeat Yourself」または「DRY」と表現されることが多い)を統合することに加えて、プライベートメソッドを使用すると、コードを構造化して文書化するのにも役立ちます。いくつかのことを行うメソッドを作成していることに気付いた場合は、それをいくつかのプライベートメソッドに分割することを検討してください。そうすることで、各ロジックの入力と出力がより明確になる可能性があります(より細かい粒度で)。さらに、説明的なメソッド名は、コードのドキュメントを補足するのに役立ちます。

于 2011-10-13T03:20:46.783 に答える
1

Javaまたはその他のオブジェクト指向言語でクリーンなコードを作成する場合、一般に、最もクリーンで最も読みやすいコードは、短く簡潔なメソッドで構成されます。多くの場合、メソッド内のロジックを個別のメソッド呼び出しでより適切に表現して、コードをよりクリーンで保守しやすくすることができます。

これを念頭に置いて、単一の目標に向けてタスクを実行する多くのメソッドがある状況を想定できます。複雑な目的が1つしかないクラスを考えてみてください。その単一の目標のエントリポイントには、1つの開始点(1つのパブリックメソッド)だけが必要な場合がありますが、複雑な操作の一部である他の多くのメソッド(多くのプライベート支援メソッド)が必要です。

プライベートメソッドを使用すると、クラス自体の外部からアクセスできないロジックとアクセスできないロジックを非表示にすることができます。

于 2011-10-13T03:42:44.347 に答える
1

パブリックメソッドは通常、そのクラスを実装する他のクラスが使用するコードです。プライベートメソッドは、一般的にクラス外ではそれほど有用ではないか、クラスが達成しようとしている目的を(単独で)提供しません。

選択したIDEを使用していて、クラスAを実装しているとします。クラスAは、ドキュメントの生成など、1つのことだけを実行するように設計されています。当然、ドキュメント生成を行うために必要なクラスAの数学およびバイト操作メソッドがいくつかありますが、クラスAを使用しようとする人は、ドキュメントが必要なだけなので、これらの他のメソッドは必要ありません。したがって、これらのメソッドをプライベートにして、クラスの将来のユーザーが簡単に使用できるようにします。

于 2011-10-13T03:51:39.977 に答える
1

メソッドをプライベートとして宣言する目的は、

  • 実装の詳細を非表示にする
  • メソッドをパブリックAPIとしてリストされないようにします
  • コードの背後にあるロジックが外部で使用/誤用されていないことを確認してください
  • ほとんどの場合、メソッドの実行は、その前に実行されている他のメソッドに依存します。そうすれば、メソッドを使用する正しい順序を確実に制御することもできます。

クラスのコンテキスト外でメソッドを安全に使用する場合を除いて、メソッドにはprivateを使用してください。

于 2016-06-10T02:03:39.607 に答える
0

関数をプライベートにすると、次の場合に利点があります。

  1. 関数をプライベートにすると、JVMコンパイラに関数をインライン化するオプションが与えられ、アプリケーションのパフォーマンスが向上します。
  2. クラスが継承可能であり、子クラスから拡張する場合、関数を子クラスから非表示にする場合は、これを行うことができます(StringTokenizerを拡張できます)。
  3. コードの一部を複数の関数で使用する必要がある場合は、そのコードをプライベートユーティリティメソッドで移動します
于 2011-10-13T03:37:18.110 に答える
0

パブリッククラス内でプライベートメソッドを使用する利点と正当な理由は、セキュリティとバグ防止のためです。プライベートとして宣言されたメソッドは、それらが含まれているクラスからのみアクセスできます。これは、プログラム内の他の場所からプライベートメソッドを誤って呼び出すことができないことを意味し、バグやその他の複雑さを軽減します。メソッドをパブリックとして宣言すると、問題全体からアクセスでき、問題が発生する可能性があります。

プログラムの他の部分に干渉させたくない特定のデータを処理するメソッドがいくつかある場合があります。プライベートメソッドや変数を介したデータカプセル化を使用すると、これを防ぐのに役立ち、コードの追跡と文書化も容易になります。

于 2013-02-05T12:27:44.263 に答える