@oop_ru

Страница 466 из 785
Ilia
22.01.2018
11:08:44
Ну, ОК.

Sergey
22.01.2018
11:08:45
если не согласен - приводи аргументацию

Sergey
22.01.2018
11:08:52
Так ты написал, ты и поясняй... По-моему так всё ровно наоборот...
Я написал так как я считаю. И я почти что цитирую Clean architecture. Ты несогласен, но не аргументируешь. Все еще считаешь что я тебе чето должен пояснять?

Ilia
22.01.2018
11:09:36
Да почему я-то должен приводить аргументацию против чужой гипотезы? Путь лучше автор гипотезы приводит аргументацию ЗА свою гипотезу.

Google
andretshurotshka?❄️кде
22.01.2018
11:10:01
О фпшники

Ilia
22.01.2018
11:10:11
ГДЕ?

Mykola
22.01.2018
11:10:15
приветы! я пропускаю какой-то срач)

andretshurotshka?❄️кде
22.01.2018
11:10:19
Mykola
22.01.2018
11:10:20
о чем спор?

Maksim
22.01.2018
11:10:39
о чем спор?
как всегда) чей ООП длиннее)

Sergey
22.01.2018
11:10:48
о чем спор?
человек утверждает что композиция проще допускает нарушение LSP нежели наследование

Mykola
22.01.2018
11:11:02
ы?

Ilia
22.01.2018
11:11:17
Maksim
22.01.2018
11:11:31
У меня ООП 20!
стыдно должно быть)

Mykola
22.01.2018
11:11:34
а какая композиция имеется ввиду и почему она нарушает?

Google
Mykola
22.01.2018
11:12:30
и какая связь между композицией и наследованием? :)))

Ilia
22.01.2018
11:13:26
и какая связь между композицией и наследованием? :)))
Ну, наследование можно реализовывать композицией. Теоретически. Но вот как раз LSP при этом не гарантируется.

Ну ладно.

Sergey
22.01.2018
11:15:25
Ох уж отнаследовавшись то, да заоверрайдив два метода из трех по любасу LSP гарантируется, ага.

Ilia
22.01.2018
11:16:53
Ох уж отнаследовавшись то, да заоверрайдив два метода из трех по любасу LSP гарантируется, ага.
LSP при этом нарушаться не будет. Будет лишь возможно наблюдаться нежелаемое поведение.

Sergey
22.01.2018
11:17:27
Adel
22.01.2018
11:17:43
вообще говоря я, затеяв этот спор наследование предполагал ТОЛЬКО абстрактных классов и ТОЛЬКО реализация абстрактных методов.

Борис
22.01.2018
11:17:59
LSP при этом нарушаться не будет. Будет лишь возможно наблюдаться нежелаемое поведение.
ЭЭЭЭ, так LSP как-раз про то, чтобы нежелаемого поведения НЕ было )))

Ilia
22.01.2018
11:18:09
Нет

Борис
22.01.2018
11:18:29
Ну, тогда расскажи, что у тебя за LSP

Sergey
22.01.2018
11:18:31
class Foo extends Bar { public function doStuff() { throw new Exception('LSP is fo pussies') } }

контракт нарушен, сигнатуры не нарушены

Mykola
22.01.2018
11:18:51
ексепшны не про ооп, извиняйте

Sergey
22.01.2018
11:19:25
ексепшны не про ооп, извиняйте
ну да, но это предмет отдельной дискуссии)

Mykola
22.01.2018
11:19:37
ок ок, так а где контракт то нарушен?

Sergey
22.01.2018
11:19:37
или вот еще пример

давай с более явным контрактом

Sergey
22.01.2018
11:20:17
class Foo extends Bar { public function doStuff() { throw new Exception('LSP is fo pussies') } }
Помутируй какое нить протектед поле лучше - более репрезентативный пример

Google
Sergey
22.01.2018
11:20:45
abstract class Foo { bar() : integer; // должен вернуть число более нуля } class FuckLSP extends Foo { bar(): integer { return -1 } }

Ilia
22.01.2018
11:21:20
Ну, тогда расскажи, что у тебя за LSP
У меня стандартый, почитай в википедии напр.

Mykola
22.01.2018
11:21:21
эм, лсп не нарушен

коментарии не наследуются

Sergey
22.01.2018
11:21:46
эм, лсп не нарушен
базовый тип регламентирует контракт

Ilia
22.01.2018
11:21:49
ЭЭЭЭ, так LSP как-раз про то, чтобы нежелаемого поведения НЕ было )))
Не путай нежелательное поведение и невалидную программу.

Sergey
22.01.2018
11:21:50
нет?

andretshurotshka?❄️кде
22.01.2018
11:22:00
хорошо когда нет сабтайпинга

Mykola
22.01.2018
11:22:06
регламентирует тип, а не коментарий к нему

andretshurotshka?❄️кде
22.01.2018
11:22:07
никакого LSP не нарушается

Mykola
22.01.2018
11:22:35
у тебя там интеджер, и в наследнике интеджер, все ок

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

Борис
22.01.2018
11:22:41
У меня стандартый, почитай в википедии напр.
Братан, не поверишь, все кто тебе доказывают, что ты не прав, думают так же. А так как ты один, будь добр, поясни как ты понял то, что написано в Википедии

хорошо когда нет сабтайпинга
???? (Негр палец к виску)

Sergey
22.01.2018
11:23:08
у тебя там интеджер, и в наследнике интеджер, все ок
....LSP не про то как твой язык позволяет манипулировать типами, он про контракты. Посткондишен пошел лесом - нарушен LSP

Ilia
22.01.2018
11:23:13
контракт нарушен, сигнатуры не нарушены
Классно, обсуждаем нарушение того, чего даже не знаем... На самом деле нарушен, об этом напрямую указывается в источниках

Sergey
22.01.2018
11:23:50
Классно, обсуждаем нарушение того, чего даже не знаем... На самом деле нарушен, об этом напрямую указывается в источниках
код компилится - значит все хорошо с сингатурами. То что в рантайме поведение некорректное - это уже нарушение контракта

Google
Sergey
22.01.2018
11:24:07
которое про контракты, про то как код себя в рантайме ведет

Mykola
22.01.2018
11:24:20
дык, нельзя просто о лсп говорить, надо говорить о том, к чему он относится

Sergey
22.01.2018
11:24:25
Не путай нежелательное поведение и невалидную программу.
Ты в курсе что такое square rectangle problem? Квадратик тоже можно сделать наследничком прямоугольника, и это будет даже валидная программа. Только вот не всегда он не будет нарушать LSP

Mykola
22.01.2018
11:24:50
я могу постулировать нарушение лсп просто так, в любом случае, потому что я так захотел определить лсп

Adel
22.01.2018
11:25:00
код компилится - значит все хорошо с сингатурами. То что в рантайме поведение некорректное - это уже нарушение контракта
контракт должен быть отражен в коде. то, что написано в комментарии - какой-то недоконтракт.

Sergey
22.01.2018
11:25:16
увы

Admin
ERROR: S client not available

Adel
22.01.2018
11:25:37
да. но надо стараться. @NotNull и т.д. :)

Mykola
22.01.2018
11:26:16
увы
именно по этому не стоит даже говорить о том, что мы нарушаем лсп там, где мы не определили контракт

Sergey
22.01.2018
11:26:19
Sergey
22.01.2018
11:26:36
ну я понял, тут собрались любители DbC и AOP

Sergey
22.01.2018
11:27:05
ну так с херали они подтипы

Adel
22.01.2018
11:27:05
ну я понял, тут собрались любители DbC и AOP
вообще, я на вашей стороне. как я уже обьяснил, я за наследование, но только абстрактных классов и реализуя только абстрактные методы.

Sergey
22.01.2018
11:27:16
если юзер решает какой метод вызвать

Sergey
22.01.2018
11:27:21
ну так с херали они подтипы
Ну я об этом и говорю

Google
Aleh
22.01.2018
11:27:30
именно по этому не стоит даже говорить о том, что мы нарушаем лсп там, где мы не определили контракт
нарушение лсп и возможности тайпсистемы языка немного не одно и тоже

Sergey
22.01.2018
11:27:38
Это скрин с clean architecture - пример как раз нарушения принципа LSP

Adel
22.01.2018
11:28:02
Так а в чем плюс такого подхода перед интерфейсами?
я уже пытался обьяснить. в нужных ограничениях. но спорить на эту тему больше не буду

Maksim
22.01.2018
11:28:32
Так а в чем плюс такого подхода перед интерфейсами?
нету никаких плюсов) вот прям совсем никаких)

Sergey
22.01.2018
11:28:37
я уже пытался обьяснить. в нужных ограничениях. но спорить на эту тему больше не буду
да но эти ограничения на уровне конвеншена, ну то есть я не вижу отсутствия возможности чернь сделать

Sergey
22.01.2018
11:28:43
Aleh
22.01.2018
11:28:54
Sergey
22.01.2018
11:29:08
но суть именно в этом, не?
просто у тебя проф деформация из-за желания контракты явно в коде формализовать)

Adel
22.01.2018
11:29:10
да но эти ограничения на уровне конвеншена, ну то есть я не вижу отсутствия возможности чернь сделать
оно в итоге вынуждает использоать композицию вместо наследования :)

Артур Евгеньевич
22.01.2018
11:29:25
Mykola
22.01.2018
11:29:28
почему нет? есть система типов, есть наследование, есть контракты, иногда одно с другим не вяжется, а вы пытаетесь его туда засунуть)

Maksim
22.01.2018
11:29:43
и даже не намекает на сие

Sergey
22.01.2018
11:30:19
почему нет? есть система типов, есть наследование, есть контракты, иногда одно с другим не вяжется, а вы пытаетесь его туда засунуть)
но LSP не про системы типов твоего языка, оно только про контракты. Тот факт что ты можешь формализовать тройку Хоара через систему типов твоего языка - ну круто, но это совершенно другая история

Sergey
22.01.2018
11:30:59
более того, в таком случае оба варианта - и композиция и наследование - будут обладать примерно одинаковыми шансами нарушить LSP

Adel
22.01.2018
11:31:06
и даже не намекает на сие
у тебя есть LoggerInterface и некий класс OldLogger, который вообще не знает об этом интерфейсе. любой новичок тутже сделает class MyLogger extends OldLogger implements LoggerInterface.

Aleh
22.01.2018
11:32:05
почему нет? есть система типов, есть наследование, есть контракты, иногда одно с другим не вяжется, а вы пытаетесь его туда засунуть)
так лсп буквально: вот принцип как можно делать подтипы, к сожалению для некоторых языков еще нет статических анализаторов или вообще нет возможности контракт описать в типе, так что принцип знайте и проверяйте сами

Mykola
22.01.2018
11:33:01
давайте тогда абстрагируемся от "классов" и "интерфейсов", и определим лсп нормально: конкретизация не должна ломать совместимость с абстракицей

все

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