4

問題のドメインには、多数の名前付きスナークが含まれています。スナークのいくつかはブージャムです。

これをモデル化するには、少なくとも 2 つの方法があります。

// プロパティとして:
    クラススナーク{
      文字列名;
      ブール is_boojum;
    };  

// リストとして:
    クラススナーク{
      typedef 長い ID;
      やった;
      文字列名;
    };  

    tree<Snark::Id> boojums;

スナークにはオスとメスがいると判断した場合、スナーク クラスの定義に「性別」プロパティを追加するのは直感的に思えます。そして、5 人を除くすべてのスナークが打ち負かされた対象であると判断した場合、王族のリストを作成します。

適用できる原則はありますか、それともアーキテクチャの好みの問題ですか?

4

6 に答える 6

6

どのような問題を解決しようとしていますか?

スナークの王族を記録する目的が、GUI で頭に王冠を表示することである場合、それが単なる属性であることは理にかなっています。(または、オーバーライドされた Render メソッドを持つ RoyalSnark サブクラスが存在する可能性があります。)

すべてのロイヤル スナークをすばやく見つけることが目的である場合は、リストの方が適しています。それ以外の場合は、すべてのスナークを調べてその属性を確認する必要があります。

于 2008-12-23T00:21:05.580 に答える
2

分類に関連する情報エントロピーは、どの方法を使用するかのガイドになると思います。エントロピーの低い分類 (つまり、ほとんどのオブジェクトが同じ値を持つ) は、例外的なケースを追跡するリストの実装を提案しますが、エントロピーの高い分類 (オブジェクトが持つ分類について非常に良い予測を行うことはできません) は、プロパティの実装を提案します。

于 2008-12-23T04:43:27.610 に答える
2

派生クラスとして:

class Snark 
{
   virtual void Approach(Creature& approacher) {};
};

class Boojum : public Snark
{
   virtual void Approach(Creature& approacher) 
   { 
      approacher.softlySuddenlyVanishAway(); 
   }
};
于 2008-12-23T00:38:33.207 に答える
1

それを行う自然な方法は、すべての場合にプロパティのようです。

パフォーマンスのために、またはスペースを最適化するために、リストを使用することがあります。どちらの理由も、時期尚早の最適化、カプセル化の破壊、および/または冗長データの保存の潜在的なケースとして私を思い起こさせます。パフォーマンス上の理由から、このプロパティが特別な方法で処理されることを知る必要はありません)。リストの実装をゲッターの背後に隠して、プロパティとして動作させることができると思います。

また、これらのオブジェクトが DB に格納されている場合、DB レイヤーはクエリを使用して実行時にリストを作成できるため、パフォーマンスの問題はほとんど解消されます。

于 2008-12-23T00:29:53.240 に答える
0

うーん。私の最初の考えは、確かに、BoojumはSnarkのサブタイプであるということです。しかし、仕様はそれに反対しているようです。「スナークはブージュムでしたね」。ええと、それはスナークis_a Boojumを意味し、それは継承グラフを循環的にします。それを持つことはできません。

一方で、スナークがブージュムになる可能性があるという兆候はないと思います。ブージュムかそうでないかのどちらかです。

おそらくあなたはBoojumミックスインが欲しいと思います-

abstract class Snark { /*...*/ };
class PlainSnark extends Snark {/*...*/};
class RoyalSnark extends Snark implements Boojum {/*...*/};
于 2008-12-23T02:45:11.280 に答える
0

データベース モデリングについて質問している場合はis_boojum、テーブルの属性列として扱うのが最も簡単Snarksです。すべての boojums を検索する必要がある場合、クエリは簡単です。

SELECT * FROM Snarks WHERE is_boojum = 1

これにより、論理的に正しい答えが得られ、モデル化が容易になります。選択性の低い列 (同一の値を持つ多数の行) のインデックス作成はあまり効率的ではなく、インデックスの恩恵をまったく受けない可能性があるため、それほど高速ではない可能性があります。

しかし、あなたの質問はモデリングに関するものであり、最適化ではありませんでした。

于 2008-12-23T00:31:48.460 に答える