OOP パラダイムを使用して、いくつかの単純なライブ シミュレーションを設計しようとしています。私が直面している問題は、このアプローチの経験が不足しているため、「正しい」オブジェクトとそれらの関係を自然な方法で定義する方法がわからないことです。したがって、私の質問は、より技術的な「これまたはあれをどのように達成できるか」というよりも、ソフトウェア アーキテクチャに近いものです。私がこの演習を行っているのは、まさにこのプログラミング パラダイムについて学ぶためであることに注意してください。
シミュレーションは、空の 2D 空間で粒子間の相互作用 (衝突、引力など) を解決しようとします。私の頭に浮かぶ最初のオブジェクトは ですParticle
。位置、速度、質量などを指定してこのクラスを実装しました。それらを開始したり、位置を更新したり (物理的なルールに従って)、キャンバスに描画したりするメソッドを作成しました。ここで、物理定数またはプロット パラメータ (キャンバス サイズ、ウィンドウ数、1 秒あたりのフレーム数など) を設定するときに問題が発生します。現在、重力やキャンバス サイズなどのグローバル変数を使用しています。これは、非 OOP アプローチで行うことであり、それははるかに機能します。しかし、純粋な OOP がこの粒子間で共有されるパラメーターをどのように処理するかを考えるのに苦労しました。いろいろな選択肢が予想できます。
Canvas
グラフィック パラメーターと、Universe
重力などの定数を使用して、クラスを作成できます。次に、クラスParticle
は拡張クラスになります。しかし、私はどちらから継承する必要がありますか?それでも、クラスは拡張されますが、オブジェクト自体は拡張されません...Universe
別のオプションとして、 andParticle
を独立したクラスとして作成することもできます。次に、一意のユニバース オブジェクトを作成してそれらを関連付けます。各パーティクルにはそのようなユニバース オブジェクトへのポインタが含まれるため、物理パラメータにアクセスできます。このポインターアプローチがOOPであるかどうかはわかりません...
いろいろな方法があることは承知していますが、少なくともアカデミックな観点からは、より直感的で「標準的」な方法があるのではないでしょうか。私が提案するソリューションには含まれていないと思いますので、このタイプの単純なシミュレーションで構造を設計する方法についてのヒントは大歓迎です.