ゲッター/セッターメソッドを使用せずに内部変数$ _fieldsにアクセスできるように誰かがコードを記述した場合、それを説明する適切な用語はありますか?
管理で使用するのに十分な丁寧なもの:)
ゲッター/セッターメソッドを使用せずに内部変数$ _fieldsにアクセスできるように誰かがコードを記述した場合、それを説明する適切な用語はありますか?
管理で使用するのに十分な丁寧なもの:)
回答:
プライベートメンバーを公開することは、礼儀正しい社会では決して良いことではありません...
この習慣は、カプセル化の欠如/不十分です。
private
)には、カプセル化の概念のさらに別の実装があります。
__
、名前のマングリングに実際に使用する必要があります)。他の言語でも、カプセル化が不十分な場合があります。たとえば、Javaでのリフレクションや、C ++でのポインター演算により、プライベート変数にアクセスできます。Pythonは、構文を複雑にしないだけです。
__
名前のマングリングを使用することはほとんどありません。がなくて__
も、デザインは良好なカプセル化を反映しています。「パブリック」が「カプセル化の欠如/不十分なカプセル化」を意味すると主張することは間違っています。コンセプトはまだ存在しています。ソースコードには適切な装飾がありません。
Odedによって既に言及されているカプセル化の欠如に加えて、プログラミング言語とそのパラダイムによっては、「プレーンな古いデータ」である可能性もあります(必ずしもアンチパターンやコードの匂いではありません)。
「特定のコーディング標準に従っていない」と呼ばれています。
OPは書きました:
内部変数$ _fieldsは、getter / setterメソッドを使用せずにアクセスできます
それはあなたの標準に反するかもしれません、そしてそれはそれがコード臭いかもしれません。しかし、それは必ずしも不十分なカプセル化ではありません。ゲッターとセッターを介して内部変数(「内部使用のみ」など)を外部に公開すると、さらに悪くなります。
問題は$_fields
、外部からアクセスできるようにする必要があるかどうかです。
もしそうなら、getter / setterメソッドを追加するケースがあります。これらのメソッドは何もカプセル化しませんが、それ$_fields
はある種の変数であるという事実(その場で計算/フェッチなどされるものとは対照的です)。言語にもよりますが、おそらく型(実装の詳細)を外部に漏らしてしまうでしょう。常にゲッター/セッターが必要かどうか、または「必要」な場合のみコーディング標準の問題。
アクセスできないようにする$_fields
必要がある場合は、アクセスしないでください。他の人が言語レベル(プライベートや友達)でアクセスできないようにする必要があるかどうか(特定の状況でのデバッグが容易になる可能性があります)は、コーディング標準の問題です。
カプセル化の問題はこれと完全に直交しています。ゲッターとセッターを使用すると、カプセル化の違反が完全に可能になります。それもあります簡単にコード一見のベストプラクティスを、次のだ-彼らはゲッターとセッターの束を見たときにほとんどの人々の警鐘を鳴らしていないので、にスリップします。コードは、$_fields
たまたまとして指定されていないと呼ばれる変数よりも、内部の実装の詳細にはるかに多くの依存関係をもたらす可能性がありますprivate
。
私は悪いアナロジーのファンです。不十分なカプセル化は、銃を構えている誰かを殺人者と呼ぶようなものです。
このような変数をパブリックメンバー変数と呼びます。
あなたのセッター/ゲッターメソッドが何もない場合
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
次に、pubic変数を作成するだけで、違いが問題となるいくつかのエッジケース以外の入力を節約できます。