
Aleh
06.05.2017
13:17:52
не было известно про страусов и про пингвинов

Sergey
06.05.2017
13:18:04
короч ты не можешь подставить квадрат вместо прямоугольника что бы никто ничего не заметил)

Andrey
06.05.2017
13:19:05

Google

Sergey
06.05.2017
13:19:42
хочешь избежать проблем с подтипами - не плоди подтипов

Andrey
06.05.2017
13:21:04
не было известно про страусов и про пингвинов
А про куриц? Тех же гусей. С большой натяжкой можно сказать, что они летают. Страус тоже "летит" во время бега, когда ноги земли не касаются ))) есть же "водоплавающие", почему не может быть "летающих"?

Aleh
06.05.2017
13:21:25
были ТОЛЬКО летающие
это очень важно

Andrey
06.05.2017
13:22:12

Sergey
06.05.2017
13:22:55

Aliaksandr
06.05.2017
13:23:10
Все ваши беды от смешивания. Объект это про состояние. У птицы есть крылья. А интерфейс это про активность. Некоторые махая могут лететь.

Sergey
06.05.2017
13:23:31

Andrey
06.05.2017
13:23:44

Sergey
06.05.2017
13:23:45
да и потом

Google

Aleh
06.05.2017
13:24:19
на определенном этапе было удобно считать всех птиц летающими
проблем перейти к пингвинам нет никаких
но юные погромисты могут взять и отнаследовать
про это и говорит принцип

Sergey
06.05.2017
13:26:17

Andrey
06.05.2017
13:26:18

Артур Евгеньевич
06.05.2017
13:26:25
делал ты програмку для архитекторов, чтобы проектировать как окна будут на стене сомтретсья. Был сначал класс окно, ты решил что оно прямоугольное и добавил к нему методы increaseWidth потом добавил дочерний клас квадратное окно, и решил что его можно подставить. Ну все юзер выбирает в интерфейсе твое новое окно нажимает увеличить ширину, и хуякс ловит исключение

Sergey
06.05.2017
13:26:31
надо рефакторить
только я бы не с исключением пример приводил а просто ты дергаешь "increaseWidth" а оно бац и высоту увеличивает и окно уже не влазит в проем


Артур Евгеньевич
06.05.2017
13:27:39
??
это если мы переопределили бы метод increaseWidth и вызывали бы в нем метод увеличения всех стороно тогда бы оно вылезло из габаритов
а поидее у квадрата не должно е быть его

Andrey
06.05.2017
13:30:33

Артур Евгеньевич
06.05.2017
13:32:30
ну так solid и есть же про проектирвоание)

Andrey
06.05.2017
13:35:22
ну так solid и есть же про проектирвоание)
Ну это понятно, непонятно почему квадрат нельзя наследовать ))) или прямоугольник, у которого стороны меняются в некоторой пропорции (квадрат тогда частный случай будет)

Артур Евгеньевич
06.05.2017
13:36:52
если вводить класс "прямоугольник, у которого стороны меняются в некоторой пропорции" то тут уже можно унаследоваться))
я вовсяком случае не могу сходу придумать ограничение

Google

Andrey
06.05.2017
13:39:00
Так этот класс будет наследником прямоугольника, т.к. я не вижу причин его не наследовать ))) и будет тогда класс, у которого стороны можно менять независимо. Тогда пример будет мимо, т.к. будут сравниваться разные дети, а не родитель с ребенком

Артур Евгеньевич
06.05.2017
13:40:30
типо прямоугольник -> прямоугольник с пропорциональнымИзменениеСторон - Квадрат ?
тогда здес лсп нарушается типо прямоугольник -> прямоугольникСПропорциональнымИзменениеСторон
это то что Сергей говорил про инвариативность

Andrey
06.05.2017
13:42:20
Нет, рядом будет класс, у которого стороны меняются независимо. Это дети, а не родитель с ребёнком, проблемы тогда нет, т.к. ветки наследования разные
Самому прямоугольнику плевать как стороны меняются, они у него просто есть, на этом все. Остальное ему приписал зачем-то разработчик. Пора рефакторить значит

Sergey
06.05.2017
13:49:17
ты никогда upfront такие вещи заложить не сможешь и учесть все
ну и как бы нарушение LSP тебе подсказка что это должен быть другой тип совсем

Andrey
06.05.2017
13:50:28

Sergey
06.05.2017
13:52:33
ну то есть у квадрата и прямоугольника просто не должно быть общего типа. Или же общий этот тип не должен регламентировать поведение изменения размера
все остальное - нарушение LSP

Andrey
06.05.2017
13:54:15

Sergey
06.05.2017
13:54:33
не надо наследоваться от прямоугольника

Andrey
06.05.2017
13:55:18
какую обязанность?)
Что он может независимо менять свои стороны. Я же выше писал - плевать ему на стороны

Sergey
06.05.2017
13:55:29

Google

Andrey
06.05.2017
13:55:37

Like
06.05.2017
13:56:13
Прямоугольник и квадрат две разные сущности
Тут даже нарушения DRY особо не будет, зачем наследоваться?

Andrey
06.05.2017
13:56:20

Like
06.05.2017
13:57:49

Alex Фэils?︙
06.05.2017
13:58:07
трейт у квадрата есть, которого нет у прямоугольника
вот надо делать фигуру с такими трейтами (св-вами

Like
06.05.2017
13:58:23
Хорошо, в любом случае - зачем наследоваться?

Sergey
06.05.2017
13:58:29

Admin
ERROR: S client not available

Like
06.05.2017
13:59:01

Andrey
06.05.2017
13:59:03

Sergey
06.05.2017
13:59:23
они полностью независимые сущности.
если тебе нужен тип Shape то тогда все эти инварианты надо задавать в каком-то другом типе, и передавать характеристики шэйпов в качестве параметров
пример - студенты, учителя. Они не наследуются от человека. Это человек с массивом ролей.

Alex Фэils?︙
06.05.2017
14:01:10

Sergey
06.05.2017
14:01:25

Google

Sergey
06.05.2017
14:01:46
и забудем о них)

Alex Фэils?︙
06.05.2017
14:02:15
и передают как параметр шаблона

Sergey
06.05.2017
14:02:44

Like
06.05.2017
14:04:20

Alex Фэils?︙
06.05.2017
14:04:24
c++

Like
06.05.2017
14:04:35

Andrey
06.05.2017
14:04:42

Alex Фэils?︙
06.05.2017
14:04:44

Sergey
06.05.2017
14:09:25
то есть ничего "неявного" не происходит
у квадрата как ни странно больше общего с кругом в этом плане нежели с прямоугольником)

Sergei
06.05.2017
14:12:20
:)

Andrey
06.05.2017
14:15:11
то есть ничего "неявного" не происходит
Неявно подразумевалось, что ресайз у прямоугольника меняет только одну сторону (или что птица летает), мы это неявное убрали из общего типа, переместили в подкласс, который это неявное содержит явно. Т.е. если летающие птицы, значит все птицы и правда летают, пингвину там делать нечего. Квадрат - это прямоугольник, а то, что стороны меняются независимо - на прямоугольник зря навесили, это в подкласса должно быть
Вот при таком подходе же можно наследовать? )))

Aleh
06.05.2017
14:17:24

Paul
06.05.2017
14:17:45
Быстрофикс )

Sergey
06.05.2017
14:18:11
либо это не часть базового типа (вообще левак) но тогда вообще не понятно зачем мы наследуемся

Andrey
06.05.2017
14:30:04

Aleh
06.05.2017
14:30:50
Нет правила нельзя наследовать квадрат от прямоугольника
Есть правило подстановки Дисков