1

C++ では、フィールドまたはメソッドのアクセス指定子は、以前に宣言された最初のアクセス指定の下の位置に基づいています。

public:
  int my_public_variable;
private:
  void secretPrivateOperations();
  int internal_counter;

アクセス指定子を各メソッド/フィールドの先頭に追加してアクセスを指定する Java の背後にある設計上の根拠は何ですか?

public int my_public_variable;
private void secretPrivateOperations();
private int internal_counter;
4

2 に答える 2

2

awkspの回答に追加するために、短い例を考えてみましょう。多くの場合、公開したくないプライベート メソッドで実装されたパブリック API メソッドがあります。コードを読みやすくするために、これらのメソッドのコードを互いに近づけたいと思うことがよくあります。そうでない場合は、次のようになります。

public:
    void api1() { 
        do_some_stuff();
        private_method();
        some_other_stuff();
    }

   void api2() {
        do_something();
   }

   int api3() {
        int i = a_computation();
        return i + A_CONSTANT;
   }

private:    
   void private_method() {
        do_clever_stuff();
        api1_implementation_details();
   }

これは読みにくいです。private_methodそれを使用する唯一の方法ではありませんapi1。このコードの公開/非公開の分割は、論理的な意味を持ちません。メソッドの可視性ではなく、ロジックによってコードを整理する必要があります。

私はこれを見るのがとても好きです:

// I can read the whole logic of this method without any clutter
public void api1() { 
   do_some_stuff();
   private_method();
   some_other_stuff();
}

private void private_method() {
   do_clever_stuff();
   api1_implementation_details();
}
// and so on...
于 2015-09-29T22:43:02.620 に答える