問題タブ [object-composition]

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 投票する
2 に答える
523 参照

swift - Swift 継承 / オブジェクト構造

以下の複雑なオブジェクト階層を XCode のプレイグラウンドに定義します。

これらのクラスのインスタンスを作成すると、紛らわしい結果が生じます。

その結果、barbazは、親から継承するのではなく、親のインスタンスで構成されるオブジェクトであることがわかります。

これは、XCode がこれらのオブジェクトをレンダリングする方法にすぎないのでしょうか?それとも、それらの構造が私が期待するものではないのでしょうか?

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

c++ - 一意のポインターと const の正確性

このコードがコンパイルされるとは思っていませんでした:

ptrが生の C ポインターであれば、それで問題ありません。しかし、私はスマート ポインターを使用しているため、この背後にある理論的根拠が理解できません。

オブジェクト指向プログラミングでは、これはオブジェクトの構成 (「一部」の関係) と見なすことができます。

例えば:

または:

クラス Car のインスタンスが定数である場合、エンジンも同様に定数であってはならないのはなぜですか? それが共有ポインタであれば、私はそれでまったく問題ありませんでした。

私が望む動作を反映できるスマートポインターはありますか?

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

c++ - unordered_map 値を使用してベクトルへのポインターを初期化中にエラーが発生しました

int キーと type の値を持つマップを含む street_map というクラスがありますvector<edge>。メソッドの 1 つで、値へのポインタを初期化してvector<edge>その内容を取得しようとしています。

vector<edge>* v = &(it->second);はエラーを与えます:

Cannot initialize a variable of type 'vector<edge> *' with an rvalue of type 'const std::__1::vector<edge, std::__1::allocator<edge> > *'

エッジクラスは次のとおりです。

これが const キーワードによるものなのか、const キーワードによるものである場合の修正方法を考えています (const キーワードを保持することになっていますが、他に解決策がない場合はそれを取り除くことができると思います)。

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

python - Python でのオブジェクト構成の switch ステートメント

オブジェクト構成でうまく機能する (Python) スイッチ パターンの設計に問題があります。より具体的には、「entity_id」を引数として取得し(+その他の関連する引数)、オブジェクトとそれに一致するコンポーネントを作成する(おそらく追加の引数を使用して)関数を作成したいと考えています。おもちゃの例はこちら

次のようなものが欲しいです:

for ループと if ステートメントを使用して上記を生成するのは簡単ですが、より良い方法はありますか? 簡単にできるはずです

  1. 新しいタイプのエンティティ (バナナ、爪、サメなど) を追加し、
  2. 新しいコンポーネントを追加します(たとえば、エンティティが食用であるかどうか、および含まれるカロリー数を示す食用です)、

あまりにも多くの場所でコードを変更する必要はありません。コンポーネントは追加の引数を必要とする場合があることに注意してください (関数の入力で与えられます)。

switch ステートメントが辞書に置き換えられているのを見たことがありますが、私の実装 (以下) はひどいものでした。別のコンポーネントを追加するには、すべてのエンティティ関数にコードを追加する必要があります!

また、エレガントな方法で引数をコンポーネントに渡す方法もわかりません。この実装では、追加の引数は機能しません。つまり、リンゴのエンティティ (バッチ) を作成したい場合 (数量 = 5 としましょう)、すべてのタイプのエンティティ関数を変更して、数量引数を受け入れるようにする必要があります (使用しない場合でも)。エンティティが作成された後の数量 (if ステートメントを使用する場合、for loop+if ステートメントを使用する可能性があるため、これは賢明ではありません)。

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

r - R での ReferenceClasses とオブジェクト構成

Rで基本的なオブジェクト構成を行いたいのですが、この単純な問題に直面しています。「ラムダ」と「コンポジション」の 2 つの R5 クラスがあります。
クラス「Composition」には、クラス「Lambda」の属性があります。クラス「コンポジション」を作成できません:".Object$initialize(...) : argument "lambda" is missing, with no default" ラムダが初期化メソッドにデフォルト値を持っている場合は機能します:initialize = function(lambda=1){ しかし、私はそれを望んでいません。

ご協力いただきありがとうございます。

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

c# - MEF 2 でファクトリやそのメソッドをエクスポートするにはどうすればよいですか?

MEF 2 (Microsoft.Composition) を検討しており、既存のコード ベースと統合することを検討しています。

私の現在のコードベースにはIFactory、単純な署名を持つインターフェイスがあります。

Func<T>工場を登録して、工場でエクスポートを行うと、工場のT出力として登録されるようにしたいと考えています。だから、このようなもの:

次のコードを使用して、新しいClassインスタンスとCreateメソッドへの参照を (デリゲートとして) 返します。Func<Class>

私はこの質問を見ましたが、MEF 2には当てはまらないようです。現在、あらゆる種類のものは異なりますが、はるかに軽量/合理化されているようです(宣伝されているように!)。

MEF 2 でやりたいことを達成することは可能ですか?

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

inheritance - ポリモーフィズムが使用できない場合の instanceof の回避

XSDを使用してファイルから生成された複数のクラスがありますXJC. これらのクラスは、ビルド プロセスの一部として自動的に生成されるため、変更できません。クラスは共通の構造を共有しています。これらのクラスを使用する必要があるクライアント コードがあります。ただし、このクライアント ロジックの一部は、すべてのクラスで同じです。したがって、サポートするクラスごとにクライアント コードを複製したくありません。このような場合に頭に浮かぶ一般的な解決策は、インターフェイス/継承を使用して、クライアント コードが特定のクラスではなくスーパー クラス/インターフェイスのみを処理するようにすることです。ただし、この場合、クラスを変更できないため、この解決策は不可能です。したがって、継承の代わりに構成を使用するのが正しい方向だと思います。ただし、合成を使用する場合、合成クラスはすべての特定のクラスを処理する必要があるため、おそらく多くのクラスになります。if (obj instanceof Type)すべてのケースを個別に処理します。

インスタンスがラップされ、instanceof ロジックがクライアント コードではなくラッパー クラス内にあるアプローチを使用することを考えました。

この場合、 の使用はinstanceof必要ですか? はいの場合、推奨されるアプローチは何ですか?


編集:

リフレクションを使用して、多重を回避することもできますinstanceof。与えられた例に従って、getId()メソッドがすべてのクラス ( ABおよびC) で定義されている場合、次のことが可能です。

私は XSD を制御できないことを忘れていました。