
Ilia
22.01.2018
11:08:44
Ну, ОК.

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

Sergey
22.01.2018
11:08:52

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

Google

Ilia
22.01.2018
11:09:53

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
о чем спор?

Sergey
22.01.2018
11:10:38

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

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

Google

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

Sergey
22.01.2018
11:13:10

Ilia
22.01.2018
11:13:26
Ну ладно.

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

Ilia
22.01.2018
11:16:53

Sergey
22.01.2018
11:17:27

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

Sergey
22.01.2018
11:17:55

Борис
22.01.2018
11:17:59

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

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

Mykola
22.01.2018
11:21:21
эм, лсп не нарушен
коментарии не наследуются

Sergey
22.01.2018
11:21:46

Ilia
22.01.2018
11:21:49

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

Ilia
22.01.2018
11:23:13

Артур Евгеньевич
22.01.2018
11:23:46

Mykola
22.01.2018
11:23:50

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

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

Sergey
22.01.2018
11:24:52

Adel
22.01.2018
11:25:00

Sergey
22.01.2018
11:25:16
увы

Артур Евгеньевич
22.01.2018
11:25:30

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

Ilia
22.01.2018
11:26:24

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

Sergey
22.01.2018
11:26:47

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

Adel
22.01.2018
11:27:05

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

Sergey
22.01.2018
11:27:21

Google

Aleh
22.01.2018
11:27:30

Артур Евгеньевич
22.01.2018
11:27:36

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

Mykola
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

Ilia
22.01.2018
11:30:58

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
давайте тогда абстрагируемся от "классов" и "интерфейсов", и определим лсп нормально: конкретизация не должна ломать совместимость с абстракицей
все