2016-06-16 4 views
0

車を販売するショップがあるとしましょう。したがって、私たちは順序を記述するクラスを持っています:OOP:あるクラスが別のエンティティのプロパティを記述できるか

class Order{ 
    private int id;// THIS IS ID OF THE ORDER 
    private Date date;//THIS IS THE DATE OF THE ORDER 
    private BigDecimal sum;//THIS IS THE SUM OF THE ORDER 
    private int carId;//THIS IS ID OF THE CAR 
    private int carColor;//THIS IS COLOR OF THE CAR 
} 

carIdとcarColorという2つのフィールドが混乱しています。 OOPの原則によると、私はクラスのクラスとクラスのクラスを持っている必要があります。しかし、私はそのような状況でクラスカーが必要だとは思わない、私は車で働くつもりはない - その色だけで作業する。だから私たちは秩序と車とつながっているいくつかのフィールドにリンクされているいくつかのフィールドを持っています。このコードは間違っていますか?

+0

を作る見つけたい場合は、 'Car'クラスを持っている必要があります述べ全くOOの原則がありません。 'carId'と' carColor'は、もしあなたがそれがそうであると決めるなら、 'Order'のプロパティになることができます。クラスは実世界の実体でもなく、それらを表現する必要もありません。 – zapl

答えて

0

はい間違いです。何らかの理由でcarIdがハッシュになると、コードが破損します。だからこそ、自分のクラスの中に車のプロパティを定義して、そこへの参照だけを定義する必要があります。

さらに、車のオブジェクトがメモリ内で変更された場合、注文オブジェクトは値carColorを参照するため更新されません。

-1

あなたのコードが間違ってis'tが、それはあなたが車にプロパティを追加したい場合は、あなたが車のクラスを持っていないOOP原理

と競合し、あなたがそう

にあなたをそれを拡張することはできませんはい、あなたは2つのクラスを持っている必要がありますが、オープン・クローズの原則を競合するので、次の2つのクラスを作成する必要が

は車と注文

2

で、クラスの順序を編集する必要があります。

  1. 注文
  2. カー

あなたはのorderID

ワンオーダーで注文から車を得ることができる必要があります - >多くの車(1:M) - >

new Order(orderID)->getCars()-> each iteration -> getColor() 
0

私は自分自身のCarクラスを実装し、そこに車のプロパティを追加します。あなたのコードが成長し、Carがいくつかの他の特性を得ると仮定した場合。サイズ、重量、消費量などを管理することができます。テストにも同じことが起こります。

また、特定の車に関する情報を取得する場合は、注文の代わりに車のリストを反復する方がよいでしょう。

コード例:

class Car { 
    private int carId; 
    private int carColor; 
    // Additional information 
    private double consumption; 
    .... 
} 

class Order { 
    private int id; 
    private Date date; 
    private BigDecimal sum; 
    // An order can also contain more than one car 
    private List<Car> cars; 
    ... 
} 
0

OOPは次のよ​​うになります。

class Order { 
    private int id;   //THIS IS ID OF THE ORDER 
    private Date date;  //THIS IS THE DATE OF THE ORDER 
    private BigDecimal sum; //THIS IS THE SUM OF THE ORDER 
    private Car car;   //THIS IS THE CAR, bear in mind, this only works if you have 1 car for 1 order! 

    //getters and setters 
} 

class Car { 
    private int carId;  //THIS IS ID OF THE CAR 
    private Color carColor; //THIS IS COLOR OF THE CAR 

    //getters and setters 
} 

のみColorOrderの目的は、良好な何ですか?

指定Colorと注文が別のクラス

class SearchModel { 
    private List<Order> orders; 

    public List<Order> getOrdersByCarColor(Color carColor) { 
     List<Order> res = new ArrayList<Order>(); 

     for (Order order : orders) { 
      if (order.getCar().getCarColor() == carColor) 
       res.add(order); 
     } 

     return res; 
    } 
} 
関連する問題