Интересно, как я должен организовать свои два класса.Является ли Лисков Замена Принципом, нарушенным в моем примере?
- Один из них представляет собой
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. Нарушает ли его код? Зачем? –