実際の問題は、仮定が間違っていることです。回路内の導体は、抵抗、電流、電圧によって定義されるのではなく、そのうちの 2 つだけで定義されます。したがって、コンダクターの完全に決定された状態を記述するために必要な属性は 2 つだけです。簡単にするためにresistance
とを取りましょう。voltage
次に、電流と電圧の関係を強化するには、次のように記述できます。
public class Conductor
{
private float resistance;
private float voltage;
public void setVoltage( float voltage )
{
this.voltage = voltage;
}
public float getVoltage()
{
return voltage;
}
public float getCurrent()
{
return getVoltage() / getResistance();
}
public void setCurrent( float current )
{
this.voltage = current * getResistance();
}
public void setResistance( float resistance )
{
this.resistance = resistance;
}
public void setResistance( float current, float voltage )
{
setResistance( voltage / current );
}
public float getResistance()
{
return resistance;
}
}
ワイヤの長さ、直径、および抵抗定数に基づいて導体の抵抗を設定するなど、その他のセッターについては、新しい属性 (!) は必要なく、セッター自体のみが必要です。
public void setResistance( float constant, float diameter, float length )
{
this.resistance = constant * length / ( 2 * Math.PI * diameter * diameter );
}
追加のゲッターについても同じことが言えます。
public float getResistanceConstant( float diameter, float length )
{
return ( getResistance() * ( 2 * Math.PI * diameter * diamter ) ) / length;
}
それでも直径を属性として保存する必要がある場合は、 からクラスを派生させる必要があります。これは、Wire
すべてConductor
の導体の抵抗が長さ、直径、および抵抗定数によって定義されるわけではなく、ワイヤの抵抗のみによって定義されるためです。ただし、覚えておいてください: 繰り返しますが、3 つの値すべてを引数として保存する必要はありませんが、そのうちの 2 つだけを保存する必要があります。抵抗を属性として取得したため、3 番目の値は既に暗黙的に定義されています。