Принцип подстановки Лискова

RedDeveloper
27.01.2023 12:52
Принцип подстановки Лискова

Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь возможность быть заменены на объекты подкласса без ущерба для корректности программы.

Другими словами, любой производный класс должен быть заменяем своим базовым классом без ущерба для корректности программы.

Это один из пяти принципов объектно-ориентированного программирования, известный как SOLID.

class Animal {
    public function move() {
        // move logic
    }
}

class Dog extends Animal {
    public function move() {
        // move logic specific to dogs
    }
}

class Fish extends Animal {
    public function move() {
        // move logic specific to fish
    }
}

function makeAnimalMove(Animal $animals) {
    $animals->move();
}

$dog = new Dog();
$fish = new Fish();

makeAnimalsMove($dog); // move logic specific to dogs
makeAnimalsMove($fish); // move logic specific to fish

В этом примере у нас есть базовый класс Animal и два производных класса Dog и Fish, которые расширяются от него. Каждый класс имеет свою собственную реализацию метода move(). У нас также есть функция makeAnimalsMove(), которая принимает в качестве параметра объект типа Animal.

в этом примере у нас есть базовый класс Animal и два производных класса Dog и Fish

Поскольку Dog и Fish являются подклассами Animal, они могут быть использованы в качестве аргументов при вызове функции makeAnimalsMove().

Является примером действия принципа замещения Лискова, поскольку мы можем заменять объекты производных классов на объекты базового класса без ущерба для корректности программы.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.