私はまだLSPを理解しようとしています。私がこれまで理解してきたことから、サブクラス/サブタイプはBaseclass/Mainタイプを置き換えることができ、プログラムはそのまま動作するはずです。リスコフ代理原則 - 私はここに違反していますか?
私は、次の...
abstract class Warehouse<T> {
private StockLoader<T> loader;
private List<T> stock;
protected setStockLoader(StockLoader loader) {
this.loader = loader;
}
protected List<T> getStock() {
return stock;
}
public void load() {
stock = loader.load();
}
abstract showStock();
}
class WheatWH extends Warehouse<Wheat> {
@Override
public void showStock() {
// Print stocck with getStock() returns Wheat;
}
}
class RiceWH extends Warehouse<Rice> {
@Override
public void showStock() {
// Print stocck with getStock() returns Rice;
}
}
interface List<T> StockLoader<T>() {
public List<T> load();
}
class PlainStockLoader implements StockLoader<Wheat>{
public List<Wheat> load() {
//Code
}
}
class Rice {
.....
}
class Wheat {
....
}
それはLSPに違反していがありますか?そうでない場合は、上記のプログラムでLSPに違反するものは何ですか? さらに、これは他の原則に違反していますか?他の方法でこれを改善できますか?
'public void showStock(){// getStock()でstocckを表示すると小麦が返されます。 } 'voidメソッドは"小麦を返す "ことはできません。また、このコードがLSPに違反していると思われる理由を教えてください。 –
私はLSPの違反を見ることができません。それのどの面が違反と思われますか? –
'Warehouse'が抽象的な理由はありますか?クラスが既に一般的である場合、異なるコンテンツタイプごとにサブクラスを作成することは過度に思われます。 –