我很难用正确的OOP实践来组织我的代码。
假设我有一个由电阻和电池等元件组成的电子电路。
我当然想要一个类来分析整个电路的特性。但也有一些元件的性质,作为一个整体,电路并不“关心”。
我的问题是,我的电池和电阻类应该如何与电路类交互?
下面我编写了一些示例代码,希望能说明我想要做的事情。请更正/评论实施!
public class Circuit{
public double current;
public double supplyVoltage;
public int numResistors;
public double batteryVoltage(){
//Create battery object here? Or in its own method?
return supplyVoltage;
}
public double voltageDropAcrossResistor(){
//Use V=I*R
//Would I create Resistor objects here? Or create a method?
//Does the circuit object 'remember' resistor objects
//that were created elsewhere?
}
}
public class Resistor{
public int resistance;
public void setResistance(int resistance){
this.resistance = resistance;
}
public int getResistance(){
return resistance;
}
public String getColorCode(){
String color = someFormula;
return color;
}
}
public class Battery{
public int voltage;
public String batteryType;
public void setVoltage(int voltage){
this.voltage = voltage;
}
public int getVoltage(){
return voltage;
}
public void setBatteryType(String type){
this.batteryType = type;
}
public String getBatteryType(){
return batteryType;
}
}发布于 2017-02-07 22:04:48
问题是,在您的设计中,Circuit没有聚合一个Battery和一堆Circuit。
我期望对象引用,例如:
public class Circuit {
private Battery battery;
private List<Resistor> resistors;
public Circuit(Battery battery, List<Resistor> resistors) {
//...
}在这种聚集的情况下,Circuit可以要求电池提供它的电压,也可以得到它的电阻的电阻,以便计算电压降。
我的问题是,我的电池和电阻类应该如何与电路类交互?
双向关系通常不是必需的,也不是理想的,尤其是使用聚合,因为子生命周期独立于父生命周期。在这种情况下,电池或电阻器可能根本不需要知道电路。然而,它们必须提供足够的公共接口来服务电路(或使用它们的任何其他组件)。
顺便说一句,如果你不需要电池或电阻器来拥有他们自己的生命周期,你应该说的是合成而不是聚合。
发布于 2017-02-07 22:07:59
聚合是has-a关系,所以在Circut中它有Battery和Resistor --您的Circut类可能看起来有点像这样:
private Battery battery;
private Resistor resistor;
public void addBattery(Battery battery) {
this.battery = battery;
}
public void addResistor(Resistor resistor) {
this.resistor = resistor;
}因此,您的返回方法将如下所示:
public double batteryVoltage() {
if (battery!=null) { // your formula and return value}
return 0;
}但是,如果Battery和Resistor都是期望值,那么您将使用组合,因此必须创建一个Circut构造函数,该构造函数接受两个组件作为参数,而不是设置它们。
发布于 2017-02-07 22:04:14
在这种情况下,您可以使用聚合。
您应该添加一个电池字段和一个存放容器的字段(用于前)。包含电路类中的电阻的列表)。您可以在Curcuit类之外初始化它们,并使用参数将它们传递给电路构造器。
https://stackoverflow.com/questions/42100589
复制相似问题