digital-garden/dev/architecture/Liskov Substitution Principle.md

46 lines
2.1 KiB
Markdown
Raw Normal View History

2024-09-27 20:25:32 +03:00
---
aliases:
- LSP
- Принцип подстановки Барбары Лисков
tags:
- maturity/🌱
date: 2024-09-27
zero-link:
- "[[../garden/ru/meta/zero/00 Архитектура ПО|00 Архитектура ПО]]"
parents:
- "[[SOLID|SOLID]]"
linked:
---
Объекты подкласса должны быть взаимозаменяемы с объектами базового класса без нарушения поведения программы. Это значит, что подклассы не должны изменять базовую логику родительских классов или нарушать их контракт.
- **Пример нарушения LSP**: Подкласс переопределяет методы родительского класса, изменяя их поведение, что приводит к непредсказуемым результатам при работе с кодом через базовый класс.
- **Решение**: Подклассы должны следовать контракту базового класса, не нарушая его поведение.
```java
public class Bird {
public void fly() {
// Птица летает
}
}
public class Penguin extends Bird {
@Override
public void fly() {
// Пингвин не может летать — нарушение LSP
}
}
```
Вместо этого можно выделить разные классы для летающих и нелетающих птиц, чтобы избежать нарушения принципа подстановки.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]
**Родитель**:: [[SOLID]]
**Источник**::
**Создана**:: [[2024-09-27]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->