@oop_ru

Страница 468 из 785
Sergey
23.01.2018
09:21:16
больше по lighting ?)
ну так это уже тоже какой-нибудь 15-ый год

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

Олег
23.01.2018
09:21:43
2018-ый год
я вживую только в этом году и увидел

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
Так, я смотрю тут народ подкованный, сообразительный. Может мене кто разяснит на примере чем так хорошо принцип Лисковой. А еще лучше расскажет в какие проблемы можно вляпаться если нагло игнорить этот принцип?))
Он (LSP) не ХОРОШО, он НАДО. Это не для программистов, чтобы делали так или не делали так. Это основной принцип ООП (один из), он более для дизайнеров языков и объектных систем.

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

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

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

Adel
23.01.2018
10:26:43
наследоваться никогда нет смысла
не начинай заново вчерашнее :)

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
и собственно если подставить под класс вместо базового в функцию - это же ее может крашнуть. или нет.

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

Sergey
23.01.2018
10:28:43
в чем тогда смысл LSP?
в том что бы делать качественные абстракции данных

Mykola
23.01.2018
10:28:56
если ты соблюдаешь контракты - то нет
не сбивай молодого человека страшными словами типа "контракты" :)

Ilia
23.01.2018
10:29:33
и собственно если подставить под класс вместо базового в функцию - это же ее может крашнуть. или нет.
Так о том как раз LSP и говорит, что НЕ ДОЛЖЕН (в корректной программе)

Aleh
23.01.2018
10:29:35
в чем тогда смысл LSP?
в том, чтобы не крешнуть

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

Arthur
23.01.2018
10:30:00
не сбивай молодого человека страшными словами типа "контракты" :)
да не, если для понимания LSP необходимо понимание контрактов - я изучу этот термин глубже))

Ilia
23.01.2018
10:30:05
в чем тогда смысл LSP?
Ну почитай что ли что-то ... кроме чатов.

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

хотя бы на примитивном уровне

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

Mykola
23.01.2018
10:32:08
ну то есть для понимание LSP нужно понимать что такое пред/пост условия и инварианты
а вообще-то нужно не это, а другое: понимание теории типов, что такое подтип и выводимости формул

Google
Sergey
23.01.2018
10:32:20
это для глубокого понимания
ну в целом да, в целом большинству хватит "если я могу подменить и ничего не сломается - то все хорошо"

Mykola
23.01.2018
10:32:41
во!

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:33
Антон
23.01.2018
10:40:39
Ага:)

Google
Ilia
23.01.2018
10:44:46
LSP - если делаешь базовый класс (или абстракцию всех подкласов?). Делай так что бы все что потом будет работать с подкласами опиралось на структуру базового класса (или абстракции) и при обработки разных подкласов не крашилось. Так? Если нет, то где ошибка?
Тебе (если позволяет язык) нужно только соблюдать простое правило: не нарушать в наследниках "контракт" базового класса на работу с ним . Я написал "контракт" в кавычках, потому что это — другой контракт, не тот , который подразумевает Сергей Протко

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 конечно более верный) я подразумевал что "внутренне" поведение подкласов может отличатся (и по идее должно) а вот "внешнее" должно быть одинаковым у всех подкласов одного базового класса. верно?

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
хотя вариант @fes0r конечно более верный) я подразумевал что "внутренне" поведение подкласов может отличатся (и по идее должно) а вот "внешнее" должно быть одинаковым у всех подкласов одного базового класса. верно?
Блин, а как ты "внутреннее" и "внешнее" поведение отличать собираешься, если у нас объекты, а у них ООП, и что там внутри, вообще говоря, неизвестно...

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

Артур Евгеньевич
23.01.2018
12:22:28
Мэтры, что по теории типов и категорий почитать?
я не мэтр, но чувак с хабра пишет свой учебник + общается с аудторией активно

https://github.com/George66/Textbook

Roman
23.01.2018
12:23:12
https://github.com/George66/Textbook
А по теории типов?

За ссылку спасибо

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