我想知道我该如何组织我的两堂课。在我的例子中违反了Liskov替换原则吗?
- 其中之一代表
Knife
:只是一个简单,坚实,基本的,就像一把菜刀。 - 另一个是
PocketKnife
,其状态为已打开或已关闭。
class Knife{
public function cut() {/* do the cutting */}
}
class PocketKnife extends Knife{
private $opened = 0; // 0/1
// ...
public function cut() {
if ($this->opened) {
parent::cut();
}
}
}
都不是抽象的。
这个例子是否违反LSP?
在我看来确实如此,因为对于cut()
操作后置条件应该是:
- 刀越来越切割
- 一些对象后,有点“老”的刀片必须有一定的损伤它(如果它是一些游戏为例)
但随着其关闭状态,我们不会有这些后置条件的PocketKnife
。或者我错了?
这并没有回答他的问题,它只是重申LSP背后的想法/原理。他的代码是否违反了它?为什么? –