
Андрэ
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
Зачем здесь вообще интерфейсы и иерархия? Фигура описывается списком ее вершин
Если у вас окружность - ну, апроксимировать ее с какой-то точностью

Max
16.08.2017
13:23:10

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
та да

Nik
16.08.2017
16:56:34

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 сущностей то менеджер это скорее излишество чем необходимость, если конечная задача сделать на все случаи жизни то менеджер, если сделать оптимально по трудозатратам то я бы лепил в объектах\интерфейсах кто что может друг у друга проверять
тоесть, вопрос в том разводим ли мы бюрократию или нет
в малых системах нет необходимости, в больших без этого никак

Sergey
16.08.2017
17:24:10

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

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

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

Sergey
16.08.2017
17:26:34

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

Sergey
16.08.2017
17:27:39
не, это неверно