OOP:一个类可以描述另一个enity的属性

时间:2016-06-16 09:37:46

标签: java 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。根据OOP原则 - 我应该有班级和班级汽车。但是,我不认为在这种情况下我需要上课,因为我不打算开车 - 只有它的颜色。所以我们有一些与订单相关联的字段和一些与汽车相关联的字段。这段代码错了吗?

5 个答案:

答案 0 :(得分:2)

是的,你需要有两个班级。

  1. 顺序
  2. 汽车
  3. 你应该能够通过orderID

    从订单中获得汽车

    一个订单 - >许多汽车(1:M) - >

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

答案 1 :(得分:0)

是的,这是错的。如果由于某种原因carId变为哈希,您的代码将被破坏。这就是为什么你应该在它自己的类中定义汽车属性,这里只是引用它。

此外,如果您的汽车对象在内存中发生变化,您的订单对象将不会更新,因为它的值为carColor,而不是对它的引用。

答案 2 :(得分: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;
   ...
}

答案 3 :(得分:0)

OOP应如下所示:

Callback<FArgs...>::handle

只有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 } 的{​​{1}}对象有什么用处?

如果您想查找具有指定Order的订单,请创建另一个类

Color

答案 4 :(得分:-1)

您的代码有误,但它与OOP原则冲突

如果你想为Car添加属性,你没有Car class,你不能扩展它

因此,您必须编辑类订单,因此您需要与开放式原则冲突

您需要创建两个类是Car和Order