Третья буква L из SOLID

Самый непонятный принцип на первый взгляд. О чем он говорит?

  1. Предварительные условия не могут быть усилены в подтипе.
  2. Постусловия не могут быть ослаблены в подтипе.
  3. Инварианты супертипа могут быть сохранены в подтипе.

С ума можно сойти, о чем тут речь?

Самый простой пример, который объяснит саму суть этого принципа, и вот пример, который нарушает этот принцип:

Супертип с его предварительными условиями

class A {
    public function getData(){
       return ['one'=>'two'];
    }
}

Подтип с ослабленными постусловиями

class B extends A {
    public function getData(){
       return true;
    }
}

Все, принцип нарушен, используя наследника B.
Обратившись к методу getData() мы получим не массив, а булево значение.

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

Loading

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *