問題タブ [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.
polymorphism - C ライクな言語での戻り型のポリモーフィズム
戻り値の型にポリモーフィズムを持つ callable を許可する C に似た言語が見られないのはなぜですか? 追加の型推論がどのようにハードルになるかはわかりましたが、本格的な型推論システム (さまざまなレベルの「作業」で機能する) を備えた言語がたくさんあります。
編集:戻り値の型のポリモーフィズムとは、戻り値の型でのみ関数シグネチャをオーバーロードすることを意味します。たとえば、C++ と Java では、戻り値の型ではなく、仮パラメーターの型でのみオーバーロードが許可されます。
linq - LinQ ORM データ オブジェクトと継承
これを行う方法を考えていますが、データベース、記事、NewsItems などにいくつかの異なる形のデータがあります。
それらにはすべて共通点があり、ID があります (DB では、ArticleID、NewsID などの名前が付けられています)。
彼らはすべてタイトルを持っています
それらはすべてBodyTextを持っています。
それらはすべてステータスを持っています
それらはすべてDateAddedを持っています
私がやりたいのは、標準クラスの継承です。
次のようなフィールドを持つコンテンツと呼ばれるマスター クラス (データベースにこれを書き込む必要はありません) が必要です。
- ID
- 題名
- 字幕
- 本文
- 状態
- 追加日
ORMでこれを行う方法がわかりません。これが必要な理由は、コンテンツのリストをレンダリングを担当する UserControl に渡すことができるからです。すべてのオブジェクトに共通の情報のみが必要です。
これは可能ですか?
ruby-on-rails - Rails Associations、habtm? 多形?両方?
私の Rails アプリには、Projects、BlogPosts、Images の 3 つのモデルがあります。プロジェクトとブログ投稿には多くのリンクされた画像を含めることができ、画像はプロジェクト、ブログ投稿、またはその両方にリンクできます。
Railsでこれを機能させるために関連付けを設定する最良の方法は何ですか?
c++ - パラメータを持つ非純粋仮想関数は悪い習慣ですか?
オプションの仮想関数を持つ基本クラスがあります
これをコンパイルすると、未使用のパラメーター x に関する警告が表示されます。仮想機能を実装する必要がある他の方法はありますか? 私は次のように書き直しました。
注意しないと、作成したサブクラスが間違った関数を実装する可能性があり、オーバーロードのために気付かないという問題もあります。
「int y」パラメーターを使用して派生関数を実装したため、基本クラスのメソッドが呼び出されましたが、これに関する警告はありません。これらは C++ でよくある落とし穴ですか、それとも仮想関数を誤解していますか?
php - 静的ファクトリ パターンを使用するときに PHP ライブラリを含める最良の方法は何ですか?
私の PHP ライブラリには、いくつかの静的ファクトリ パターンがあります。ただし、メモリ フットプリントが手に負えなくなってきており、実行時に必要なファイルの数を減らしたいと考えています。以下は、現在の状況の例です。
Car.php と Truck.php のどちらか一方のみが必要な場合でも、含める必要があるため、これは望ましくありません。私の知る限り、require/include とその ..._once バリエーションには、呼び出しと同じスコープのライブラリが含まれています。これは本当ですか?
もしそうなら、これはメモリリークにつながると思います:
2 番目の例では、require_once フレーバーが使用されていても、呼び出しのスコープのために、Create() への複数の呼び出しが複数の require につながるように見えます。
これは本当ですか?これらの例でライブラリをphpに動的に含める最良の方法は何ですか?
ありがとう!
c# - 継承によるリターン署名の変更 – ポリモーフィズム
次のことを行う方法があるかどうか疑問に思っています。
乾杯アンソニー
java - Java で、派生クラスのオーバーライド メソッドから基本クラスのメソッドを呼び出すにはどうすればよいですか?
次のように、別のクラス A を拡張する B という 2 つの Java クラスがあります。
A.myMethod()
fromを呼び出したいと思いB.myMethod()
ます。私はC++ の世界から来ましたが、この基本的なことを Java で行う方法がわかりません。
map - OCaml には一般的な map()/reduce() 関数がありますか?
Python map() では、シーケンス プロトコルに従うすべてのデータに対して機能します。文字列、リスト、またはタプルのいずれをフィードしても、正しいこと^TMを実行します。
私のケーキも OCaml に入れられませんか? 使用しているコレクション型を調べて、対応する List.map または Array.map または Buffer.map または String.map を見つける以外に、本当に他に選択肢はないのでしょうか? これらのいくつかは存在さえしません!私が求めているのは異常ですか?私は何かが欠けているに違いない。
c++ - 削除は基本クラスへのポインタで機能しますか?
newによって返されたのと同じポインタを渡す必要がありますか、それともクラスの基本型の1つへのポインタを渡すことができますか?例えば:
もちろん、これは大幅に簡略化されています。私が本当にやりたいのは、boost :: shared_ptrでいっぱいのコンテナーを作成し、それをコードに渡して、終了時にコンテナーから削除することです。このコードは、BarまたはBaseの実装について何も知らず、shared_ptrデストラクタの暗黙の削除演算子に依存して正しいことを行います。
これはおそらく機能しますか?ポインタが同じアドレスを持たないので、私の直感はノーと言います。一方、dynamic_cast <Bar *>は機能するはずなので、コンパイラはそれを理解するのに十分な情報をどこかに格納しています。
助けてくれてありがとう、答えてコメントしてくれたみんな。私の例に示されているように、仮想デストラクタの重要性はすでに知っていました。答えを見た後、私はそれを少し考えました、そして仮想デストラクタの全体の理由がこの正確なシナリオであることに気づきました。したがって、それは機能しなければなりませんでした。ポインタを元に戻すための目に見える手段がないことに私は投げ込まれました。もう少し考えてみると、目に見えない手段があると私は信じました。そして、デストラクタが削除から解放への真のポインタを返していると理論付けました。Microsoft VC ++からコンパイルされたコードを調査すると、〜Baseでこの行を見たときに、私の疑いが確認されました。
アセンブラをトレースすると、これが削除関数に渡されているポインタであることがわかりました。謎が解けた。
I've fixed the example to add the virtual destructor to IFoo, it was a simple oversight. Thanks again to everyone who pointed it out.
java - ポリモーフィック ファクトリ / Java の getInstance()
それぞれが一意の識別子を持つ一連のオブジェクトを作成することを目指しています。その識別子を持つオブジェクトが既に存在する場合は、既存のオブジェクトを使用したいと考えています。それ以外の場合は、新しいものを作成したいと思います。ここでは汚い言葉だとわかっているので、シングルトンという言葉を使用しないようにしています...
ファクトリメソッドを使用できます:
または、別の MyClassFactory メソッドを持つこともできます。
しかし、私は MyClass をサブクラス化するつもりでした:
これ以上何もせず、MySubClass.getInstance() を呼び出すと:
... その場合、subclassObj は MySubClass ではなく、プレーンな MyClass になります。
それでも、すべてのサブクラスで getInstance() をオーバーライドするのはハックに思えます。
私が見逃しているきちんとした解決策はありますか?
それが質問の一般化されたバージョンです。回答者がそれらを求めたので、より具体的に。
このプログラムは、ソフトウェアを表すノード間の依存関係の有向グラフを生成するためのものです。サブクラスには、Java プログラム、Web サービス、ストアド SQL プロシージャ、メッセージ駆動型トリガーなどが含まれます。
したがって、各クラスはこのネットワークの「要素」であり、他のノードとの依存関係をナビゲートおよび変更するためのメソッドがあります。サブクラス間の違いはpopulate()
、適切なソースからオブジェクトをセットアップするために使用されるメソッドの実装です。
「login.java」という名前のノードが、「checkpasswd.sqlpl」に依存していることを学習したとします。
問題は、この時点で checkpasswd.sqlpl オブジェクトが存在する場合と存在しない場合があることです。