問題タブ [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 投票する
8 に答える
10242 参照

c++ - void* ポインターの C++ 代替 (テンプレートではない)

C++ について根本的な誤解があったようです :<

ポリモーフィック コンテナ ソリューションが気に入っています。SO、私の注意を引いてくれてありがとう:)


したがって、比較的一般的なコンテナー タイプのオブジェクトを作成する必要があります。また、ビジネス関連のロジックをカプセル化することもあります。ただし、プリミティブ データ型から複雑なクラスまで、本質的に任意のデータをこのコンテナーに格納する必要があります。

したがって、すぐにテンプレート クラスのアイデアにジャンプして、それで完了します。ただし、C++ ポリモーフィズムとテンプレートがうまく連携しないことに気付きました。作業しなければならない複雑なロジックがあるため、テンプレートまたはポリモーフィズムのいずれかに固執し、両方を実行させて C++ と戦おうとはしません。

最後に、どちらか一方を実行したいので、ポリモーフィズムを優先します。「このコンテナには比較可能な型が含まれています」のような制約を表現する方がはるかに簡単だと思います-la Java。

質問のトピックに連れて行きます: 最も抽象的なのは、「push(void* data) と pop(void* data)」に似たものを持つ「コンテナー」の純粋な仮想インターフェイスを持つことができると想像します、実際にスタックを実装しようとしているわけではありません)。

ただし、トップレベルの void* はあまり好きではありません。言うまでもなく、具体的なコンテナーが処理できるデータの型に制約を追加するたびに、署名が変更されます。

要約: 要素を取得するさまざまな方法を持つ比較的複雑なコンテナーがあります。コンテナに入る要素の制約を変更できるようにしたいと考えています。要素は、複数の種類のコンテナーで動作する必要があります (特定のコンテナーの制約を満たす限り)。

編集:コンテナ自体が多態的である必要があることにも言及する必要があります。これが、テンプレート化された C++ を使用したくない主な理由です。

では、Java 型インターフェースへの愛を捨てて、テンプレートを使用するべきでしょうか? void* を使用して、すべてを静的にキャストする必要がありますか? または、何も宣言しない空のクラス定義「Element」を使用し、それを「Element」階層の最上位クラスとして使用する必要がありますか?

私がスタック オーバーフローを気に入っている理由の 1 つは、回答の多くが、私が考えもしなかった他のアプローチに関する興味深い洞察を提供してくれることです。ですから、あなたの洞察とコメントを事前に感謝します。

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

c# - タイプに基づく条件ロジック

与えられた:

この種のインタラクションを設計するためのより良い方法があることは知っていますが、詳細を説明するには時間がかかりすぎるため、これは不可能です。このパターンは何度も繰り返されるため、条件付きロジックを 1 行だけ使用できる一般的な実装に置き換えたいと考えています。この一般的なメソッド/クラスを実装する簡単な方法はわかりませんが、私の本能はそれが可能であるべきだと教えてくれます。

どんな助けでも大歓迎です。

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

design-patterns - ポリモーフィズム vs 継承 (問題の例)

私はまだデザインパターンに頭を悩ませようとしています.2回目は、パターンの解決策を求めているように見える同じ問題に直面しています.

複数のアカウント タイプを持つアカウント システムがあります。レストラン、ホテル、service_provider、および消費者のアカウント タイプがあります。将来的にはビジネス アカウントの種類が増えると確信しています。もちろん、グローバル管理者アカウントもあります。

そこで気になるのは、アカウント種別の切り替えをどう実装するかということです。例えば。各アカウントには 1 つ以上のプロファイルがありますが、プロファイルはアカウントの種類によって異なります。複数のタイプのアカウント (ポリモーフィズムまたは継承) を処理するには、ここでどのようなクラス関係を使用する必要がありますか?

他のプロファイルが拡張する必要がある抽象的な基本プロファイル クラスが必要なようですが、それを実装する方法がわかりません (たとえば、プロファイル タイプとアカウント タイプの間の結合テーブル?)。

また、ファクトリ パターンを実装する機会のようにも感じますが、どうすればよいかわかりません。

アイデアはありますか?

提案されたいくつかの例を提供するために編集されました:

プロファイルはアカウントの種類によって異なります。たとえば、レストラン タイプのアカウントにはメニューやワイン リストなどがあり、ホテル タイプのアカウントには部屋のタイプやアメニティがあり、消費者タイプのアカウントには個人的な好みがあります。 、母国など

問題は、これらの関係を最もよく実装する設計パターンは何かということでした。

それがより明確であることを願っています、ありがとう!

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

c++ - C ++コンパイラは、呼び出す仮想関数の実装をどのように認識しますか?

http://www.cplusplus.com/doc/tutorial/polymorphism.html(読みやすくするために編集)のポリモーフィズムの例を次に示します。

私の質問は、コンパイラがppoly1がRectangleであり、ppoly2がTriangleであることをどのように認識して、正しいarea()関数を呼び出すことができるかということです。「Polygon*ppoly1 =▭」の行を見て、rectが長方形であることを知ることでそれを見つけることができますが、それはすべての場合に機能するとは限りません。このようなことをした場合はどうなりますか?

そのランダムなメモリ領域へのアクセスが許可されていると仮定します。

これをテストしますが、現在使用しているコンピューターではテストできません。

(私は明らかな何かを見逃していないことを願っています...)

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

xsd - XSD とポリモーフィズム

私はこの質問を少し繰り返していますが、間違って尋ねられたのは初めてです。

私はこれを持っています:

したがって、基本的に、オプションの内部クラスを持つクラス A があり、クラス B はクラス A から継承し、B.options を A.options から継承して、Web サービスを実行するときに a のみを渡す必要があり、getOptions を呼び出すときに返されるようにします。正しいオブジェクト B.options. 現在、xsd の状態では、異なるタイプの名前オプションを持つ複数の要素がモデル グループに表示されるというエラーが表示されます。エラーは B タイプにあります。

0 投票する
24 に答える
25519 参照

language-agnostic - ポリモーフィズムをできるだけ簡単に説明してください

ポリモーフィズムをわかりやすく説明するにはどうすればよいでしょうか。

型ポリモーフィズムのように、インターネットや本で主題に関する多くの情報を見つけることができます。しかし、できる限りシンプルにするようにしましょう。

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

c++ - std::for_each の多相ファンクタ

コード全体でテンプレートを増殖させることなく、stl アルゴリズム for_each を使用しようとしています。std::for_each は MyFunctor クラスを値でインスタンス化したいと考えていますが、抽象化されているためできません。ポインターを渡し、必要に応じて参照解除するファンクター アダプター クラスを作成しました。

私の質問:

STL または Boost には既にそのようなアダプター クラスがありますか? 車輪を再発明する必要はありません。

乾杯、

デイブ

0 投票する
12 に答える
13494 参照

c++ - ポリモーフィズムまたは条件文は、より良い設計を促進しますか?

私は最近、よりテスト可能なコードを書くためのガイドラインについて、グーグルテストブログでこのエントリに出くわしました。私はこの時点まで著者に同意していました:

条件文よりもポリモーフィズムを優先する:switchステートメントが表示された場合は、ポリモーフィズムを考える必要があります。クラスの多くの場所で同じ条件が繰り返されている場合は、ポリモーフィズムをもう一度考える必要があります。ポリモーフィズムは、複雑なクラスをいくつかのより小さな単純なクラスに分割します。これらのクラスは、コードのどの部分が関連していて、一緒に実行されるかを明確に定義します。単純な/小さいクラスの方がテストが簡単なので、これはテストに役立ちます。

頭を包むことはできません。RTTI(または場合によってはDIY-RTTI)の代わりにポリモーフィズムを使用することは理解できますが、それは実稼働コードで実際に効果的に使用されているとは想像できないほど広いステートメントのようです。むしろ、コードを数十の個別のクラスに分割するよりも、switchステートメントを持つメソッドにテストケースを追加する方が簡単だと思います。

また、ポリモーフィズムは他のあらゆる種類の微妙なバグや設計上の問題を引き起こす可能性があるという印象を受けていたので、ここでのトレードオフに価値があるかどうかを知りたいと思います。誰かがこのテストガイドラインの意味を正確に説明できますか?

0 投票する
11 に答える
46004 参照

python - Python のプロパティと継承

サブクラスで上書きしたいプロパティ(getメソッド)を持つ基本クラスがあります。私の最初の考えは次のようなものでした:

これは機能しません (サブクラス bar.age は 11 を返します)。機能するラムダ式を使用したソリューションを見つけました:

これは、プロパティを使用してサブクラスで上書きするための正しい解決策ですか、それともこれを行うための他の推奨される方法はありますか?

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

java - JAX-RPC Web サービスのポリモーフィズム

複雑なポリモーフィック値を返す必要がある JAX-RPC (Java) Web サービスがあります。より具体的には、クラス構造は次のようになります。

私の Web サービスには、クイズを返すメソッドがあります。もちろん、クイズには、質問とセクションが含まれている可能性があり、質問と他のセクションが含まれている可能性があります。ただし、WSDL を生成すると、Child と Quiz だけが入ります。Web サービスを呼び出すと、適切な数の子を持つ Quiz 要素が返されますが、それらはすべて Child 要素であり、すべて空です。 .

XMLを文字列として返すだけでなく、これを機能させる良い方法はありますか?

誰かが尋ねる前に、私の手に負えない状況のため、私は JAX-WS を使用できません。