問題タブ [inheritance]
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.
inheritance - この並列階層を削除する方法
次のシナリオに最適なデザインを見つけようとしています - ダンス競技会の結果を保存するアプリケーションです。
イベントには複数のラウンドが含まれ、各ラウンドには多数のパフォーマンス (ダンスごとに 1 つ) が含まれます。各パフォーマンスは、スコアシートを返す多くの審査員によって審査されます。
ラウンドには、ファイナル ラウンド (6 つ以下のダンス カップルを含む) と通常のラウンド (6 つ以上のダンス カップルを含む) の 2 種類があります。それぞれに、わずかに異なる動作とデータが必要です。
決勝ラウンドの場合、各スコアシートには、最終ショーでジャッジが 1 位、2 位などと付けた 6 カップルの順序付きリストが含まれます。私はこれらの順位を「スコアシートには 6 位が含まれる」と呼びます。順位にはカップル番号とそのカップルの順位が含まれます
通常のラウンドの場合、各スコアシートには順序付けられていない M カップルのセットが含まれます (M < ラウンドに参加するカップルの数 - 競技主催者によって決定される正確な値)。私はこれらのリコールを「M がリコールするスコアシート」と呼んでいます。リコールにはスコアやランキングは含まれません
例えば、ファイナルで
- 1位:カップル56
- 2位:夫婦234
- 3位:夫婦 198
- 4位:カップル98
- 5位:カップル 3
- 6位:カップル125
通常のラウンドの場合 次のカップルがリコールされます 54,67,201,104,187,209,8,56,79,35,167,98
これの私の素朴なバージョンは次のように実装されています
イベント - has_one final_round、has_many ラウンド
final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 順位
ラウンド - has_many パフォーマンス パフォーマンス has_many スコアシート スコアシート has_many リコール
しかし、私はこれが必要とする複製が好きではありません。また、いくつかの並列階層 (ラウンド、パフォーマンス、スコアシート用) があり、維持するのが面倒です。
python - 親クラスのメソッドをデコレートする
メソッドが子クラスの 'classmethod' であるが親クラスのメソッドではない、親クラスのメソッドを持つ子クラスを作成したいと思います。
基本的に、私は次のことを達成しようとしています。
.net - LINQ to SQL IsDiscriminator 列は継承できませんか?
データベースと LINQ To SQL ASP.NET Web アプリケーションを設計しています。
通常ページとルートページの 2 種類のページがあるとします。一部のページはルートです。一部のページはありません。
Page データベース テーブルと RootPage データベース テーブルがあります。
DBML ファイル内で IsRoot 列の IsDiscriminator プロパティを設定すると、RootPage クラスは Page クラスを継承すると思います。
私は自分のコードでこのように動作できるようにしたい:
またはこのように:
LINQ to SQL IsDiscriminator 列を null 許容または false にすることはできますか? これは機能しますか?
java - Javaで単一継承をごまかしますか?
Java で単一継承をごまかして多重継承を実装する方法があると聞きました。これを実装する方法を知っている人はいますか(インターフェイスを使用せずに)?
単なる好奇心から ;-)
oop - 保護された属性は常に禁止されるべきですか?
私はめったに継承を使用しませんが、継承されたクラスのカプセル化を壊すと思うので、使用する場合は保護された属性を使用しません。
保護された属性を使用していますか? 何に使うの?
c# - 継承ツリーを下にキャストすることにより、C# での「ゆるい」タイピング
したがって、私が尋ねたい質問は次のとおりです。
抽象クラス内から継承ツリーを (つまり、より特殊化されたクラスに向かって) キャストすることは許されますか、それとも良いことでしょうか?
さて、それが良いことに使えると私が思う理由の例。
最近、C# でBitTorrent プロトコルから Bencoding を実装しました。データをどのように表現するかという単純な問題です。こうすることにしたのですが、
Bencoded 文字列を必要な構造にデコードするために使用されるなど、いくつかの基本的な機能を提供するabstract BItem
クラスがあります。static BItem Decode(string)
、、、およびの4 つの派生クラスもありBString
、エンコードされる 4 つの異なるデータ型を表します。さて、ここがトリッキーな部分です。また、これらのデータ型の配列のような性質にアクセスできるように、それぞれとアクセサーを持っています。BInteger
BList
BDictionary
BList
BDictionary
this[int]
this[string]
潜在的に恐ろしい部分が今来ています:
さて、あなたは写真を手に入れます... 痛い、それは脳は言うまでもなく、目にも難しいです. そこで、抽象クラスに何か特別なものを導入しました。
これで、古いコードを次のように書き直すことができます。
うわー、さてさて、はるかに読みやすいコードです。しかし、サブクラスの知識を抽象クラスに暗示するために魂の一部を売っただけですか?
編集:いくつかの回答が寄せられたことに応じて、構造が可変であるため、この特定の質問については完全に軌道に乗っていませんtorrent["info"]["files"][0]["length"]
。torrent["announce-list"][0][0]
そこに。ジェネリックは、少なくともこの問題では進むべき道ではありません:(。私がリンクした仕様をクリックしてください。それは4つの小さなドットポイントだけです。
.net - .NET抽象クラス
Webサイトのナビゲーション階層を設計しています。これはノードのツリーです。
ほとんどのノードはページです。一部のノードはリンクです(Windowsのショートカットを考えてください)。
ほとんどのページはHTMLコンテンツを保持しています。一部の実行コード。
これらをこのクラスと抽象(MustInherit)クラスのコレクションとして表現したいと思います…
これは、これらすべてを格納するデータベーステーブルです…
データベーステーブルhttp://img178.imageshack.us/img178/8573/nodetablefm8.gif
これが私が困惑しているところです。PageNodeは、ルートである場合とそうでない場合があります。
ルートクラスをどのように処理する必要がありますか?
私は4つすべてを持っている必要はありません…
- HtmlPageNode
- CodePageNode
- HTMLルートPageNode
- コードルートPageNode
HtmlPageNodeクラスとCodePageNodeクラスがPageNodeから、またはRootPageNodeから継承するようにしたい。それは可能ですか?
明確化:複数のルートノードがあり、ルートには親ノードがある場合があります。それぞれが、異なるスタイルを持つサブツリーのみのルートです。色分けされたさまざまな部門について考えてみてください。(おそらくrootは名前の選択としては不適切です。提案はありますか?)
更新:「ルート」名について...
私は尋ねました:サブツリーに対応するノードの特定の名前はありますか?
c++ - C++ 派生クラスの問題
C++ でゲームを作成していますが、派生クラスに問題があります。私は GameScreen と呼ばれる基本クラスを持っています。これには、ステートメントのない vitrual void draw() 関数があります。また、仮想 void draw() 関数を持つ MenuScreen という派生クラスと、同じく void draw() 関数を持つ TestMenu という MenuScreen からの派生クラスもあります。私のプログラムには、GameScreen イテレータが各 GameScreens draw() 関数を呼び出すための GameScreens のリストがあります。
問題は、TestMenu オブジェクトを GameScreen リストに配置したことです。TestMenu の draw() 関数を呼び出す反復子の代わりに、GameScreen クラスの draw() 関数を呼び出しています。GameScreen の代わりに TestMenu の draw() 関数を呼び出す方法を知っている人はいますか?
関数は次のとおりです。
ここに私のクラスのコピーがあります:
c# - C# でのイベント ハンドラーの継承
私はここで隅に追いやられました。
親から継承する一連の UserControls があります。これにはいくつかのメソッドとイベントが含まれており、単純化するため、ほぼ同一のコードを何行も記述する必要はありません。あなたのように。親には他のコントロールは含まれていません。
私がしたいのは、親 UserControl にイベント ハンドラーを 1 つだけ持つことです。これは、親コントロールだけが実行できることを行います (つまり、イベントが親で定義されているように、条件付きでイベントを呼び出します)。次に、このイベント ハンドラーを子コントロールのすべての入力ボックスに接続します。子コントロールは、入力を解析し、そのイベントをスローするかどうかを親コントロールに通知するタスクを整理します。素晴らしくきれいで、繰り返しのない、コピーアンドペーストのコード (私にとっては常にバグになります)。
これが私の質問です。Visual Studio は、私が巧妙すぎると判断し、「'CheckReadiness' メソッド [親のイベント ハンドラー] は、このクラスの派生元のクラスが既にメソッドを定義しているため、イベントのメソッドにすることはできません」と警告します。はい、Visual Studio、それがポイントです。子クラスによってスローされたイベントのみを処理するイベント ハンドラーが必要です。その唯一の仕事は、コードを 1 行も書かずに子クラスを接続できるようにすることです。これらの余分なハンドラーは必要ありません。必要なすべての機能は、子プロセスがユーザー入力を処理するときに自然に呼び出されます。
なぜ Visual Studio がこれについて不平を言い始めたのか (以前はそうさせていたので)、どうすれば解決できるのかわかりません。できれば、CheckReadiness を呼び出すだけのメソッドを定義せずに実行したいと考えています。この警告の原因、1 時間前には表示されなかったのに現在表示されている原因、およびすべての子クラスで小さなハンドラーを作成することに頼らずに、この警告を消すにはどうすればよいでしょうか?
php - PHP での多重継承
PHP5がまだ多重継承をサポートしていないという事実を回避するための、適切でクリーンな方法を探しています。クラス階層は次のとおりです。
メッセージ
-- TextMessage
-------- InvitationTextMessage
-- EmailMessage
-------- InvitationEmailMessage
2 種類の Invitation* クラスには多くの共通点があります。両方が継承する共通の親クラス Invitation が欲しいです。残念ながら、現在の祖先である TextMessage および EmailMessage と多くの共通点もあります。ここでの多重継承に対する古典的な欲求。
問題を解決するための最も軽量なアプローチは何ですか?
ありがとう!