@oop_ru

Страница 467 из 785
Mykola
22.01.2018
11:33:41
является ли класс конкретизацией интерфейса? и в какой степени?

Sergey
22.01.2018
11:33:47
Да где там контракты-то в LSP? Мешаешь всё в кучу одну...
так это вы мешаете в одну кучу, LSP конкретно про то, как проверить качество абстракции за счет того, насколько подтипы качественно реализуют контракт. И контракт этот можно проверять хоть в компайл тайме хоть в рантайме через тесты, и выражается он что там что там пре/пост условиями и инвариантами (как завещал Хоар)

Google
Mykola
22.01.2018
11:34:16
что не?

Sergey
22.01.2018
11:34:32
давайте тогда абстрагируемся от "классов" и "интерфейсов", и определим лсп нормально: конкретизация не должна ломать совместимость с абстракицей
и совместимость эту можно выразить возможностью расширять пред условия, и усиливать пост условия

Артур Евгеньевич
22.01.2018
11:34:35
Изначально он про замену одной реализации другой(унаследованнлй)

Sergey
22.01.2018
11:34:39
а проверить это можно уже по всякому

LSP же не про проверку, а про критерии для проверки

Ilia
22.01.2018
11:37:41
Ну ок, как это всё влияет на предмет спора ? Наследование vs композиция?

Sergey
22.01.2018
11:39:32
Ну ок, как это всё влияет на предмет спора ? Наследование vs композиция?
это ты мне скажи, ты же говорил что LSP как-то по разному себя проявляет в одном и другом случае

Mykola
22.01.2018
11:39:44
я все еще не понял в чем суть композиции в этом споре)

про наследование я понял

Aleh
22.01.2018
11:40:12
является ли класс конкретизацией интерфейса? и в какой степени?
является, не знаю как степени считать для этого

Mykola
22.01.2018
11:41:00
является, не знаю как степени считать для этого
в том то и дело, что это сильно зависит от языка программирования

Sergey
22.01.2018
11:41:42
в том то и дело, что это сильно зависит от языка программирования
а потому зачем вводить это излишнее уточнение? у тебя что так что эдак будет тип и подтип

Aleh
22.01.2018
11:41:43
в том то и дело, что это сильно зависит от языка программирования
принцип лисков не зависит, связь между классами и интерфейсами зависит, да

Google
Mykola
22.01.2018
11:42:06
если быть серьезным: принцип лисков - про подтипы и доказуемые проперти, а в разных языках разное понятие наследования

и наследование зачастую не делает подтип в математическом смысле, а лелает какую-то фигню

Aleh
22.01.2018
11:43:27
да, есть много языков, которые разрешают стрелять в ноги

Ilia
22.01.2018
11:44:11
я все еще не понял в чем суть композиции в этом споре)
Инициатор (Артур, если не ошибаюсь) всего лишь попросил привести пример, когда КОМПОЗИЦИИ нужно предпочесть НАСЛЕДОВАНИЕ.

Mykola
22.01.2018
11:44:26
является ли квадрат подтипом прямоугольника? почему бы и нет является ли наследник от того интерфейса на картинке чем-то типа квадрата - а вот хуй

и это только uml

а в языках конкретных еще хуже)

Sergey
22.01.2018
11:45:39
является ли квадрат подтипом прямоугольника? почему бы и нет является ли наследник от того интерфейса на картинке чем-то типа квадрата - а вот хуй
вопрос неверный, и правильный вопрос нужно ставить исходя из требований к контракту со стороны пользователя оного

Mykola
22.01.2018
11:46:17
вопрос неверный, но он возник

Sergey
22.01.2018
11:46:17
вопрос неверный, но он возник
так LSP как раз таки и должен тебе помочь придти к адекватному вопросу)

Mykola
22.01.2018
11:47:07
и какой вопрос адекватный в данном месте? :)

Sergey
22.01.2018
11:47:32
и какой вопрос адекватный в данном месте? :)
а что нужно то от квадрата и от прямоугольника?

Aleh
22.01.2018
11:47:52
ну блин, на вопрос "можно ли наследовать квадрат от прямоугольника" ответ как бы "зависит от контракта прямоугольника и квадрата"

Sergey
22.01.2018
11:47:56
скорее всего тебе где-то нужно площать а где-то манипулировать размерами, и для манипуляции разные контракты уже

Mykola
22.01.2018
11:50:01
что такое квадрат и что такое прямоугольник?

Артур Евгеньевич
22.01.2018
11:50:06
Sergey
22.01.2018
11:50:18
Да
так, погоди... диалог выглядит вот так - приведи пример когда наследоание предпочтительнее? - предположим что у тебя все уже отнаследовано от MyObject...

Google
Mykola
22.01.2018
11:50:23
это не зависит от предметной области)

Артур Евгеньевич
22.01.2018
11:50:24
Но если нужно изменять сторону, то не получится

Sergey
22.01.2018
11:51:33
Угу
....ладно, проехали, нихера тогда не понял

аргумент в стиле "предпочтительнее когда у тебя уже все так"

Артур Евгеньевич
22.01.2018
11:52:15
это не зависит от предметной области)
Зависит. Если у тебя у квадрата нет площади и методов изменения сторон то все ок

Ilia
22.01.2018
11:52:40
Требование соблюдать LSP вынудит тебя делать наследование. Что не ясно то?

Sergey
22.01.2018
11:52:57
Класс, имплементирующий интерфейс, завязан исключительно на контракт этого интерфейса. Класс, наследующий другой класс, помимо завязки на интерфейс имеет стопятцот способов явно и неявно завязаться на нутря родителя (поэтому изначально я и написал что с наследованием LSP проще нарушить - слишком большое зацепление между ними получается). А вообще выше речь шла о наследовании с оверрайдом только абстрактных методов. Возможно это - компромисс, при условии что там нет мутируемых протектед свойств. Но ИМХО так се компромисс. Зачем абстрактному классу нужно шарить какую то логику между наследниками? Не нарушен ли там случайно SRP?

Sergey
22.01.2018
11:53:48
Требование соблюдать LSP вынудит тебя делать наследование. Что не ясно то?
вот мне не ясно как LSP вынудит меня делать наследование

Mykola
22.01.2018
12:12:53
LSP это про типы, подтипы и проверяемые проверти наследование - вроде как способ делать подтипы, но все зависит только он языка программирования, его понимания наследования и т.д.

вот и вся связь

Mykola
22.01.2018
12:14:36
а есть другая проблема: моделирование предметной области, оно тоже бывает неадекватным

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

в реальном мире квадрат - это прямогугольник, все ок

Артур Евгеньевич
22.01.2018
12:15:33
Ну мне еще нравится примр с птицей и пингвином. Однако если в нашей предметной области птицы не летают, то он не работает)

Ivan
22.01.2018
12:15:47
овал instanceof круг

Mykola
22.01.2018
12:15:58
но если мы решили, что прямоугольник, это такая штука с двумя интеджерами, а квадрат с одним интеджером, то тут хер его знает является ли одно подтипом другого

Артур Евгеньевич
22.01.2018
12:16:08
в реальном мире квадрат - это прямогугольник, все ок
Не в реалном мире, а тогда уж в евклидовой геометрии)

Google
Mykola
22.01.2018
12:16:58
я как раз про реальный мир, типа где люди ходют

в программировании мы решаем проблемы реальных людей, а не играемся с абстракциями

нам важно моделировать что-то "живое"

но это так)

контекст важен
важен не контекст, а адекватное моделирование

контекст ты можешь сразу сделать хреновым

и потом говорить, что у тебя такой контекст, который вынудил тебя нарушить LSP, SRP и даже KPP

Admin
ERROR: S client not available

Sergey
22.01.2018
12:20:27
и потом говорить, что у тебя такой контекст, который вынудил тебя нарушить LSP, SRP и даже KPP
ммм нет, скорее у тебя может поменяться контекст и код который раньше соблюдал все это вдруг что-то нарушает. И время рефакторить)

Mykola
22.01.2018
12:20:53
дык, ты просто перефразировал "адекватное моделирование"

лучше сразу делать такой код, который не надо менять потом)

и тут дело не в ооп, а чаще в KISS

Sergey
22.01.2018
12:22:37
лучше сразу делать такой код, который не надо менять потом)
https://images.moviepilot.com/image/upload/c_fill,h_470,q_auto:good,w_620/dqnrdue7llwvoah3yvom.jpg

Mykola
22.01.2018
12:22:56
делаем прямоугольник, у которого можно менять одну сторону... первый вопрос: нафига? :)

Mykola
22.01.2018
12:23:37
KISS это про все, но в основном про вопрос: зачем ты это делаешь, если лучше бы ты этого не делал

ну yagni это перефразировано KISS

одно другому дополняет

Google
Артур Евгеньевич
22.01.2018
12:59:15
так темплейт метод тоже не нужен)

Sergey
22.01.2018
12:59:25
в целом да, можно заменить

а вообще лучше интерфейсы + делегирование

Mykola
22.01.2018
13:00:13
тайпкласы все дела

Anton
23.01.2018
09:15:40
https://habrahabr.ru/post/347242/

Артур Евгеньевич
23.01.2018
09:17:45
https://habrahabr.ru/post/347242/
как то он своеобразно каплинг и кохижн описа)

Sergey
23.01.2018
09:18:32
https://habrahabr.ru/post/347242/
> Не усложняй код без веской причины имееся в виду не реализация кода а то насколько им удобно пользоваться

Dmitriy
23.01.2018
09:18:49
чото както не то

KISS так вообще не попал

Anton
23.01.2018
09:19:11
как бы вы кратко описали kiss?

Sergey
23.01.2018
09:19:20
http://cdn.qacqoc.com/wp-content/uploads/2017/05/USB-Type-C-vs-USB-3.0-What%E2%80%99s-the-difference-687x350.jpg

справа - kiss соблюден, слева - много сломаных портов

Alexandr
23.01.2018
09:20:33
а справа эт чо? О_о

Mykola
23.01.2018
09:20:48
чото сложное

Олег
23.01.2018
09:20:48
usb c

Sergey
23.01.2018
09:20:49
а справа эт чо? О_о
usb type-c разумеется

Alexandr
23.01.2018
09:21:03
usb type-c разумеется
ни разу не видел))

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