Я пытаюсь разработать несколько простых живых симуляций, используя парадигму ООП. Проблема, с которой я столкнулся, заключается в том, что из-за отсутствия у меня опыта в этом подходе я не знаю, как естественным образом определить «правильные» объекты и их отношения. Таким образом, мой вопрос ближе к архитектуре программного обеспечения, а не к более техническому вопросу «как можно добиться того или иного». Обратите внимание, что я делаю это упражнение именно для того, чтобы узнать об этой парадигме программирования.
Моделирование пытается разрешить взаимодействие (столкновения, притяжение и т. д.) между частицами в пустом 2D-пространстве. Первый объект, который приходит мне на ум, это Particle
. Я реализовал этот класс с положением, скоростью, массой и т. д. Я создал методы для их инициации, обновления их положения (в соответствии с некоторыми физическими правилами) или даже рисования их на холсте. Теперь моя проблема возникает при установке физических констант или параметров печати (размер холста, номер окна, количество кадров в секунду и т. д.). Прямо сейчас я использую глобальные переменные, такие как гравитация или размер холста. Это то, что можно было бы сделать в подходе, отличном от ООП, и это работает до сих пор. Но я изо всех сил пытался понять, как чистое ООП справится с этими общими параметрами среди частиц. Я могу предвидеть разные варианты.
- Я мог бы создать класс
Canvas
с графическими параметрами иUniverse
с такими константами, как гравитация. Тогда классParticle
будет расширенным классом. Но от кого я должен унаследовать? Тем не менее, класс будет расширен, но не сами объекты... - Другим вариантом может быть создание
Universe
иParticle
как независимых классов. Затем я бы связал их, создав уникальный объект Вселенной. Каждая частица будет содержать указатель на такой объект Вселенной, поэтому они имеют доступ к физическим параметрам. Я не уверен, что этот подход с указателем вообще является ООП...
Хотя я знаю, что есть много способов сделать это, мне интересно, есть ли один, который является более интуитивным и «стандартным», по крайней мере, с академической точки зрения. Я предполагаю, что это не включено в решения, которые я предлагаю, поэтому любой намек на то, как спроектировать структуру в этом типе простых симуляций, будет очень кстати.