@oop_ru

Страница 255 из 785
Sergey
24.06.2017
10:32:56
до тех пор пока ты соблюдаешь LSP - все хорошо

F01134H
24.06.2017
10:32:58
ну кстати да

Sergey
24.06.2017
10:33:37
в твоем случае если у тебя наследник усилил пост-условия (о том что он не всякий Product будет возвращать а только Book, который является подтипом Product), то с точки зрения LSP все хорошо.

Ivan
24.06.2017
10:33:51
так а где плохо?

Google
Sergey
24.06.2017
10:34:28
когда ты усиливаешь пред-условия. Типа у тебя интерфейс на ВХОД принимал Product и в наследнике ты хочешь не просто Product а Book. Вот в этом случае LSP нарушен.

Ivan
24.06.2017
10:34:49
это понимаю

предусловия не сильнее

постусловия не слабее

Sergey
24.06.2017
10:35:54
ну тип того, но... увы PHP не умеет ковариантность типов, а стало быть ты физически ограничен. Где-то была RFC что бы это разрешить но хз как оно там

сча попробуй найти

самому интересно

а не.... нету. Было просто мельком в internals и как-то заглохло.

Но, в 7.2 можно будет хотя бы убирать типы в наследниках для входа (ослоблять прекондишены)

https://wiki.php.net/rfc/parameter-no-type-variance

это конечно не то что надо, но...

F01134H
24.06.2017
10:41:59
в принципе

разницы нет, book там или product

Google
Sergey
24.06.2017
10:42:13
может замутить RFC...

F01134H
24.06.2017
10:42:31
по сути book все равно реализует product

Admin
ERROR: S client not available

F01134H
24.06.2017
10:42:59
Сергей наверное знает какие подводные камни есть

Aleh
24.06.2017
10:44:37
Ну, когда ты знаешь, что там именно book, надо делать лишнюю проверку

Sergey
24.06.2017
10:44:56
по сути book все равно реализует product
на это надо смотреть исходя из задачи. К примеру: $book = $bookFactory->make('War and Peace'); // $book instanceof Book $food = $foodFactory->make('Fish and Chips'); // $food instanceof Food class Book implements Product, Readable; class Food implements Product, Eatable;

то есть у тебя Book может иметь дополнительное поведение на которое завязан клиент

и ему очень важно что бы фабрика вернула именно Book.

то есть в качестве зависимости у нее будет не просто ProductFactoryInterface а скорее BookFactory

пример немного высосан из пальца, лень придумывать что-то из реальной жизни.

но идея тут именно в ISP, то есть смотреть надо не только на сами типы, но то кто и зачем их хочет использовать

Страница 255 из 785