假设我们有一家销售汽车的商店。所以,我们有一个描述顺序的类:
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原则 - 我应该有班级和班级汽车。但是,我不认为在这种情况下我需要上课,因为我不打算开车 - 只有它的颜色。所以我们有一些与订单相关联的字段和一些与汽车相关联的字段。这段代码错了吗?
答案 0 :(得分:2)
是的,你需要有两个班级。
你应该能够通过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