35

多くの言語の多くの場所でこのデファクト スタンダードを見てきましたが、理解したことがありません。プライベート フィールドとメソッドをクラス宣言の先頭に置くのはなぜでしょうか。比喩的に言えば、私的なものは一番下 (隠れている) に配置し、公開されているものはすべて一番上に配置する必要があるように見えます。そのため、クラスを上から下まで読むと、最初に公開インターフェイスが表示され、次に内部の仕組みが表示されます。

この背後にある理由は何ですか?

編集: 明確にするために、クラスの先頭ですべてのメンバーを宣言するという慣行を意味するのではなく、プライベート メンバー/メソッドをクラス宣言の先頭に配置し、パブリックの前に置きます。

4

11 に答える 11

27

これは、関数と変数を含むすべてを使用する前に宣言しなければならなかった時代に由来します。

内部(プライベート)変数と関数はファイルの一番上にあり、外部(パブリック)関数はファイルの一番下にあります。これは、パブリック関数が内部関数を参照できることを意味しました。再帰がある場合は、プロファイルを宣言して関数を前方参照する必要があります。

言語がコードを複数のファイルにまたがることを許可した場合、プロジェクト内の他のファイル、または実際には他のプロジェクトに含めることができるように、パブリック関数と変数宣言をヘッダーファイルに配置する必要がありました。

于 2009-04-22T21:13:34.710 に答える
5

おそらくCから出てくると思いますが、実用的な機能も果たしています。

掛ける方法を学ぶ前に足し算する方法を学ぶなど、そのような知識が必要な順序で学びたいすべてのこと。

コードの場合、パブリック関数は通常、内部プライベート関数を参照し、プライベート関数はパブリック関数を参照する可能性が低くなります(ただし、重複は確かにあります)。したがって、使用しているプラ​​イベート変数とその使用目的を理解する必要があります。パブリックメソッドがこれらの変数で何をしているのかを理解しようとするときに役立ちます。

このように、プライベートメソッドを呼び出すパブリックメソッドについて読む前に、プライベートメソッドが何をするかを理解することも役立ちます。

概して、C以前の言語に由来するスタイルだと思いますが、機能的には便利であるため、スタイルを切り替えるメリットはありません。

そして、いつものように、信じられないほど説得力のある理由がない限り、一貫性を破ることは決して良い考えではありません。

于 2009-04-22T18:24:47.970 に答える
3

OOPには、データと動作の2つがあります

プライベート メンバーはデータを表し、パブリック メソッドは動作を表します。

行動は、それが表すデータに照らしてのみ考えることができます。そのため、データ要素を一番上に置いておきたいのです。

于 2009-04-22T20:45:41.780 に答える
2

フィールドに関しては、すべてのフィールドをプライベートにするのが一般的です(カプセル化など)。そして、彼らは小さいです。それらは小さいので、それらをすべてまとめることは素晴らしく、そして可能です、そしてクラスのトップはそれらを置くための素晴らしくて安定した場所です。これが歴史的な正当化であるかどうかはわかりませんが、C言語のルーツはおそらくそれをよりよく説明していると思いますが、それが私たちがそれらをそこに保持する理由である可能性があります。

私自身の部分では、あなたが提案する理由から、私はプライベートメソッドを一番下に置く傾向があります。

于 2009-04-22T18:23:09.940 に答える
1

デファクトスタンダードはまずパブリックメソッドだと思いました!少なくともそれが私のクラスの書き方です。メソッドのデータ構造を選択するのに役立ちます。

于 2009-04-22T18:13:29.247 に答える