問題タブ [data-hiding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C で実装固有の型と変数を区別する
インターフェイス仕様「X」があるとしましょう。X は、との両方のタイプのメンバーの存在を保証XHeader.h
する struct を呼び出すように呼び出します。ただし、実装定義のメンバーは禁止されているわけではなく、実際にそうすることで効率が向上する場合は推奨されます。私が働いている会社のために X の実装を作成する必要があり、いくつかの状態を保存するために私の実装に固有のいくつかのメンバーを持つことが非常に便利であることに気付いたので、私は次のように書きました:X_Fiddle
foo
bar
int
もちろん、これらは実装固有の詳細であり、将来のある時点で変更または消失する可能性があるため、使用すべきではない、dinky_dingbat
または使用すべきではないことをユーザーに伝えることは何もありません。dingbat_data
不透明なポインターのようなものを使用して実装を隠すことができない場合、そのような内部メンバーを目立たせるにはどうすればよいですか (またはそのようなものを隠すための他のトリック)? このような問題に対処するために一般的に使用される/標準的な方法はありますか? 私が考えることができる最善の方法は、先頭のアンダースコアのような命名規則を使用することですが、先頭のアンダースコアの規則がメンバー変数に適用されるかどうかはわかりません.C++固有の規則にも混乱していると感じています. また、それらに次のような名前を付けるかINTERNAL_dinky_dingbat
、内部に含まれる内部型用に別の構造体を持つことも考えましたX_Fiddle
、しかし、余分な入力を最小限に抑えたいので、やや嫌いです。または、実装固有の詳細がコメントとドキュメントに記載されている、上記のようなプレーンで通常の構造体を使用するだけで完全に受け入れられるのでしょうか。 ?
私がゼロから始めている、および/または私の会社/チームにこの特定のケースに関する慣習がないと仮定します。
coldfusion - 「invokeImplicitAccessor」を cfc で使用すると便利ですか?
ColdFusion 10<cfset THIS.invokeImplicitAccessor = "true">
では、application.cfc で設定することにより、cfc に属する任意のプロパティに直接アクセスできるようになりました。
開発者がこの種の機能を使用する理由がわかりません。
私の質問ですが、これはオブジェクト指向プログラミングのデータ隠蔽の原則に違反していませんか?
c - C のインライン化された Setter および Getter 関数
C++ では、ヘッダー ファイルでインラインで宣言された getter 関数を使用できます。
このヘッダー ファイルをインクルードすることにより、クライアント メソッドと関数は getter 関数を使用してプライベート変数にアクセスできます。
この概念を C 言語でモデル化しようとしています:
hello.h:
こんにちはC:
main.c:
gcc からリンカー エラーが発生します。
インライン関数 (ヘッダー ファイル内) が別の翻訳単位の静的変数にアクセスする方法はありますか?
または、インラインのゲッター関数を実装する方法はありますか?
組み込みプラットフォームで IAR Embedded Workbench、ARM7TDMI プロセッサを使用しています。
gcc コンパイラは、PC 上で概念をテストするために使用されます。
編集 1: 背景
クリティカル セクション内にある getter 呼び出しを最適化しようとしています。目的は、クリティカル セクションで費やされる時間を短縮することです。
編集 2: グローバルなし
当店が使用するコーディング ガイドラインには、グローバル変数はないと記載されています。
また、このシステムは MicroCOSII を実行する RTOS です。
matlab - SVDを使用して変更後に元の画像を再構築する方法
を使用して画像を分解し、svd
行列を追加して特異値を変更しましたA
。この行列を取り戻すにはどうすればよいですかA
。
例えば:
マトリックスA
からマトリックスを取得するにはどうすればよいnew
ですか?
java - インスタンスとメソッドの非表示: ポイントは?
インスタンスとメソッドの非表示の理由と利点、特にスーパークラスメンバーを複製することで得られる利点を誰かが説明できますか? それは、クラスをさらに定義し、それを改善することを目的とする継承に直面していませんか?
c++ - C++ でのデータの隠蔽
このように不完全な構造体を使用する C のコードがあります (簡略化された例):
何か.h
somecode.c
私は基本的にここで C++ をやっているのですが、 C++ で書いてみませんか。問題は (私は C++ の初心者です)、どうすれば C++ で同じことを達成できますか? 不完全なクラスのメンバー関数を追加宣言しようとすると、
クランから。ヘッダーに完全なクラスを記述すると、データを隠すという点がすべて失われ、クラスのプライベート変数を変更すると、「something.h」を含むすべてのファイルが強制的に再コンパイルされますが、ここでは必要ないと思います。この構造体/クラスのサイズを知るために「something.h」を使用するファイルは必要ありません。通常はポインターだけで問題ありません。私はそれが次のようになるべきだと思った:
このようにして、C で書いたのと同じことを、より短く、さらにきれいに書くことができました。この致命的な C コーダーを啓蒙したい C++ コーダーはいますか?
javascript - モジュール化の下でデータを隠すのに役立つ JavaScript 連結子?
以前、JavaScript のモジュール化でデータが隠蔽されるという問題に遭遇しました。以下のリンクを参照してください。
モジュールパターン - 1 つのモジュールのコードを異なる js ファイルに分割する方法は?
問題を説明するには、次の例を参照してください。私の目標は、長い js ファイルを 2 つのファイルに分割することですが、一部の関数はいくつかのプライベート変数にアクセスする必要があります。
first.js:
second.js:
子は親にアクセスできないため、これは機能しません。解決策の 1 つはparentPrivate
公開することですが、私の場合は受け入れられません。
以前の質問の1つに答えた@Louisを引用:
「子供はアクセスできるが、外部のパブリックにはアクセスできない (つまり、保護された) フィールドを持つことはできません。それを達成する方法はありますか?」
モジュール化が必要な場合 (つまり、子を親とは別にコーディングしたい場合)、JavaScript でこれが可能であるとは思えません。子と親を同じクロージャで動作させることは可能ですが、これはモジュール化されません。これは、RequireJS の有無にかかわらず当てはまります。
問題は、親と子が同じクロージャー内にないことです。したがって、ファイルを同じクロージャーに入れるライブラリを作成することは理にかなっていると思いますか?
何かのようなもの:
もちろん、名前空間などを指定するために、より多くの引数を受け取ることができます。これは、RequireJS から得られる機能と同じではないことに注意してください。RequireJS はモジュール化を実現しますが、この連結子はモジュール化の条件下でのデータの隠蔽に焦点を当てています。
では、上記のいずれかが理にかなっていますか? それとも、いくつかの重要なポイントを見逃していますか? どんな考えでも大歓迎です。