問題タブ [encapsulation]

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.

0 投票する
4 に答える
763 参照

ioc-container - IoCコンテナをカプセル化する必要がありますか?

IoCコンテナをカプセル化するために余分な労力を費やすことが理にかなっているかどうかを判断しようとしています。経験によれば、アプリとサードパーティコンポーネントの間にカプセル化のレイヤーを配置する必要があります。これがやり過ぎに隣接しているかどうかはわかりません。

コンテナを切り替えたいと思う状況が思い浮かびます。たとえば、現在のコンテナのメンテナンスが中止されたり、別のコンテナの方が軽量でパフォーマンスが高く、ニーズに合っていることが証明されています。これが発生した場合、私は潜在的に多くの再配線を行う必要があります。

明確にするために、私はタイプの登録解決のカプセル化を検討しています。解決策をカプセル化するのは簡単だと思います。ヘルパー/utilクラスをコンテナに委任するのが一般的な方法だと思います。

編集:

型の安全性、コンパイル時のチェック、およびリファクタリング性のために、プログラムで型を接続することを好むことが前提です。私が自分自身を保護しようとしているのは、このコードとコンテナーへの依存関係です。

同じ関係を共有する他のいくつかのプロジェクトにもIoCコンテナーを使用していますが、コンテナーを操作するのは面倒なので、変更したいと思います。ただし、変更すると、登録コードの再利用性が失われます。したがって、なぜ私はカプセル化を考えているのですか。それは大きな負担ではありませんが、それでも私が軽減したいものです。

私が探しているのは:

  • コンテナ/コンテナのバージョンの変更による影響を最小限に抑える
  • 異なるコンテナを使用する可能性のあるプロジェクト全体で、ある程度のタイプ登録の一貫性を提供します
  • 私にとって意味のあるインターフェースメソッドを提供します(RegisterType <T、T>(SomeLifetimeProvider)ではなくRegisterSingleton <T、T>-例としてUnityを使用)。
  • 条件/スケーラビリティ要件の変化に応じてコンテナを拡張します。たとえば、解決/登録中にキャッシュやロギングなどを追加します。
  • タイプマッピングを登録するための独自のモデルを提供します。
    • アセンブリ/パッケージにRegistrationHandlerオブジェクトの束を作成したいとします。そうすれば、登録の責任を複数のクラスに簡単に分離し、他の場所でコードを変更することなく、これらのハンドラーを自動的に取得できます。

これは少し主観的なことだと思いますので、賛否両論が役立つかもしれません

ありがとう!

0 投票する
6 に答える
373 参照

c++ - std::set を適切にカプセル化する方法は?

メンバとして std::set を持つ Particle という名前のクラスがあります。クラスは次のようになります。

私はセット自体を公開したくないのでgetFirstCell()getNextCell()、特にが存在することに非常に不満を持っています。hasNextCell()私は途中で使用しなければならず++ipc、コンパイラエラーが発生し--ipcたためif((ipc+1) == this->cells.end())、ipc + 1が問題のようです。

セットをカプセル化してアクセスするにはどうすればよいでしょうか? getFirstCell()また、関数を取り除く良い方法はありますか?

前もって感謝します。

編集:私が投稿したコードは、クラス構造の単なる例です。「実際の」クラスには、この質問にとってそれほど重要ではないより多くのセットとその他のデータが含まれています (私は想定しています)。

0 投票する
1 に答える
73 参照

.net - 他のアプリを .Net MDI にカプセル化する

他の Windows アプリを .Net MDI フォームにカプセル化することは可能ですか? これらのアプリのソース コードは利用できません... 私たちが使用する一連のプログラムがありますが、すべてが 1 つのアプリにまとめられていると便利です...

簡単な例としては、電卓ボタンのある .net mdi フォーム アプリが挙げられます。クリックすると、windows calc.exe が mdi 形式で開きます。

0 投票する
2 に答える
116 参照

perl - 変数へのコンテンツのカプセル化

substr($text, 12)変数の結果( )をそれ自体にカプセル化する方法を知りたいのですが$opt(結果を式に置き換えるsubstr($text, 12))、どうすればこれを行うことができますか?

必要に応じて。これが私のコードです:

0 投票する
5 に答える
7287 参照

vba - VBA Me キーワードが独自のモジュール内のプライベート プロシージャにアクセスできないのはなぜですか?

Me キーワードは、独自のクラス モデル内にある場合でも、プライベート プロシージャにアクセスできないことを発見しました。

Class1 で次のコードを取得します。

このコードは、クラスのインスタンスをインスタンス化します。

Me.Messageコンパイル エラー「メソッドまたはデータ メンバーが見つかりません」をスローします。

手順に変更Private Sub Message()すると正常に動作します。PublicDoSomething プロシージャから Me キーワードを削除することもできますが、Me キーワードの背後にある考え方は、Class1 の複数のインスタンスが適切にカプセル化されるようにすることであるという印象を受けました。

プライベートな場合、VBA Me キーワードが独自のモジュール内のプロシージャにアクセスできないのはなぜですか? Me キーワードを省略して、クラスでこのようなことをしても安全ですか?

ありがとう!

更新: 適切な構文に関するヒントをありがとう、私のコードは機能しています。Me が独自のモジュールのインスタンスでプライベート プロシージャを参照できる理由の説明をまだ探しています。適切なドキュメントが見つかりませんでした。

0 投票する
3 に答える
897 参照

ruby-on-rails - Ruby on Rails アプリケーションのデータに外部からアクセスするにはどうすればよいですか?

別の Ruby スクリプト内から Rails アプリケーションのデータを操作しようとしています。

このフォーラムの投稿を読みました。データを操作する最善の方法は、データベースを 1 つのアプリケーション内にカプセル化し、そのデータを操作するための API をこのアプリケーションに提供させることです。データベースをいくつかの異なるアプリケーションに統合するのは明らかに悪いからです。

さて、今度は Rails アプリのデータを別のスクリプトで操作したいと思いますが、同じシステム上にあります。どうすればこれを達成できますか?

将来的には、Rails アプリのデータをリモートで操作したいと思うかもしれませんが、スクリプトからも操作したいと思うかもしれません。これにはJSONまたはSOAPが必要になる可能性があると想定していますが、調査する前に知りたいです.

0 投票する
6 に答える
3204 参照

.net - OOPの概念のほとんどは理解していますが、OOPの概念を実装するための明確な図を作成することはできません。なんで?

私は自分自身のプロジェクトのいくつかに取り組んできましたが、不愉快な露出はありません。現在、関数のポリモーフィズムを使用してデータベース関数の共通クラスを作成するなど、オブジェクト指向アプローチを無視して小さなアプリケーションを開発するための単純なアプローチを使用していますが、コンストラクターを少し使用していますが、OOPを使用してプロジェクトロジック全体を実装する方法を実際に考えることはできません。

私は、インターフェース、抽象クラス、封印されたクラス、その他のoopsの概念とは何かを知っており、非常に明確なイメージを念頭に置いています。しかし、問題は、いつ、どのようにOOPを必要な場所に大量に実装する必要があるかということです。

リアルタイムアプリケーションとそのケーススタディを研究する必要がありますか?もしそうなら、私がそれらを読んでそれらを実装することができるいくつかのサイトまたは本/電子書籍を私に紹介してください。

現在、プログラミング中に自分が不完全だと感じています。私はデータベースとそのほとんどのコンポーネントを効率的に実装していますが、OOPを使おうとしている間は子供です。

車などの形のようなOOPを理解させようとする多くの例を読みました。これらすべての種類。彼らは概念を明確にすることを望んでいますが、いくつかのライブプロジェクトに実装するには十分ではありません

0 投票する
3 に答える
551 参照

c - 不透明な構造ベースのCAPIのユニットテスト

不透明な構造に基づいてAPIで作成したライブラリがあります。不透明な構造を使用することには多くの利点があり、私はそれに非常に満足しています。

私のAPIは仕様に関して安定しているので、リリースする前にしっかりとしたベースを確認するために、単体テストの完全なバッテリーを作成したいと思います。

私の懸念は単純ですが、主な目標が内部ロジックを隠すことである不透明な構造に基づいてAPIをどのように単体テストしますか?

たとえば、非常に単純なオブジェクト、非常に単純なテストを含む配列を考えてみましょう。

もちろん、これは配列が実際に1つの値で希望どおりに動作するなど、いくつかの事実をテストしますが、少なくともCで単体テストを作成するときは、通常、データ構造のメモリフットプリントを既知の状態と比較します。

私の例では、配列の内部状態が壊れているかどうかはわかりません。

それをどのように処理しますか?ユニットテストのためだけに実装ファイルにコードを追加することは避けたいと思います。モジュールの緩い結合を強調します。実装にユニットテストを挿入することは、私にはかなり侵襲的であるように思われます。

私が最初に考えたのは、実装ファイルを単体テストに含めて、単体テストをライブラリに静的にリンクすることでした。

例えば:

それはいい考えですか?

もちろん、単体テストはカプセル化の恩恵を受けることはありませんが、実際に機能していることを確認するためにここにあります。

0 投票する
9 に答える
72551 参照

java - Java: サブパッケージの可視性?

プロジェクトに と の 2 つのパッケージがodp.projありodp.proj.testます。これら 2 つのパッケージのクラスだけに表示したい特定のメソッドがあります。これどうやってするの?

編集: Javaにサブパッケージの概念がない場合、これを回避する方法はありますか? テスターとそのパッケージの他のメンバーだけが利用できるようにしたい特定のメソッドがあります。すべてを同じパッケージに入れる必要がありますか? 広範な反射を使用しますか?

0 投票する
7 に答える
570 参照

ruby - オブジェクトプライベート対クラスプライベート

どの OOP 言語にもobject-privateの概念はありますか?? 古典的なプライベートアクセスよりも制限が厳しいということですか?

Private (または class-private) は、クラス自体へのアクセスを制限します。同じクラスの一部であるメソッドのみがプライベート メンバーにアクセスできます。

object-private :オブジェクト自体へのアクセスを制限します。メンバーにアクセスできるメソッド オブジェクトのみが記述できません。

編集 :

存在する場合、いくつかの例を教えていただけますか...そうでない場合、この種の機能を持つことは興味深いと思いますか?? 他のOOP言語でシミュレートすることは可能ですか??

EDIT 2: ありがとう、すべての答えは非常に有益でした...

これまでの暫定的な結論:

インスタンス プライベートの概念は、次の 2 つの言語に存在します。

1 - 何時間もグーグル検索した後の Smalltalk :) この概念の背後にある言語を見つけました !!

オブジェクトが保持する状態は、常にそのオブジェクトに対して非公開です。他のオブジェクトは、要求 (メッセージ) をオブジェクトに送信することによってのみ、その状態を照会または変更できます。

2 - LoganのおかげでRuby :

ある人は、C++ では「プライベート」は「このクラスに対してプライベート」を意味し、Ruby では「このインスタンスに対してプライベート」を意味すると言って、これらの違いをまとめました。つまり、クラス A のコードから C++ では、タイプ A の他のオブジェクトのプライベート メソッドにアクセスできます。Ruby ではできません。オブジェクトのインスタンスのプライベート メソッドにのみアクセスでき、他のインスタンスにはアクセスできません(クラス A の) オブジェクト インスタンス。