Рубрики
Без рубрики

Повторный просмотр буквы L в ТВЕРДОМ

Фото Павла Некоранца на Unsplash Это продолжение ТВЕРДОГО ТЕЛА. В последнем посте я описал… С тегами computer science, чистый код, твердый, java.

Фото Павла Некоранца на Unsplash Это продолжение SOLID. В последнем посте я описал букву “О”, а теперь мы продолжим с буквой “Л”. Поэтому, если вы не проверили последнее сообщение, не стесняйтесь нажимать на ссылку: https://dev.to/sightlessdog/revisiting-the-o-in-solid-4i84

Пусть z – свойство, доказуемое для объектов x типа T. Тогда z должно быть истинным для объектов y типа S, где S – подтип T.

В двух словах: A обладает свойством A, если B является подтипом A, то B также обладает свойством A, и B должен вести себя так, как ожидается, будет вести себя A. И это означает, что любой производный класс (B) должен иметь возможность заменить свой родительский класс (A) без ведома потребителя.

Пример:

Предположим, у нас есть класс автомобилей и два других класса Ferrari и Bugatti. Обе машины просто… машины… ооочень… они должны вести себя так, как вела бы себя обычная машина, верно?

public class Car {
    public int speed;

    public Car(int speed) {
        this.speed = speed; 
    }
}

public class Bugatti extends Car {
    public Bugatti (int speed) {
        super(speed);
    }
}

public class Ferrari extends Car {
    public Ferrari (int speed) {
        super(speed);
    }
}

А теперь давайте предположим, что мы хотим настроить автомобиль, увеличив его скорость, обычно мы пишем метод внутри автомобиля, подобный этому:

   public void increaseSpeed(Car car) {
        String message = "You increased the speed of " + car.getClass().getSimpleName()  + " from " + car.speed;

        System.out.println(message);
    }

Пожалуйста, обратите внимание, что увеличение скорости принимает любой автомобиль в качестве параметра. Нам не нужно было реализовывать этот метод в каждом классе (Ferrari и Bugatti), потому что они должны вести себя так, как вел бы суперкласс (автомобиль). Никаких Осложнений. И это Схема замещения Лискова. Мы каждый раз заменяли аргумент car одним из подтипов, и ничего не изменилось. Теперь давайте проверим наши результаты:

You increased the speed of Bugatti from 200
You increased the speed of Ferrari from 210

Принцип подстановки Лискова расширяет принцип открытости/закрытости, предотвращая взлом клиентского кода.

Источники:

Мейер, Б. (1997): Объектно-ориентированное построение программного обеспечения, 2-е издание http://www.cvc.uab.es/shared/teach/a21291/temes/object_oriented_design/materials_adicionals/principles_and_patterns.pdf Роберт К. Мартин “Принципы ООД” https://en.wikipedia.org/wiki/Liskov_substitution_principle https://www.youtube.com/watch?v=rtmFCcjEgEw https://www.baeldung.com/solid-principles

Оригинал: “https://dev.to/sightlessdog/revisiting-the-l-in-solid-116m”