ООП и ветер
От: Нomunculus Россия  
Дата: 08.10.23 17:41
Оценка:
Вот проектируем мы объект, все чтоб по красоте было, удобно, инкапсуляшно, ооп-шно.

А объект этот — тряпка. Не в смысле слабохарактерного мужчины, а в прямом смысле — кусок ткани.
И хотим мы чтоб тряпка эта была ну прям как взаправдышная

Ну что мы в объект тряпки сунем? Ну, очевидно, какие-то физические и геометрические свойства, размеры, массу, плотность, гибкость и так далее. Все это — внутри тряпки. Шикарно и инкапсуляшно.

Далее для физической симуляции тряпки мы понимаем, что нам нужен… ВЕТЕР!! Но ветер блин вообще нифига не в тряпке. А без ветра вся физическая симуляция превращается в обвисшее недоразумение.

Где ж нам взять ветер? Ведь это должно быть свойство сцены. И если в сцене миллион тряпок, то поменяв одну единственную цифирьку в векторе направления ветра, все миллион тряпок должны начать двигаться иначе.

Неужели в каждой тряпке должна быть ссылка на сцену? Мы каждой тряпке должны это указывать?
Не, разумеется, проблемы нет. Но блин чо-то вся красота ООП-ти летит в задницу. В реальности тряпки не знают ничего про то, где они находятся.

Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???
Re: ООП и ветер
От: T4r4sB Россия  
Дата: 08.10.23 17:50
Оценка: +1
Здравствуйте, Нomunculus, Вы писали:

Н>Далее для физической симуляции тряпки мы понимаем, что нам нужен… ВЕТЕР!!


Тряпке не надо знать про ветер
Тряпка не двигается сама по себе, её двигает бог (GodObject), а он знает и тряпку и ветер
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[2]: ООП и ветер
От: Нomunculus Россия  
Дата: 08.10.23 17:54
Оценка:
Здравствуйте, T4r4sB, Вы писали:

О, объект класса PrimitiveSapience нарисовался
Re[2]: ООП и ветер
От: Stanislav V. Zudin Россия  
Дата: 08.10.23 17:56
Оценка: :)
Здравствуйте, T4r4sB, Вы писали:

Н>>Далее для физической симуляции тряпки мы понимаем, что нам нужен… ВЕТЕР!!


TB>Тряпке не надо знать про ветер

TB>Тряпка не двигается сама по себе, её двигает бог (GodObject), а он знает и тряпку и ветер

+1

А у тряпки может быть свойство bool canFlutter() или интерфейс IРазвевабельное IFlutterable.
_____________________
С уважением,
Stanislav V. Zudin
Отредактировано 08.10.2023 18:02 Stanislav V. Zudin . Предыдущая версия .
Re: ООП и ветер
От: Osaka  
Дата: 08.10.23 18:03
Оценка:
Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???
Тряпка состоит из Molecule[], которые .Impact(молекула ветра), после чего тряпка пересчитывает свою геометрию.
Re[2]: ООП и ветер
От: Нomunculus Россия  
Дата: 08.10.23 18:05
Оценка:
Здравствуйте, Osaka, Вы писали:

Н>>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???

O>Тряпка состоит из Molecule[], которые .Impact(молекула ветра), после чего тряпка пересчитывает свою геометрию.

То есть при смене направления ветра мы должны каждой тряпке это сказать?
Re[3]: ООП и ветер
От: T4r4sB Россия  
Дата: 08.10.23 18:05
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Здравствуйте, T4r4sB, Вы писали:


Н>О, объект класса PrimitiveSapience нарисовался


Где?
Я тебе на полном серьёзе дал совет по архитектуре
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re: ООП и ветер
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.10.23 18:07
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???


А ты поступи, как Эйнштейн. Он же списал гравитационное поле на искажение пространства. А ты на искажение пространства ветер спиши. Вот так, ветра как такового нет, есть особенности законов геометрии, которые включают в себя действие ветра.
Re[3]: ООП и ветер
От: Osaka  
Дата: 08.10.23 18:08
Оценка: +1 :)
O>>Тряпка состоит из Molecule[], которые .Impact(молекула ветра), после чего тряпка пересчитывает свою геометрию.
Н>То есть при смене направления ветра мы должны каждой тряпке это сказать?
В реальности же им узнать это больше неоткуда, gismeteo.ru они не читают.
Re[2]: ООП и ветер
От: Нomunculus Россия  
Дата: 08.10.23 18:09
Оценка:
Здравствуйте, Pzz, Вы писали:

Вопрос в том кто про что должен знать. Расчеты трепыхания тряпки должны быть внутри тряпки? Но тогда тряпка должна знать о внешнем мире. И это криво
Re[3]: ООП и ветер
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.10.23 18:13
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Вопрос в том кто про что должен знать. Расчеты трепыхания тряпки должны быть внутри тряпки? Но тогда тряпка должна знать о внешнем мире. И это криво


Ну или внешний мир должен знать про все тряпки, которые он трепещит.

Или у них должны быть pub-sub отношения: тряпка должна подписываться на трепыхания, производимые внешним миром.

Как бы то ни было, знать друг о друге они должны. Возможно путем знакомства в рантайме.
Re[3]: ООП и ветер
От: Stanislav V. Zudin Россия  
Дата: 08.10.23 18:14
Оценка: +1 :)
Здравствуйте, Нomunculus, Вы писали:

Н>Вопрос в том кто про что должен знать. Расчеты трепыхания тряпки должны быть внутри тряпки? Но тогда тряпка должна знать о внешнем мире. И это криво


Тряпка — субъект.
GodObject — манагер, который всем рулит

Тебе нужен объект КолыхательТряпки, который принимает коллекцию тряпок и занимается развеванием.
Будет ли он создаваться для каждого экземпляра тряпки или один на всех — зависит от задач.

Возможно для каждого уникального класса Тряпки нужен свой Колыхатель.
_____________________
С уважением,
Stanislav V. Zudin
Re: ООП и ветер
От: alpha21264 СССР  
Дата: 08.10.23 18:15
Оценка: -2
Здравствуйте, Нomunculus, Вы писали:

Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???


Ветер должен быть методом объекта тряпки.
И объект-хозяин (не обязательно сцена) должен при смене переменной "ветер"
у всех своих объектов (в том числе и не тряпок) дёрнуть метод "ветер".

Ну как Виджет примерно, когда ты ему resize делаешь.

Течёт вода Кубань-реки куда велят большевики.
Re: ООП и ветер
От: gyraboo  
Дата: 08.10.23 18:15
Оценка: 4 (1)
Здравствуйте, Нomunculus, Вы писали:

Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???


Во-первых, определись, ты будешь моделировать частицы или эмерджентое явление? Если частицы, то ветер возникнет сам собой как перемещение частиц воздуха. Их физическое воздействие на частицы тряпки обеспечит и колыхание тряпки, и её перемещение из-за ветра. Но моделировать частицы через ООП жирно, слишком много накладных расходов. Обычно ООП моделирует как раз таки эмерджентные явления и объекты, или являются контейнерами для управления эмерджентными свойствами массивов частиц. У тебя будет объект тряпка и объект ветер. ООП — это не только про инкапсуляцию в объектах данных и поведения, но важная роль отводится и взаимодействию объектов. Алан Кэй, отец ООП, реализовал взаимодействие объектов через события. Например, ветер дует, это вызов метода. Дуновение влияет на тряпку. Значит, метод дуновения должен генерировать событие дуновения с параметром сила и направление. Фабрика тряпки при её создании подписывает тряпку на событие дуновения, в обработчике реализуется поведение тряпки на событие дуновения с соотв. силой и направлением.
Обрати внимание, ветер, генерируя событие дуновения, не знает, кто и сколько объектов подписаны на него. Это паттерн Наблюдатель.
Кури книгу банды четырех про ООП дизайн и паттерны, а также другие книги про паттерны, там ты найдешь все ответы. Ещё рекомендую thinking in patterns Шэллоуэя, она учит думать в парадигме ООП.

Ну, и куда сунуть ветер и тряпку. Это например объект сцена, или игра, или мир.

И кстати этот мир-обьект, паттерн Синглтон, тоже генерирует события, типа гейм стартед или гейм овер, и на них подписан рендерер меню игры. Это классика ООП-парадигмы MVC.
Отредактировано 08.10.2023 18:25 gyraboo . Предыдущая версия . Еще …
Отредактировано 08.10.2023 18:23 gyraboo . Предыдущая версия .
Отредактировано 08.10.2023 18:22 gyraboo . Предыдущая версия .
Отредактировано 08.10.2023 18:20 gyraboo . Предыдущая версия .
Отредактировано 08.10.2023 18:19 gyraboo . Предыдущая версия .
Re[2]: ООП и ветер
От: alpha21264 СССР  
Дата: 08.10.23 18:18
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Тряпка не двигается сама по себе, её двигает бог (GodObject), а он знает и тряпку и ветер


Работать будет, пока у программиста не переполнится голова, которая должна помнить о всех объектах.
То есть, довольно скоро. ООП для того и изобрели, чтобы уменьшить окно, в которое нужно смотреть одномоментно.

Течёт вода Кубань-реки куда велят большевики.
Re: ООП и ветер
От: LuciferSaratov Россия  
Дата: 08.10.23 18:54
Оценка: 4 (1) +2
Здравствуйте, Нomunculus, Вы писали:

Н>Вот проектируем мы объект, все чтоб по красоте было, удобно, инкапсуляшно, ооп-шно.


Я бы применил для этого ECS.
Ветер это компонент некой entity, которая описывает область пространства.
Тряпки это entity, имеющие в себе компонент, описывающий их тряпочные параметры.
Колыхатель тряпок это система, которая для каждой тряпки определяет область пространства, где она находится, и если в этой области есть ветер, то соответственно колыхает тряпку.
В играх это отлично работает для подобных задач.
Re: ООП и ветер
От: Qulac Россия  
Дата: 08.10.23 19:06
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Вот проектируем мы объект, все чтоб по красоте было, удобно, инкапсуляшно, ооп-шно.


Н>А объект этот — тряпка. Не в смысле слабохарактерного мужчины, а в прямом смысле — кусок ткани.

Н>И хотим мы чтоб тряпка эта была ну прям как взаправдышная

Н>Ну что мы в объект тряпки сунем? Ну, очевидно, какие-то физические и геометрические свойства, размеры, массу, плотность, гибкость и так далее. Все это — внутри тряпки. Шикарно и инкапсуляшно.


Н>Далее для физической симуляции тряпки мы понимаем, что нам нужен… ВЕТЕР!! Но ветер блин вообще нифига не в тряпке. А без ветра вся физическая симуляция превращается в обвисшее недоразумение.


Н>Где ж нам взять ветер? Ведь это должно быть свойство сцены. И если в сцене миллион тряпок, то поменяв одну единственную цифирьку в векторе направления ветра, все миллион тряпок должны начать двигаться иначе.


Н>Неужели в каждой тряпке должна быть ссылка на сцену? Мы каждой тряпке должны это указывать?

Н>Не, разумеется, проблемы нет. Но блин чо-то вся красота ООП-ти летит в задницу. В реальности тряпки не знают ничего про то, где они находятся.

Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???


Как вариант: ветер получает от тряпки ее текущую форму и передает тряпке поле сил действующее на нее со стороны ветра, тряпка опять меняет форму и передает ее ветру. И так по кругу, при каждом такте от таймера
Программа – это мысли спрессованные в код
Re: ООП и ветер
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.10.23 19:35
Оценка: +2
Здравствуйте, Нomunculus, Вы писали:

Н>Не, разумеется, проблемы нет. Но блин чо-то вся красота ООП-ти летит в задницу. В реальности тряпки не знают ничего про то, где они находятся.


Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???


ООП не цель, а инструмент, потому, вопрос тут другой.

Если от программы ожидается симуляция физического процесса, то, казалось бы, следует отталкиваться от математической модели процесса, а не от объектной. Выбирая не ту модель, мы сильно рискуем не получить нужный результат. А для матмодели у нас и ветер не ветер и тряпка не тряпка. Размеры уйдут в координаты mesh-а, масса, плотность, гибкость и все такое в параметры формулы, описывающей движение узлов mesh-а. Ветер может быть задан векторным полем. В общем, сообщения между ветром и тряпкой тут вообще зачем, какую задачу они могли бы решать? В чем тут красота и удобство ООП?

ООП хорош, когда нам надо обобщить некий результат взаимодействия объектов, при множестве разных типов объектов и их поведений. Например, тряпка на ветру делает "Хлоп-хлоп", море — "ЩЩЩЩЩЩ", а гвоздь — молчит. Тряпка при воздействии молотком молчит, море — "буль", а гвоздь — "тюк". Вот тут ООП рулит.
Re: ООП и ветер
От: SkyDance Земля  
Дата: 09.10.23 02:34
Оценка:
Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???

А сколько их, этих ветров? Он, ненароком, не один на все тряпки? Если один, синглтон, то пусть все тряпки знают про него, и в методе "nextFrame" (когда идет пересчет мира) принимают его во внимание.

Если их много, передай его тряпке в конструкторе ("dependency injection") или воспользуйтся каким-нибудь ветер-локатором... тьфу, сервис-локатором.
Re: ООП и ветер
От: Разраб  
Дата: 09.10.23 03:25
Оценка: :)
Здравствуйте, Нomunculus, Вы писали:

Н>Вопрос на миллион — КУДА СУНУТЬ ВЕТЕР???


ветра нет. есть поток газа. газ это частицы, масса скорость.
интегрируем все это по тряпке.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.