@oop_ru

Страница 318 из 785
Андрэ
15.08.2017
17:33:30
бгг)

Sergey
15.08.2017
17:33:37
вопрос то про иерархию типов

как правильно абстракцию выбрать

Google
Den
15.08.2017
17:34:30
Только я не вижу разницы с моим и твоим способом хранения - решение было бы одинаковым

Sergey
15.08.2017
17:35:21
Только я не вижу разницы с моим и твоим способом хранения - решение было бы одинаковым
вся загвоздка как раз в том что исходя из задачи ты строишь иерархию типов, а не наоборот. ты предложил вариант не зная контекста, и упорно отстаиваешь его, хоть и делаешь допущения что "ну да вот тут надо наверное по другому"

вот это больше всего напрягает

Jan
16.08.2017
08:35:59
interface Measure { public function value(): float; public function unit(): string; } interface Point { public function x(): float; public function y(): float; public function z(): float; } interface Shape { public function width(): Measure; public function height(): Measure; public function coordinates(): Point; } interface FlatShape extends Shape { public function square(): Measure; } interface ThreeDimensionalShape extends Shape { public function depth(): Measure; public function volume(): Measure; }

Max
16.08.2017
09:06:09
Фигура устроена сложнее. Она характеризуется количеством граней всех измерений от 0 до n, где n — измерение фигуры. Дальше углами между гранями разных измерений.

И это только про один вид фигур, где есть вообще понятие грани.

Aleh
16.08.2017
09:07:01
Или сферой

Max
16.08.2017
09:08:53
Там другие характеристики.

Именно поэтому все попытки выделить абстрактный класс "Фигура" редко увенчиваются успехом

Т.е. для какой-то конкретной задачи, типа, пройдет ли фигура в дверь можно сделать ряд упрощений и оставить только максимальную высоту и максимальную ширину.

Т.е. вписать фигуру в прямоугольник.

Тогда стоит задать только один интерфейс, типа: getMaximumHeight(): float getMaximumWidth(): float И каждую фигуру делать, как отдельный конечный класс со своим набором параметров в конструкторе и реализацией этого интерфейса.

Google
Max
16.08.2017
09:18:27
Под "максимальной" шириной имею в виду, например длинну основания треугольника, или диаметр для окружности. А то понятие "ширина" и "максимальная ширина" не четкие.

А то можно квадрат на 45 градусов повернуть и сказать, что диагонали — это его максимальная ширина.

Danil
16.08.2017
09:23:00
второй день про эти прямоугольники

Evgeniy
16.08.2017
09:25:50
ну это классика

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

и о том как хуево наследование в итоге)

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

Nik
16.08.2017
11:26:31
все еще не понял, чем моя не подошла и в чем соль

ну так вот, тащемта https://ideone.com/BivRnc

что-то как-то я так и не вижу решения моей задачи с дверями

Sergey
16.08.2017
11:39:30
все еще не понял, чем моя не подошла и в чем соль
соль в том что бы выбирать интерфейсы/ирерахию типов исходя из требуемого поведения а не основываясь на интуиции в духе "ну любой квадртат это прямоугольник"

Rodion
16.08.2017
13:15:03
print('' if result else 'Не', 'Влезает') о - оптимизация)

Nik
16.08.2017
13:18:28
тем что там нет объектов)
Ну, массив кортежей тоже вполне себе объект)

Зачем здесь вообще интерфейсы и иерархия? Фигура описывается списком ее вершин

Если у вас окружность - ну, апроксимировать ее с какой-то точностью

Nik
16.08.2017
13:23:52
А дверь у нас не в пространстве?

Aleh
16.08.2017
13:23:52
Зачем здесь вообще интерфейсы и иерархия? Фигура описывается списком ее вершин
с тем, что это простое упражнение на понимание ошибок и вообще работы с созданием иерархий :)

Max
16.08.2017
13:29:11
А дверь у нас не в пространстве?
Можно поместить ее в пространство зная ее размеры. Но зачем? Как описать тогда окружность в пространстве?

Google
Nik
16.08.2017
13:48:52
Зачем? Для решения задачи, зачем же еще

Про окружность уже сказал - апроксимируем.

val
16.08.2017
14:06:31
каждая простая фигура может сообщить о габаритах своей проекции на плоскость под заданным углом, не?

Max
16.08.2017
14:41:21
Ну, и это забавно: 1. Берем прямоугольник A x B или откружность радиусом R 2. Помещаем их в пространство, чтобы узнать координаты. 3. Проектируем на плоскость, чтобы узнать габариты.

Sergey
16.08.2017
15:36:42
Ну, массив кортежей тоже вполне себе объект)
нет, это структура данных. объекты они как бы и данные и поведение в себе хранят. Хотя если мы абстрагируемся и не будем учитывать контекст (ну мол изолированный тред например) то да, все валидно

Saen
16.08.2017
16:55:40
так че, пора кучи обсужадть чтоль

Sergey
16.08.2017
16:56:02
кучи? ты про хип?

Saen
16.08.2017
16:56:11
ну

Sergey
16.08.2017
16:56:15
если да то наверное не тот чат)

Saen
16.08.2017
16:56:21
та да

Sergey
16.08.2017
16:56:57
или что-то такое

на ход подаются размеры дверного проема

например

а "форма" сама определяет влезет она или нет

shape.isFitIn(door)

что-то в этом духе

Nik
16.08.2017
16:57:58
ну можно его завернуть в класс, конечно

Google
Nik
16.08.2017
16:58:03
суть не измениться

Sergey
16.08.2017
16:58:11
суть в полиморфизме

полиморфизм можно разными способами обеспечить

Nik
16.08.2017
16:58:33
Логичнее кстати было бы door.IsFittedFor(shape);

shape.isFitIn(door)

Sergey
16.08.2017
16:58:44
ну или поясни

Saen
16.08.2017
16:59:27
не, сергей ровно написал

Admin
ERROR: S client not available

Saen
16.08.2017
16:59:47
фигару.посеститьсяВ(дверь)

Nik
16.08.2017
16:59:50
суть в полиморфизме
который непонятно зачем здесь нужен

Мне кажется, фигура должна инкапсулировать в себе свое состояние. А поведение фигуры - это, ну там, вычислить свою площадь

А вот поведение двери - это уже проверять, влазят ли в не фигуры

Saen
16.08.2017
17:02:03
ну если фигура должны помещаться только в дверь то серега верно написал. если во все что угодно то можно и shape.isFitIn(someObj)

тоесть дверь это как пример

был

там пиши че хош

ожидай там некий интерфейс и вуаля, полиморфненько

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

Max
16.08.2017
17:17:41
shape.isFitIn(door)
Это ни задача фигуры, ни задача двери — решить, поместится ли фигура в дверь.

Google
Saen
16.08.2017
17:18:12
я б сказал зависит от ситуации и контекста

нужен менеджер или нет это от задачи

Max
16.08.2017
17:18:42
Например, в каком контексте это может быть задача фигуры?

Я понимаю, если вы скажете, что это зависит от ситуации, стоит ли заморачиваться на правильное решение или впихнуть этот метод в класс фигуры.

Но в этом случае вы создаете зависимость фигуры от двери.

Точнее, вы наделяете фигуру знаниями об интерфейсе двери. Что должно сразу настораживать.

Saen
16.08.2017
17:22:52
вощем. в 100% случаях менеджера какогонить можно втулить. но это усложнение системы. если система изначально не предполагается что там будет более чем напрмер 3 сущностей то менеджер это скорее излишество чем необходимость, если конечная задача сделать на все случаи жизни то менеджер, если сделать оптимально по трудозатратам то я бы лепил в объектах\интерфейсах кто что может друг у друга проверять

тоесть, вопрос в том разводим ли мы бюрократию или нет

в малых системах нет необходимости, в больших без этого никак

Saen
16.08.2017
17:24:57
расскажи, как надо?

Sergey
16.08.2017
17:25:27
разделять ответственности по объектам

)

а не заводить "сборник процедур с названием менеджеры"

Saen
16.08.2017
17:26:17
это вощем можно свести к тому как управлять, вертикаль власти или самоуправление

Max
16.08.2017
17:27:17
Вы решаете какую-то задачу, в ее контексте и происходит определение того, влазит ли фигура в дверь. Поэтому и логика должна быть в классе решения этой задачи.

Просто не нужно называть его менеджером.

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