問題タブ [abstract-base-class]

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

delphi - 抽象 vs. インターフェイス - Delphi での定義と実装の分離

インターフェイスまたは抽象クラスを使用して、定義と実装を分離するためのより良いアプローチは何ですか?

私は実際には、参照カウントされたオブジェクトを他のオブジェクトと混在させるのは好きではありません。大規模なプロジェクトを維持する場合、これは悪夢になる可能性があると思います。

しかし、2 つ以上のクラス/インターフェイスからクラスを派生させる必要がある場合があります。

あなたの経験は何ですか?

0 投票する
8 に答える
8911 参照

java - 抽象基本クラスとスーパータイプとしての具象クラス

最も優れた本「Head First Design Patterns」を読んだ後、私は同僚にパターンとデザイン原則の利点を広め始めました。私のお気に入りのパターンである戦略パターンの長所を称賛しているときに、私は一時停止する質問をされました。もちろん、戦略は継承と構成を使用します。同僚が「なぜ具象クラスの代わりに抽象基本クラスを使用するのですか?」 .
私は、「サブクラスに抽象メソッドを実装させ、ABC をインスタンス化させないようにする」ことしかできませんでした。しかし、正直なところ、この質問は私を無防備にさせました。

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

python - Python ABC:登録とサブクラス化

(私はpython 2.7を使用しています)pythonのドキュメントには、組み込みのdictにマッピングを渡すことができ、そのマッピングを新しいdictにコピーすることが示されています。

http://docs.python.org/library/stdtypes.html#mapping-types-dict

マッピングABCを実装するクラスがありますが、失敗します。

ただし、私のクラスがcollections.Mappingをサブクラス化する場合は、正常に機能します。

ABCの要点は、登録がサブクラス化と同じように機能することを許可することだと思いました(とにかくisinstanceとissubclassの場合)。では、ここで何が起こっているのでしょうか。

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

python - サブクラスがメソッドを実装する必要があることを通知するためのどの例外ですか?

たとえば、サブクラスによって実装されるいくつかのメソッドを使用して、Pythonで抽象クラスを作成するとします。

f()基本クラスがインスタンス化され、そのメソッドが呼び出されると、self.g()が呼び出されると、サブクラスがメソッドを実装する必要があることを通知する例外がスローされるようにしたいと思いますg()

ここで通常行うことは何ですか?私はそれを上げるNotImplementedError?必要がありますか、それともそれを行うためのより具体的な方法がありますか?

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

c++ - STL リスト - ポインター オブジェクトとしてのデータ型

継承と STL リスト ライブラリの使用に問題があります...

たとえば、2 つの派生クラス (すべての比較演算子が定義されている) を持つ抽象基本クラスがあるとします。リストは次のように宣言されます

Food または Clothing という名前の (抽象基本クラス StoreItem の) 派生クラスを挿入しています。挿入しようとしている新しい StoreItem ポインターを作成します。

今、私はこの新しいアイテムを(順番に)リストに挿入したいと思っています。私の試みは次のとおりです:

私が間違っていることはありますか?また、インベントリから情報を取得するにはどうすればよいですか? (例: コピー コンストラクターを使用した Food tempFruit(**iter))。

前もって感謝します!良い一日を過ごしてください。

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

c++ - C++抽象基本クラスを介して未知の派生クラスでコピーコンストラクターを呼び出す

バイナリ ノード、単項ノード、ターミナル ノードなど、いくつかの異なるノード タイプを持つツリーを作成しています。すべてのノードが継承する ABC があります。次のように、ツリーの再帰的なコピー コンストラクターを作成しようとしています。

私の問題は私ができないことです

gpnode は仮想クラスだからです。私はそれをできた

しかし、u ノードの子が b ノードの場合は機能しません。必要なコピーコンストラクターをインテリジェントに呼び出すにはどうすればよいですか?

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

asp.net - Webコントロール参照をユーザーコントロール基本クラスに渡す

1つ以上の検証コントロールとともに、いくつかのユーザーコントロール(ほとんどが単一のWebコントロール(テキストボックス、ドロップダウン、ラジオボタンなど)を含む)を作成しました。重要なのは、単一のユーザーコントロールで制御と検証を組み合わせることです。

いくつかの一般的な機能を備えたこれらのユーザーコントロールの基本クラスを作成しました。単一のWebコントロールのいくつかのプロパティのセッター、具体的には、ascxのコントロールに設定されるCssClassとStyleです。
たとえば、単一の必須フィールドバリデーターを備えた単一のテキストボックス。

基本クラスのサンプルコード:

派生クラスのサンプルコード:(コンストラクターまたはコントロールのOnInitイベント-または?)

ascxのサンプルコード:

aspxのサンプルコード:

私が見つけた問題は、基本クラスのプロパティセッターが呼び出される前に、派生クラスが基本クラスのWebコントロール参照を設定する方法を見つけることができなかったことです。派生クラスコンストラクターでbase.ctrlを設定した場合、派生クラスコントロール参照(txt)はこの時点ではまだnullです。いずれかのコントロールイベント(OnInitなど)でbase.ctrlを設定した場合、これは遅すぎます。

これまでのところ、基本クラスを使用せず、代わりにユーザーコントロールクラスにプロパティセッターコードを記述することで問題を回避しましたが、これはコードの重複を意味し、回避しようとしていました。

コントロールの基本クラスに、プロパティが設定される前にプロパティを設定するように通知する方法はありますか?または、間違った方法で処理を行っていますか?

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

c++ - 抽象基本クラスの保護されたメンバーをどのように初期化しますか?

おそらく私は何も心配していません。私は、データ メンバーが RAII のイディオムに厳密に従うことを望んでいます。抽象基本クラスの保護されたポインター メンバーを null に初期化するにはどうすればよいですか?

null であることはわかっていますが、それが普遍的に理解されるようにした方がよいのではないでしょうか?

初期化コードを初期化子リストの外に置くと、実行されない可能性があります。このポインターをスタックに割り当てるためのアセンブリ操作の観点から考えると、マルチスレッド環境で (c'tor 本体と同じように) 中断することはできませんか、それともスタック拡張はアトミックであることが保証されていますか? デストラクタの実行が保証されている場合、プロセッサがアトミックに実行しなくても、スタック拡張にはそのような保証がないのでしょうか?

このような単純な質問が、どうしてこれほど広範に及ぶようになったのでしょうか? ありがとう。

すばらしい std:: ライブラリを避けることができれば、私はミニマリストの環境にいます。

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

entity-framework - 1 対多関係の FK に関連するエラー

EF 5 Beta 2 Code-First を使用しています。BrandVehicleという名前の 2 つのエンティティを持つ edmx ファイルを作成しました。

1 つのブランドは 0 個以上 (多数) のビークルを持つことができ、すべてのビークルにはブランド(必須) が必要です。 Vehicleには、 null 不可のBrandIDという名前の外部キーがあります。

また、EF 5 DbContext Generatorを使用して POCO クラスを作成しました。

問題

レコードの読み取りまたは書き込みを試みると、次のエラーが発生します。

エラー 3023: 行 155:Column Vehicle.BrandID から始まるフラグメントのマッピングで問題が発生しました テーブル Vehicle 内にマッピングする必要があります: デフォルト値がなく、null 可能ではありません。

注意: Vehicle が2 つのクラス ( Car & Motorbike ) の派生元である抽象基本クラスであるTPC継承マッピングを使用しています。

クラス定義と関連する流暢な API コードを次に示します。

すべてが問題ないように見え、何度もチェックされているため、これは非常に奇妙です。

どんな考えでも大歓迎です。

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

c++ - 同じ名前であるが、複数の抽象基本クラスのために異なる非共変の戻り型を持つ2つの関数を実装する

同じ名前で異なる非共変の戻り型を持つ純粋仮想関数を定義する2つの抽象クラスがある場合、これらから派生して両方の関数の実装を定義するにはどうすればよいですか?

C :: test()を直接呼び出さない限り、あいまいなものは何もないので、なんとか機能するはずだと思います。正しい表記がまだ見つからなかったと思います。または、もしそうなら、これは不可能ですか:なぜですか?