我正在尝试使用 OOP 范例设计一些简单的实时模拟。我面临的问题是,由于我缺乏这种方法的经验,我不知道如何以自然的方式定义“正确”的对象及其关系。因此,我的问题更接近于软件架构,而不是更技术性的“如何实现这个或那个”。请注意,我正在做这个练习正是为了了解这个编程范式。
模拟试图解决空二维空间中粒子之间的相互作用(碰撞、吸引力等)。我想到的第一个对象是Particle
。我已经用位置、速度、质量等实现了这个类。我创建了启动它们的方法,更新它们的位置(根据一些物理规则)甚至在画布中绘制它们。现在,我的问题出现在设置物理常数或绘图参数(画布大小、窗口数、每秒帧数等)时。现在我正在使用全局变量,例如重力或画布大小。这就是在非 OOP 方法中会做的事情,并且它仍然有效。但我一直在努力思考纯 OOP 如何处理粒子之间的共享参数。我可以预见各种选择。
- 我可以
Canvas
使用图形参数和Universe
重力等常量创建类。然后,该类Particle
将是一个扩展类。但我应该从哪个继承?尽管如此,类会得到扩展,但对象本身不会...... - 另一种选择是创建
Universe
和Particle
作为独立的类。然后,我将通过创建一个独特的 Universe 对象来关联它们。每个粒子都包含一个指向此类 Universe 对象的指针,因此它们可以访问物理参数。我不确定这种指针方法是否甚至是 OOP ......
尽管我知道有很多方法可以做到这一点,但我想知道至少从学术角度来看,是否有一种更直观和“标准”的方法。我想它不包含在我提出的解决方案中,因此任何关于如何在这种简单模拟中设计结构的提示都将非常受欢迎。