@oop_ru

Страница 200 из 785
Andrey
06.05.2017
14:35:21
Так вот опять к исходному вопросу тогда: почему нельзя квадрат от прямоугольника? )) все возможные косяки из-за не корректного проектирования, которое можно исправить выделив левое поведение в подкласс

f4rt~
06.05.2017
14:36:03
класс же должен дополнять а не менять поведение родительского

Артур Евгеньевич
06.05.2017
14:36:10
???

Google
Andrey
06.05.2017
14:36:39
Нет правила нельзя наследовать квадрат от прямоугольника
Этот пример приводят как пример нарушения, мне это не нравится, потому что не понимаю почем

Aleh
06.05.2017
14:36:41
Есть то, что отвечает сейчас требованиям

Aliaksandr
06.05.2017
14:36:51
Квадрат это прямоугольник. Для него не нужен новый класс.

Andrey
06.05.2017
14:37:44
Квадрат это прямоугольник. Для него не нужен новый класс.
Нужен, чтобы явно закрепить требование равности сторон

Иначе опять все неявное будет, опять косяки ловить будем

У нас была реализация платежки, где вносимая сумма на счёт и сумма, которую надо было за это заплатить была в одном поле. А потом надо было вносить больше чем платишь и я замучался искать где что значит. Было бы сделано даже одним полем, но чтобы оно получалось через разные методы - было бы все легко и просто. А так из-за неявности только проблем себе создали

Aliaksandr
06.05.2017
14:51:25
Нужен, чтобы явно закрепить требование равности сторон
Это отменяет то, что квадрат это прямоугольник? Нет. Все свойства будут у него верные если просто корректные длины сторон будут.

Andrey
06.05.2017
15:03:03
Квадрат как раз это и будет гарантировать ) иначе вообще можно скатиться до того, что работать будем напрямую с "фигурой". А че за фигура - фиг его знает. Главное, чтобы у неё количество сторон и углы были корректными

Алексей
06.05.2017
15:05:32
Это отменяет то, что квадрат это прямоугольник? Нет. Все свойства будут у него верные если просто корректные длины сторон будут.
Квадрат и прямоугольник имеют разную гиометрию и из за этого разный алгоритм подсчета площади. Когда проектируете систему нужно грамотно уметь делить на абстракции. LSP в помощь

Aliaksandr
06.05.2017
15:07:20
Квадрат и прямоугольник имеют разную гиометрию и из за этого разный алгоритм подсчета площади. Когда проектируете систему нужно грамотно уметь делить на абстракции. LSP в помощь
Гиометрию? Серьёзно? Разный алгоритм? Снова серьёзно? Если привели пример не отражающий проблемы, то зачем защищать его? Раз уж разный алгоритм, то очень интересно увидеть собственно разницу.

Aliaksandr
06.05.2017
15:09:58
Вам напомнить как можно посчитать площадь квадрата и как посчитать площать прощадь прямоугольника?
Да, очень не помешало бы. Особенно не помешало бы пояснение, почему находя площадь прямоугольника мы так же площать квадрата найти не можем.

Алексей
06.05.2017
15:12:30
Да, очень не помешало бы. Особенно не помешало бы пояснение, почему находя площадь прямоугольника мы так же площать квадрата найти не можем.
Алгоритм разный. Да можно к примеру у квадрата завести ширину и высоту но это будет некоректной абстракцией. Нам придется писать много глупово кода чтобы это все заработало (следить чтобы ширина не отличалась от высоты)

Google
Like
06.05.2017
15:13:22
Да что спорить, блин Фигура: сущность Сущность - класс Просто парень вбил себе в голову, что здесь должно быть наследование (хер пойми почему)

Andrey
06.05.2017
15:24:04
Да что спорить, блин Фигура: сущность Сущность - класс Просто парень вбил себе в голову, что здесь должно быть наследование (хер пойми почему)
А почему его не должно быть? Вот с птицами моя мысль может более понятная? Там косяк в том, что летать засунули - убрали летать, убрали нарушение. Здесь так же: перенесли разные размеры ниже - убрали нарушение

Sergey
06.05.2017
15:28:56
попробуй теперь пофиксить "метабализм"

ну мол например у тебя механическая птица

Like
06.05.2017
15:29:30
нет, просто перенесли поведение в отдельный тип
Проще адаптер залипить :D (и потом каждый раз это делать)

Sergey
06.05.2017
15:29:33
она и летать не может и не жрет

Like
06.05.2017
15:29:46
Sergey
06.05.2017
15:30:03
но тогда у тебя ифов будет много

короч там замута вся в том что бы добиться полиморфизма и при этом не нарушить LSP

тогда if-ов становится намного меньше

Sergey
06.05.2017
15:35:04
Насколько часто жертвуют lsp ? )
осознанно - никогда)

по опыту могу сказать что если даже ты нарушил специально - оно быстро аукнется

Andrey
06.05.2017
15:35:36
Насколько часто жертвуют lsp ? )
Недавно лекцию видел, там говорили что apple на него в какой-то вьюхе вроде забили. Типа у всех можно альфа сделать, а именно у этой нельзя и то ли ошибка будет, то ли поведение какое-то фиговое

Google
Sergey
06.05.2017
15:36:24
ну мол BC нарушится

Aleh
06.05.2017
15:37:24
Выделяется интерфейс

И пилятся пара адаптеров

Sergey
06.05.2017
15:38:51
ну тут надо уже детали курить

Aleh
06.05.2017
15:39:18
Ну да

Andrey
06.05.2017
15:40:35
ну мол например у тебя механическая птица
Я бы ввёл что-то типа "похожее на птицу" и через него разруливал, если это действительно надо, а не просто "о, птица!"

Aleh
06.05.2017
15:41:31
Я бы ввёл что-то типа "похожее на птицу" и через него разруливал, если это действительно надо, а не просто "о, птица!"
Вероятно тебе надо думать, а что тебе надо. Изучать короче общение твоих объектов надо

Andrey
06.05.2017
15:45:09
Ну я просто на механическую птицу ответил, мне ни мёртвые, ни живые не нужны ))) а вообще хотел бы исходный пример понять. Вот выше написали, что пример проблему не отражает, это все объясняет )

da horsie
06.05.2017
18:39:59
Квадрат это прямоугольник. Для него не нужен новый класс.
Квадрат это прямоугольник. У них нет поведения. А у классов Square и Rectangle есть. Классы, представляющие объекты из реального мира, это не то же самое, что сами объекты. Поэтому классы подчиняются другим правилам, сообразно своему поведению. LSP именно об этом.

Sergey
06.05.2017
18:41:10
замени на "тип"

хотя бы

da horsie
06.05.2017
18:42:31
Ты не по адресу придираешься ;)

Evgeniy
06.05.2017
18:43:05
как может класс представлять объект?)

может наоборот объект это частный случай класса ( с конкретным состоянием)

Sergey
06.05.2017
18:43:41
Ты не по адресу придираешься ;)
меня бесит штука с "класс представляющий объекты из реального мира"

эта трактовка как по мне приносит намного больше вреда чем какой либо пользы

Google
Sergey
06.05.2017
18:44:24
может наоборот объект это частный случай класса ( с конкретным состоянием)
класс = рисунок объекта. Это статическая репрезентация объекта и только. Деталь реализации. Они не важны

da horsie
06.05.2017
18:44:58
Блин

Evgeniy
06.05.2017
18:45:14
о сейчас ФП ворвется)

da horsie
06.05.2017
18:49:10
Ок, не класс. Назовем это "поведение".

Sergey
06.05.2017
18:49:25
Какой вред?
в понимании.

Алексей
06.05.2017
18:49:34
о сейчас ФП ворвется)
Prototype inheritance (Self, JavaScript)

Admin
ERROR: S client not available

Sergey
06.05.2017
18:49:51
поведение будем представлять в качестве типов

da horsie
06.05.2017
18:50:09
И не из реального мира, а воплощение некоей идеи в коде

Sergey
06.05.2017
18:50:12
"подтип" - это объект который по другому реализует "такое же" поведение.

da horsie
06.05.2017
18:50:35
Я не о том говорил вообще

Evgeniy
06.05.2017
18:50:42
сколько людей не вижу у всех свои взгляды на ооп и каждый в чем то прав)

надо сделать большой словарь терминов)))

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

da horsie
06.05.2017
18:51:21
А о том, что требования к буковкам кода на ооп-языке отличается от требований к идеям, которые эти буковки должны представлять

Google
Sergey
06.05.2017
18:51:55
ну то есть и да и нет

Алексей
06.05.2017
18:52:04
Они уже есть. Для обьектов, типов и классов. Проблема в более высокоуровневых концепциях

da horsie
06.05.2017
18:52:46
ну то есть и да и нет
Да. Даже эванс об этом пишет во второй главе

Sergey
06.05.2017
18:52:56
когда ты говоришь "квадрат это такой прямоугольник у которого все стороны равны" ты не декларируешь иерархию типов. Ты описываешь различия по которым можно отличить квадрат от прямоугольника.

по сути это два абсолютно разных объекта которым просто повезло иметь некоторые схожие характеристики которые делают их визуально похожими

da horsie
06.05.2017
18:53:53
И дядя боб или кто там приводит пример с адвокатами, представляющими мужа и жену, которые разводятся в суде

Сами адвокаты при этом не муж и жена и не разводятся

Sergey
06.05.2017
18:54:25
хм... хороший пример

Evgeniy
06.05.2017
18:54:38
опять квадрат vs прямоугольник)

Sergey
06.05.2017
18:54:58
ладно, я согласен с @f3ath

Alex Фэils?︙
06.05.2017
18:56:30
опять квадрат vs прямоугольник)
в итоге какой финальный вариант?

Evgeniy
06.05.2017
18:56:51
это треугольник, расходимся)

а если серьезно я не знаю

я просто програмист)

da horsie
06.05.2017
19:00:11
в итоге какой финальный вариант?
Квадрат это прямоугольник. Объект квадрат это не всегда наследник объекта прямоугольник.

Когда именно - зависит от конкретного поведения объектов

Sergey
06.05.2017
19:01:01
требуемого*

Aliaksandr
06.05.2017
19:01:02
Может, ожидаемого?

Ну или так.

da horsie
06.05.2017
19:05:16
требуемого*
И фактического

Sergey
06.05.2017
19:05:42
зачем нам поведение объекта которое нам не нужно?

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