
Sergey
23.01.2018
09:21:16

Anton
23.01.2018
09:21:37
А где написано, что kiss - только про удобство интерфейсов? По-моему, это более общий случай

Олег
23.01.2018
09:21:43

Google

Sergey
23.01.2018
09:21:51
и он не про удобство интерфейсов а про... защиту от дурака если хочешь
ну то есть, когда штука не допускает или минимизирует некорректное использование
это ж не из программирования принцип а обще инженерный
можно проследить историю оного к 60-ым в среде любителей собирать истребители
и под kiss там подразумевалось возможность починить сломанный истриьбитель обычными инструментами

Dmitriy
23.01.2018
09:41:43
и это сложно
еще есть GRASP

Aleh
23.01.2018
09:45:49
simple != easy

Dmitriy
23.01.2018
09:45:59
и там тоже есть как многие думают "простые" для понимания и применения принципы
почему их не включили в статью?

Sergey
23.01.2018
10:01:31
но короч статья ниочем

Google

Sergey
23.01.2018
10:01:53
это такой конспект двоешника

Артур Евгеньевич
23.01.2018
10:04:20
так это тот же чувак то статью про типизацию на той неделе написал))

Adel
23.01.2018
10:16:45
тот же чувак, что и ссылку на статью дал :)

Arthur
23.01.2018
10:19:30
Так, я смотрю тут народ подкованный, сообразительный. Может мене кто разяснит на примере чем так хорошо принцип Лисковой. А еще лучше расскажет в какие проблемы можно вляпаться если нагло игнорить этот принцип?))

Mykola
23.01.2018
10:20:40
очень просто на классах: все наследники должны быть совместимыми с базовыми классами
если у тебя есть function (BaseClass x) { ... }, то ты туда сможешь передать любого наследника и все будет хорошо
понятно?

Arthur
23.01.2018
10:23:55
А если там свойство и метод переопеределены?

Ilia
23.01.2018
10:24:16

Arthur
23.01.2018
10:24:17
Просто смысл делать Базовый и под класс если они полностью совпадают?

Ilia
23.01.2018
10:24:40

Arthur
23.01.2018
10:25:13
никто. но если вдруг?

Ilia
23.01.2018
10:25:17

Aleh
23.01.2018
10:26:15
наследоваться никогда нет смысла

Adel
23.01.2018
10:26:43

Sergey
23.01.2018
10:27:15

Arthur
23.01.2018
10:27:23
Не правильно выразился, сорри. Я имел ввиду что базовый и под класс по любому будут отличаться. Тогда по идее их поведени тоже отличается...

Sergey
23.01.2018
10:27:50
ну то есть вот пример

Google

Mykola
23.01.2018
10:27:58

Arthur
23.01.2018
10:28:09
и собственно если подставить под класс вместо базового в функцию - это же ее может крашнуть. или нет.

Sergey
23.01.2018
10:28:22

Arthur
23.01.2018
10:28:26
в чем тогда смысл LSP?

Sergey
23.01.2018
10:28:43

Ilia
23.01.2018
10:28:45

Mykola
23.01.2018
10:28:56

Ilia
23.01.2018
10:29:33

Aleh
23.01.2018
10:29:35

Sergey
23.01.2018
10:29:39
в чем тогда смысл LSP?
смотри, вот есть у тебя код которому нужно площадь фигуры. И у тебя есть много реализаций фигур. Каждая считает площадь по своему, но клиентскому коду на это наплевать. Ты можешь подсунуть туда квадрат. трапецию, элипс - пофигу. Клиентский код интересует только площадь

Arthur
23.01.2018
10:30:00

Ilia
23.01.2018
10:30:05

Ilia
23.01.2018
10:30:19

Sergey
23.01.2018
10:30:26
ну то есть для понимание LSP нужно понимать что такое пред/пост условия и инварианты
хотя бы на примитивном уровне

Mykola
23.01.2018
10:31:01
это для глубокого понимания

Arthur
23.01.2018
10:31:01

Mykola
23.01.2018
10:32:08

Google

Sergey
23.01.2018
10:32:20

Mykola
23.01.2018
10:32:41
во!

Ilia
23.01.2018
10:33:20

Mykola
23.01.2018
10:34:04
давайте сегодня про что-то другое поспорим
давайте про OCP
например, чем OCP отличается от принципа: "публикуй интерфейсы, а прячь реализацию"

Arthur
23.01.2018
10:36:19
А мона еще чутка про LSP?))

Mykola
23.01.2018
10:36:42
вроде ж уже обсудили :)

Admin
ERROR: S client not available

Артур Евгеньевич
23.01.2018
10:37:13

Arthur
23.01.2018
10:37:40
Я просто хочу методом уточки чирикнуть в чат свое понимание (теперь) LSP, но боюсь меня тапками закидают))

Mykola
23.01.2018
10:39:33
давай
наливай

Arthur
23.01.2018
10:40:06
LSP - если делаешь базовый класс (или абстракцию всех подкласов?). Делай так что бы все что потом будет работать с подкласами опиралось на структуру базового класса (или абстракции) и при обработки разных подкласов не крашилось. Так? Если нет, то где ошибка?

Антон
23.01.2018
10:40:14

Олег
23.01.2018
10:40:33

Антон
23.01.2018
10:40:39
Ага:)

Ilia
23.01.2018
10:41:24

Arthur
23.01.2018
10:41:39

Sergey
23.01.2018
10:44:41

Google

Ilia
23.01.2018
10:44:46

Sergey
23.01.2018
10:45:18

Ilia
23.01.2018
10:45:32

Arthur
23.01.2018
10:48:10

Ilia
23.01.2018
10:48:44

Anton
23.01.2018
10:50:12
Отличаться и противоречиь - разные слова

Sergey
23.01.2018
10:50:33
есть еще такой - robustness principle

Arthur
23.01.2018
10:51:05
хотя вариант @fes0r конечно более верный) я подразумевал что "внутренне" поведение подкласов может отличатся (и по идее должно) а вот "внешнее" должно быть одинаковым у всех подкласов одного базового класса. верно?

Sergey
23.01.2018
10:51:19

Arthur
23.01.2018
10:51:36
Ура! Осилил))

Sergey
23.01.2018
10:51:42
иначе твой "полиморфизм" будет не убирать ифы а плодить их

Roman
23.01.2018
12:18:13
Мэтры, что по теории типов и категорий почитать?

Ilia
23.01.2018
12:20:52

Артур Евгеньевич
23.01.2018
12:21:20
внешнее - это интерфес(методы которые можно дернуть) извне

Aleh
23.01.2018
12:21:59

Артур Евгеньевич
23.01.2018
12:22:28
https://github.com/George66/Textbook

Roman
23.01.2018
12:23:12
За ссылку спасибо