【发布时间】:2017-07-04 02:40:11
【问题描述】:
我想知道我应该如何组织我的两个班级。
- 其中一个代表
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 处于其关闭 状态,我们不会有这些后置条件。还是我错了?
【问题讨论】:
标签: oop solid-principles ooad liskov-substitution-principle