問題タブ [class-hierarchy]
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.
delphi - Delphi 7:クラス階層を生成する方法は?
私は Delphi 7 で他の人のコードを理解しようとしています (新しいバージョンにはこれが組み込まれていると思われますが、最新バージョンで 1,000 ドルを超えることはしたくありません)。
クラス階層図を生成するのに役立つ (できれば FOSS) ツールはありますか?
実際、GExpertsのクラス ブラウザは問題ありません。受け入れられた回答ほど良くはないかもしれませんが、優れたツールのコレクションの 1 つにすぎません
oop - クラスとオブジェクトの階層
クラス階層をどのように説明しますか。
用語として「クラス階層」を検索したときに、クラスがどのように編成されているか、およびクラス間の継承関係の例がいくつか得られたため、Googleの能力が低下したと思います。それはすべてクラス階層についてですか?クラス階層をC開発者にどのように説明しますか?
また、クラス階層とオブジェクト階層の違いは何ですか?
実際、私は土曜日に私のオフィスの仲間にプレゼンテーションをする予定であり、非常に多くの理論的なトピックに出くわします:(
どんな助けでもいただければ幸いです。
どうもありがとう
python - 便利なパブリッシュ/サブスクライブ セマンティクス
実際に機能する軽量のパブリッシュ/サブスクライブ メカニズムの設計と実装について、Wikipedia スタイルのリファレンスを探しています。回答とコメント、および私自身の調査に従って、質問を更新します。
私は自分の本や Web を調べて Python で、Delphi で行ったパブリッシュ/サブスクライブを調べましたが、満足のいく結果にはなりませんでした。この設計は、メッセージのフィルター処理や誰に何を配信するかを決定するために、関数シグネチャ、ビットマップ、またはスロットに依存しており、制限が多すぎる (メッセージング サーバーにバインドされている) か、無差別すぎる (誰もが何にでもサブスクライブできる) かのいずれかでした。
自分で書きたくない。私は、すでにうまく設計され、議論され、現場で証明されているものを見つけたいと思っています.
今日、私は Delphi Pascal で設計を実装しました (Delphi が最初に必要だったからです)。この API のように、引数の型でディスパッチすることは独創的なアイデアではなく (デザイン パターン Visitor
パターンで説明されています)、以前にこのようなものを見たことがあると思います (しかし、場所は覚えていません; Taligent?)。その核心は、サブスクリプション、フィルタリング、およびディスパッチが型システム上にあるということです。
上記の「コールバック」は、Python のバインドされたメソッドのようなものです。
Delphi 実装の完全なソース コードは次のとおりです。
これは Python での実装です。シグナルとメッセージはすでにオーバーロードされているため、キー名を変更しました。Delphi の実装とは異なり、例外を含む結果が収集され、リストでシグナル送信者に返されます。
これらは私の検索の理由です:
- 私は維持しなければならない数千行の Delphi コードを調べてきました。彼らはMVC デカップリングにオブザーバーパターンを使用していますが、オブザーバーとサブジェクトの間の依存関係が明示的すぎるため、すべてが非常に結合されています。
- 私は PyQt4 を学んでいますが、意味のある目的地に到着したいすべてのイベントに対して Qt4Designer でクリック-クリック-クリックする必要がある場合、それは私を殺します。
- さらに、別の個人データ アプリケーションでは、イベントの受け渡しと処理を抽象化する必要があります。これは、持続性と UI がプラットフォームによって異なり、完全に独立している必要があるためです。
参考文献
自分で見つけて、他の人はここに行くべきです
- PybubSubは topycs とメソッド シグネチャに文字列を使用します (最初のシグナルがシグネチャを定義します)。
- FinalBuilderのブログの記事では、ペイロード、メッセージ、およびフィルタリング用の整数マスクとして整数構造を持つシステムを使用して成功したと報告しています。
- PyDispatcherのドキュメントは最小限です。
- D-Busは Gnome や KDE プロジェクトなどで採用されています。Python バインディングが利用可能です。
objective-c - クラス クラスタの階層の Objective-C 編成
これは、Objective-C を使用したクラス設計の問題です。以下に例を示します。
ファイル システムには、ファイルとディレクトリがあります。どちらも「ノード」です。たとえば、ディレクトリをたどると、ノードのリストが生成されます。一部は [サブ] ディレクトリで、他はファイルです。
これは、クラス階層の次のクライアント側抽象ビューを指します。
ここまでは順調ですね。この時点で、3 つのクラスはすべて抽象クラスです。実装に進むと、2 つの主要なルートがあることがわかります: URL を使用する (Mac OS X ≥ 10.6 では Apple が推奨)、またはパス (Mac OS X ≤ 10.5 またはCocotronでのみ可能な方法)。
したがって、上記の 3 つの抽象クラスのそれぞれの 2 つの具体的な実装を開発する必要があります。
ここで、次のように考えてFileWithURL
ください。
- ファイルなので、から継承する必要があります
File
。 - URLで実装されたノードなので、から継承する必要があります
NodeWithURL
しかしFile
、 とNodeWithURL
は同じクラス階層ライン内にはありません。多重継承がなければ、Objective-C でそれを表現する方法はありません。
では、この状況をどのように設計しますか? 私は2つのアイデアを見ることができます:
- 多重継承の制限された形式であるプロトコルを使用します。
- メンバーを使用します (is-a 関係ではなく has-a 関係)。
私はプロトコルのアイデアを好む傾向があります。その場合、Directory
とFile
はプロトコルになり、6 つの具体的なクラスは共通のスーパークラスから継承されNode
、対応するプロトコルに準拠します。Node
1 つは URL を使用し、もう 1 つはパスを使用します。
ここで、実装をクライアント コードから隠すという問題があります。Node
クラス クラスタは、共通のスーパークラスを使用してこの目的のために設定できます。Node<File>
クライアント コードは、場合に応じて型付けされたオブジェクトを取得しますNode<Directory>
。
追加/その他/類似/異なるアイデアはありますか?
java - Java: スーパークラスとサブクラス
- サブクラス変数をそのスーパークラスにキャストできますか?
- スーパークラス変数にサブクラス変数を割り当てることはできますか?
- スーパークラスに変数を割り当てることはできますか?
- もしそうなら、インターフェイス変数は実装クラスからの変数を割り当てることができますか?
java - クラス階層がJavaのパフォーマンスにどの程度影響しますか?
別のクラスを拡張するクラス、別のクラスを拡張するクラスなどがあります。
100レベルの階層レベルのクラスがどのくらい遅く(パーセントで)機能し、次に10レベルの階層レベルのクラスが機能しますか?
objective-c - CCLayerの頭痛の種にアクセスする!
レイヤーにアクセスするのに少し問題があり、それが私を狂わせています。基本的に、私のレイヤーシーンの階層は次のとおりです。
Compiler.m --CCLayer --は+(CCScene)メソッドを保持し、他のすべてのCCLayerをロードします。
Construct.m-CCLayer-box2dエンジンとそのコンポーネントを
保持しますBackground.m-CCLayer-背景を保持します。
Hud.m-CCLayer-はHUDを保持します。
コンパイラ実装クラス内で、シーンと関連するすべてのノードをコンパイラCCLayerに追加します。
これはすべて正常に機能し、私のレイヤーはコンパイラーに追加され、コンパイラーのシーンは、予測どおりにデリゲートによってアクセスされます。
私の問題は、Constructレイヤー内のBackground CCLayers-CCsprite * backgroundにアクセスして、Constructゲームヒーローの位置に応じて移動できるようにすることです。
私はさまざまなメソッドを試しましたが、現在、インスタンスメソッドではなくクラスメソッドを使用してCCSprite * backgroundを定義し、ConstructLayerでアクセスできるようにすることにしました。
また、@ propertyを使用してアクセスし、クラスのインスタンス変数を初期化してみました。
これが私の背景CCLayerです:
これは機能し、画像を背景レイヤーにロードします。
そして最後に、コンストラクトレイヤーから背景画像にアクセスしようとします。
これは機能しません。いくつかの点で「nil」ポインタを受け取ります。tempBackがバックグラウンドに正しくアクセスしないか、まったくアクセスしません。
背景CCLayersクラス変数+(CCSprite)bkにアクセスして変更するにはどうすればよいですか?
c# - クラス階層によるオーバーロード-ほとんどの派生は使用されません
問題
次のようなコードを避けようとしています。
メソッドのオーバーロードでこれを実行できると思いましたが、常に最小の派生型を選択します。これは、オーバーロードがコンパイル時に決定されるため(オーバーライドとは異なり)、したがって、次のコードでは基本クラスのみを想定できるためです。
コード構造:
コード実装(キークラス):
私のシナリオ: 基本的に私はゲームを作成していて、実際のクラス(男性など)を画面上のクラス(人の画像)から切り離したいと考えています。実世界のオブジェクトは、画面上の表現を認識していない必要があります。表現は、実際のオブジェクトを認識している必要があります(男性の年齢、つまり描画されるしわの数を知るため)。RealObjectのタイプが不明な場合でも、何か(大きな赤い十字など)が表示されるフォールバックが必要です。
このコードは私が使用しているものではないことに注意してください。質問を明確にするために簡略化されたバージョンです。該当する場合は、後で詳細を追加する必要があるかもしれません。このコードのソリューションがアプリケーションでも機能することを期待しています。
これを解決するための最もエレガントな方法は何ですか?-RealObject自体が、それをどのように表現するかに関する情報を保持していません。XNAゲームは、AIが非常に重い概念実証であり、実行可能であることが証明された場合は、2Dから3Dに変更されます(おそらく、ローエンドコンピューターの両方をサポートします)。
delphi - オブジェクトの既存の階層を表示するためのツリー ビューを表示するための最適な Delphi アルゴリズムは何ですか?
これはとてもシンプルに聞こえますが、タマネギのようなものです。皮をむくとたくさんの層ができます。私は独自のオブジェクト クラスの階層を持っています。これはフォーム上のコンポーネントに少し似ていますが、どのコンポーネントも子と親を持つことができます。上部にルート オブジェクトがあります。他のコードがこの階層を管理しており、ブランチまたはリーフがいつでも作成、削除、または名前変更される可能性があります。この階層のビューを提供するツリー ビュー (何らかの種類、おそらく仮想) が必要です。これらのツリー ビューを複数持つことができ、それぞれが必要に応じてオブジェクト階層から自分自身を描画します。
私はすでに Delphi の TTreeView を使用したソリューションを持っていますが、「変更済み」フラグが発生したときに階層を反復処理し、変更されたツリー ビュー ブランチを再構築することに依存しています。これは遅い (1000 以上のオブジェクトを持つことができる) ため、1 つのオブジェクトの挿入または削除に対して 1 つのツリー ビューの変更を管理するアルゴリズムが必要です。
これは可能ですか?
objective-c - Objective-C の継承。親クラスから派生クラスへのダウンキャスト/コピー
私のプログラムには、クラスがありますClassA
。派生クラスを作成したいと思いますClassB
。私のプログラムには のインスタンスを返す関数がClassA
あり、これらの戻り値を使用して のインスタンスを作成したい場合がありますClassB
。単純なダウンキャストを行ってもコンパイラ エラーは発生しませんが、実行時エラーが発生します。これは、ポインターとオブジェクトのキャストに関する問題に関連しているようです。この場合に行うこと。
次に、C++ のコピー コンストラクターを模倣しようとしましたが、コピーされた変数がスコープ外に渡されたり、解放されたりして、再び実行時エラーが発生しました。
カテゴリの使用も検討しましたが、これは次の 2 つの理由から適切ではないようです。
- 何よりもまず、新しいクラス メンバーをカテゴリに追加することはできません。これができないと、少し複雑になります。
- カテゴリを介して追加されたメソッドは、クラスのすべてのインスタンスで使用できるようになります。厳密に言えば、これは問題ではありませんが、追加したいメソッドの特定の側面が一般的な設定で壊れる可能性があるため、私にはうまくいきません。つまり、これらのタイプのオブジェクトで何をする必要があるのか 、何らかの形で特定されています。
私はまだObjective-Cを学んでいます。フォーラムに同様の質問がいくつかあることは知っていますが、答えはカテゴリにつながり、行き止まりまたは行き止まりになりましたが、あまり助けがなかったので、単純に再投稿する必要があると感じました.