0

C++ OOPS によるプログラムの方法は、「オブジェクトをファクトリで構築し、ロジックで配線する」ということをどこかで読みました。

アプリケーション設計の問題に直面しています。(仮想関数の有無にかかわらず)いくつかの継承階層があると考えてください:-

      Engine
        /\
       /  \
   Diesel Petrol
     /\      /\
    /  \    /  \
 2Cyl 4Cyl 2Cyl 4Cyl


       Audio
        /\
       /  \
 2Deck    4Deck



            Tyres
              /\
             /  \
        15Inch   17Inch
          /\       /\
         /  \     /  \
  tubeless Tube Tube Tubeless                     

  and more.... (System is scalable and new hierarchy may be added later on)

これで、「車」オブジェクトがピック アンド チョイス スタイルで構築されるこのアプリケーション インターフェイスができました。座席の種類は?オーディオの種類は?等

作成された「車」オブジェクトが次のようになるように、このシステムをどのように設計しますか?

  1. すべての部品階層に密接に結合されていません 既に作成された車への新しい階層の追加をサポートします: タイヤをチューブレスとして「車」オブジェクトを作成し、後でタイヤ階層に新しい継承があるとします。新しいタイヤ タイプの車のオブジェクト。

つまり、オブジェクト階層はクラス設計に、オブジェクト作成はファクトリ層に、配線はロジック層に任せたいと思っています。

助言がありますか。

4

2 に答える 2

2

まず第一に、これは一般にクラス爆発と呼ばれるものになる可能性があるようです. これらは、すぐにメンテナンスの悪夢になる可能性があります。

ダイアグラムを見ると、いくつかのクラスは、実際のクラスではなく、属性であるように見えます。たとえば、タイヤの階層では、なぜ 15 インチと 17 インチのクラスが必要なのでしょうか? それらのクラスはどのような状態または動作を提供しますか? Tire クラスに size 属性を付けてみませんか? 列挙型にすることもできます。2Cyl、4Cyl および 2Deck、4Deck クラスについてもおそらく同じことが言えますが、提示された情報から判断するのは困難です。

このような状況では、可能な限り継承よりも包含を優先するのが一般的に良い方法です。これについてはStrategy design patternで説明されており、 Head First Design Patterns bookで優れた例を見つけることができます。

このアドバイスを考慮して、デザインを再考することをお勧めします。

于 2013-05-09T17:24:32.953 に答える