1

私の目標は次のとおりです。

私はデータ分析の設定でタンパク質を扱っています。特定のタンパク質について利用可能なデータは可変です。より単純な親クラスからタンパク質クラスを構築できるようにしたいと思います。各親クラスは、私が利用できるデータレイヤーに固有のものになります。

プロジェクトが異なれば、利用可能なデータのレイヤーも異なる場合があります。特定のデータレイヤーに関連するすべての変数とメソッドを含むタンパク質の簡単なクラスを作成したいと思います。次に、任意のプロジェクトについて、関連するデータレイヤー固有のタンパク質クラスから継承するプロジェクト固有のタンパク質クラスをコンパイルできます。

さらに、各データレイヤー固有のタンパク質クラスには、同様にデータレイヤー固有のチェーンクラス、残基クラス、および原子クラスが必要です。それらはすべてビルディングブロックです。原子は、タンパク質を構築するために使用される鎖を構築するために使用される残基を構築するために使用されます。タンパク質クラスは、そのすべての原子、残基、および鎖にアクセスできる必要があります。同様に、鎖は残基と原子にアクセスする必要があります。

ベクトルとマップを使用して、関連するオブジェクトへのポインターを格納しました。関連するgetメソッドとsetメソッドもあります。タンパク質変数とゲッターおよびセッターメソッドのすべてのバージョンを提供するために、原子、残基、鎖、およびタンパク質に対して1つのテンプレートクラスを作成しました。このテンプレートクラスには、タンパク質がその鎖、残基、および原子にアクセスできるようにするベクトルとゲッターおよびセッターメソッドが含まれています。このテンプレートクラスは、すべてのデータレイヤー固有のタンパク質クラスに継承されます。

これが最善のアプローチですか?

4

2 に答える 2

1

まず、継承を使用することは抽象化の優れた方法であり、再利用と保守のための道を簡単に開くカスタムクラスを構築するのに役立ちます。ただし、データ構造を検討する時間を割いてください。ベクトルを使用することは、動的を使用する最も自然な方法のようです。ただし、データのサイズ変更にはいくつかのオーバーヘッドが伴い、大きなデータを処理する場合、これが問題になることがあります。これを克服するには、それぞれが通常持つであろうデータの平均数を考え出すようにしてください。したがって、配列とベクトルを使用でき、配列を使い終わったときにのみベクトルを使用できます。あまり頻繁にオーバーヘッドに遭遇することはありません。これから実行する実際の処理によっては、データ構造を再考することをお勧めします。たとえば、データが十分に小さく、管理しやすい場合は、

于 2013-01-16T22:35:41.650 に答える
1

複数レベルのデータを整理するにはComposite Design Patternを参照し、データ構造に「アクセス」するアルゴリズムを記述するにはVisitor Design Patternを参照することをお勧めします。

複合デザイン パターンは、コンポーネント インターフェイス (抽象基本クラス) を作成します。これにより、サブレイヤー内のすべての要素の反復、要素の追加/削除などが可能になります。またaccept(some_function)、外部アルゴリズムをそれ自体に適用できるようにするメソッドも必要です。特定の各レイヤー (アトム、残基、チェーン) は、Component インターフェイスから派生する具象クラスになります。レイヤーをそのサブレイヤーから派生させないでください。非常に特殊な状況を除き、継承は「is-a」関係のみを反映する必要があります。

ビジター デザイン パターンは、データの正確な構造から独立したアルゴリズムの階層を作成します。このパターンは、データのクラス階層が近い将来に変更されない場合に最適です。[注: 構造に特定のデータを入力することで、必要な分子を取得できます。ただし、構造のレイヤー数を変更しないでください]。

何をするにしても、インターフェースの再利用または拡張には継承のみを使用し、データの再利用/拡張には合成を使用することを常にお勧めします。たとえば、 や などの STL コンテナにvectormap仮想デストラクタがなく、基本クラスとして使用するように設計されていません。

于 2013-01-17T10:44:00.457 に答える