問題タブ [polymorphism]

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 に答える
654 参照

ruby-on-rails - ポリモーフィックな関連付けを使用してレビューを作成する方法

すべてレビューを持つことができる 3 つのモデルがあり、各レビューはユーザーに属している必要があります。ポリモーフィックな関連付け :as => :reviewable を使用していますが、各モデルのレビューを作成するためのロジックをどこに置くべきかわかりません。各レビューの CRUD は reviews_controller (または他のコントローラーのネストされた属性?) で処理する必要があると思いますが、レビューを各モデルに関連付けるにはどうすればよいですか?

モデル/ビュー/コントローラーの例をGoogleで見つけることができませんでした。おそらく、それは物事を片付けるのに大いに役立つでしょう。

ありがとう、セザール

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

c++ - C++ メンバー関数の仮想オーバーライドとオーバーロードを同時に行う

次のようなコードがある場合:

int から void* への無効な変換を行おうとしているというエラーが表示されます。両方の関数が仮想として宣言されているため、コンパイラは B::f を呼び出さなければならないことを理解できないのはなぜですか?


ジャルフの答えを読んだ後、私はそれをさらに減らしました。これもうまくいきません。あまり直感的ではありません。

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

java - スーパークラスのメソッドのオーバーロード

RTSゲーム用のAIを構築しています。(Spring RTSエンジンの場合、誰かが興味を持っている場合。)私が設定した方法は、主に、発生したイベントによって通信するコンポーネントのコレクションで構成されています。すべてのコンポーネントには、他のコンポーネントによって発生したイベントを受け取るメソッドhandleEvent(Event)があります。

イベントはインターフェースです。階層が存在し、各サブクラスは、それらが表すイベントに関するより詳細な情報を提供します。これらの情報には、そのクラスに固有のgetterメソッドを使用してアクセスできます。例として、クラスUnitGainedEventはEventインターフェースを実装します。このクラスには、サブクラスUnitFinishedEventがあります(興味のある人のために、ユニットまたは建物の建設が完了したことを示します)。

すべてのコンポーネントがすべてのイベントに関心があるわけではないので、コンポーネントが関心のあるイベントを選択し、それらだけを受け取るようにします。また、可能なイベントのセットは拡張可能であるため、コンポーネントにイベントタイプごとに指定されたメソッドを持たせることは有効なオプションではありません。当初、ビジターパターンはこの問題に役立つかもしれないと思っていましたが、固定されたイベントタイプのセットも必要なため、失敗します。(パターンが正しく理解されているかどうかは100%わかりません。間違っている場合は修正してください。)

これまでのところ、私が見つけた唯一の解決策は、各コンポーネントのhandleEvent(Event)メソッドを次のように実装することです。

ただし、特定のイベントクラスにイベントをキャストする必要はありません。ここで、メソッドのオーバーロードを使用して、パラメーターの実行時型に応じてさまざまなメソッドを呼び出すことができることを思い出して、シンプルでエレガントな素晴らしいソリューションをすぐに思いつきました。handleEvent(の空の実装で基本クラスを作成できました。イベント)、たとえば、メソッドhandleEvent(UnitGainedEvent unitGainedEvent)を作成することにより、サブクラスに関心のあるイベントを受信させるだけです。それが機能することを確認したいので、簡単なテストケースを設定しました。

そして、私の非常に満足のいくように、このコードは実際に「HandlingUnitGainedEvent」を出力します。そこで、実装に着手しました。

私のComponent基本クラスは次のようになります:(実際にはそうではありません。これは、私が示したい問題に関係のないすべてのものを取り除いたComponentクラスです。)

そして、これはサブクラスの例です:

セットアップをテストするために、次のメインクラスを使用します。

だから私はコードを実行しました、そして私の大きな驚きに、結果はきちんと印刷された「処理イベント」です。興味深いことに、コンポーネント変数のタイプをSomeComponentに変更すると、「HandlingUnitGainedEvent」が出力されます。何らかの理由で、システムは、SomeComponentのhandleEvent(UnitGainedEvent)をオーバーロードする代わりに、ComponentクラスのhandleEvent(Event)メソッドを盲目的に呼び出します。(この背後にあるSunの推論を聞くことに興味がありますが、それは私の質問にはあまり関係がないと思いました。少数の人々がそれを非常に便利な機能だと思うからといって、彼らがそれを修正するわけではありません。)

ネットを精査すると、他の人も同じ問題に遭遇したことがわかります。私が見つけたわずかな量の情報からすると、非常に少数の人ですが、それでも、一般的なメソッドのオーバーロードとオーバーライドに関する情報は、私が知りたいと思っていたよりも多く見つかりました。しかし、結局、私は解決策を見つけることができません。

さて、私の(かなり明白な)質問は、この問題を回避する方法はありますか?それができない場合、誰かが同じように便利な別の解決策を考えたり、見つけたりするのを手伝ってくれるでしょうか?

編集:たった10分で答えがあるなんて信じられません。嬉しい驚きです。:)ただし、これまでの回答のほとんどは、考えられるイベントタイプごとに1つの個別のメソッドを作成することを何らかの形で示唆しています。技術的にはこれは可能ですが、誰かが新しいイベントタイプを思い付くたびに、コードに戻って新しいメソッドを追加する必要があります。私が学んだのは、悪いコーディング慣行です。(さらに、私はすでに20以上のイベントタイプを持っており、まだ完了していません。)代わりに、上記のように、キャストを含むソリューションを使用したいと思います。少なくともそうすれば、未知のイベントタイプが単に無視されることを保証でき、それらを使用したいイベントのみを自由に処理できるようになります。しかし、私は両方の長所を組み合わせたソリューションを本当に望んでいます。キャスティングなし、

よろしくお願いします、Loid Thanead

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

ruby - ポリモーフィック has_many 自己参照

私はいくつかのモデルを持っています (記事、ビデオ、写真)

今、私は related_to 関連付けを作成しようとしています。

記事には、それに関連する他の多くの記事、ビデオ、および写真を含めることができます。ビデオや写真も同様です。

私が試したことは次のとおりです。

モジュール ActsAsRelatable

終わり

class RelatedItem < ActiveRecord::Base 所属先 :source, :polymorphic => true 所属先 :related, :polymorphic => true end

次に、acts_as_relatable を 3 つのモデル (Article、Video、Photo) に追加し、モジュールを ActiveRecord::Base に含めました。

./script/console で試してみると、関連アイテムが追加され、ID が正しく機能しますが、source_type と related_type は常に同じです (related_items が呼び出されたオブジェクト) related_item を他のモデル名にしたいです。

アイデアはありますか?

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

language-agnostic - IEnumerable のようなインターフェイスを使用するか、List<> のような具体的なクラスを使用する必要がありますか?

私は最近、これについて別の場所で私の見解を表明しました* が、さらなる分析に値すると思うので、これを独自の質問として投稿しています。

プログラムでコンテナを作成して渡す必要があるとしましょう。少なくともこの段階では、コンテナの種類と別の種類について強い意見を持っているわけではありませんが、1 つを選びます。議論のために、 List<>を使用するとしましょう。

問題は、C# のIEnumerableなどの高レベルのインターフェイスを受け入れて返すメソッドを作成する方がよいでしょうか? または、選択した特定のコンテナー クラスを受け取って渡すメソッドを作成する必要があります。

決定するためにどのような要素と基準を探す必要がありますか? どちらか一方から恩恵を受けるのは、どのような種類のプログラム作業ですか? コンピュータ言語はあなたの決定に影響しますか? パフォーマンス?プログラムのサイズ?個人的なスタイル?

(それも関係ありますか?)

**(宿題: 見つけてください。ただし、偏見を持たないように、自分の答えを探す前に、ここに答えを投稿してください。)*

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

c# - C#. レガシ コードにポリモーフィズムを追加する

変更できない従来のクラスがあるとします。

そのような署名を持つヘルパーを書きたい:

最初の引数が「オブジェクト」型であることに注意してください。テストコードは次のようになります。

問題は、これらに加えてどのような実装を想像できるかです。

ありがとう!

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

c++ - C++ concept check vs inheritance

What is the relationship between using virtual functions and C++ inheritance mechanisms versus using templates and something like boost concepts?

It seems like there is quite an overlap of what is possible. Namely, it appears to be possible to achieve polymorphic behavior with either approach. So, when does it make sense to favor one over the other?

The reason why I bring this up is because I have a templated container, where the containers themselves have a hierarchical relationship. I would like to write algorithms that use these containers without caring about which specific container it is. Also, some algorithms would benefit from knowing that the template type satisfied certain concepts (Comparable, for example).

So, on one hand, I want containers to behave polymorphicly. On the other, I still have to use concepts if I want to correctly implement some algorithms. What is a junior developer to do?

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

c++ - C++ の純粋仮想デストラクタ

次のように書くのは間違っていますか?

抽象基本クラスの?

少なくともそれは MSVC でコンパイルされます...実行時にクラッシュしますか?

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

c# - 設計上の問題: プレゼンテーション層の if ステートメントを避けて子オブジェクト型の情報を取得する

次のような顧客階層があります。

顧客を取得するときに、編集/変更するプロパティを Web フォームに表示したいと考えています。現在、if ステートメントを使用して子顧客タイプを見つけ、特殊なプロパティを表示しています。プレゼンテーション層で「if」ステートメントを回避できるように、デザインパターン(訪問者?)またはより良い方法はありますか? どのようにしますか?

詳細情報: これは、nHibernate バックエンドを備えた asp.net Web サイトです。各顧客タイプには、ページ上に独自のユーザー コントロールがあり、顧客タイプに応じて自動的にロードしたいと考えています。