我在如何使用正确的 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;
}
}
最佳答案
好吧,问题是 Circuit
没有在您的设计中聚合一个 Battery
和一堆 Circuit
。
我期望对象引用如:
public class Circuit {
private Battery battery;
private List<Resistor> resistors;
public Circuit(Battery battery, List<Resistor> resistors) {
//...
}
鉴于这种聚合,电路
可以向电池询问它的电压,也可以得到它的电阻器的电阻以计算电压降。
My question is how should my battery and resistor classes interact with the circuit class?
通常不需要也不希望双向关系,尤其是对于聚合,因为子项具有独立于父项的生命周期。在这种情况下,电池或电阻器可能根本不需要知道电路。但是,它们必须提供足够的公共(public)接口(interface)来为电路(或使用它们的任何其他组件)提供服务。
顺便说一句,如果您不需要电池或电阻器有自己的生命周期,您应该更愿意谈论组合而不是聚合。
关于java - 正确使用聚合(OOP)以电子电路类为例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100589/