46 lines
2.1 KiB
Markdown
46 lines
2.1 KiB
Markdown
|
---
|
|||
|
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) -->
|