2

CarMAIN フィールドがVIN(Vehicle Identification Number)と呼ばれるクラスがあるとします。VIN は、次のような多くの情報を提供します。

  • オーナー
  • 登録場所
  • 生産国
  • 製造年
  • エンジン型式
  • などなど

続行して、さらに情報を追加できます。

  • 最後に確認された GPS 座標
  • 細かいリスト
  • 盗難です(ブール値)
  • などなど

一部の情報 (製造年やエンジンの種類など) をCarオブジェクト内に格納することは合理的と思われます。ただし、このすべての情報をCarオブジェクト内に保存すると、複雑になりすぎて「過負荷」になり、管理が難しくなります。さらに、アプリケーションが進化するにつれて、より多くの情報を追加できます。

じゃあ国境はどこ?オブジェクトの内部に格納Carする必要があるものと、オブジェクトの外部に格納する必要があるものDictionary<Car, GPSCoordinates>

Carオブジェクト内に「静的」データを格納する必要があるのではないかと思いますimmutable。また、「動的」データを特別なストレージに保存します。

4

2 に答える 2

0

Carクラスがプロパティ を提供するからとGPSCoordinatesいって、それらの座標を内部で保持する必要があるわけではありません。本質的に、それがカプセル化のすべてです。

はい、「IsInGarageNow」、「WasEverDrivedByMadonna」、「RecommendedOil」などのプロパティを追加できます。

于 2012-08-18T21:54:06.577 に答える
0

CarModelアプリケーション内のすべての車で共有される基本属性 (エンジンのサイズ、色、登録番号など) に対して呼び出されるクラスを使用します。その後、Car、RentalCar など、ビジネス ロジックに適合する任意の数のより具体的なサブクラスを使用して、このクラスを拡張できます。

このようにして、すべての車が何を共有するかについて明確な定義を 1 つ持つことができ、車が取り得るさまざまな状態 (たとえば、RentalCar とその固有のパラメーター) に対する追加の定義を得ることができます。

アップデート:

あなたが探しているのは次のようなものだと思います(ただし、お勧めしません):

public class Car
{
   // mandatory
   protected int engineSize;
   protected int color;

   // optional
   protected Map<String, Object> attributes = new HashMap<String, Object>();


   public void set(String name, Object value)
   {
     attributes.put(name, value);
   }

   public Object get(String name)
   {
     return attributes.get(name);
   }
}

これが良い解決策ではない理由:

  • このクラスをデータベースに永続化するか、よく知られている一連の属性に依存するものを設計してください。
  • 潜在的な問題をデバッグする悪夢。
  • 型定義に関する OOP の使用はあまり適切ではありません。これを悪用して、Carクラスをそうでないものに変えることができます。
于 2012-08-18T21:55:25.890 に答える