少し前に、自分が作成しているアプリケーションのクラス図を投稿しました。いくつかの役立つヒントを得て、仕事に行きました。確かにデザインするのは難しいです!とにかく、私はバージョン2.0を作成しましたが、他のことに遭遇しました。たぶん誰かが私のクラス図に関するポインタ、コメント、またはアドバイスを与えることができます:-)
最初に、 Sprite抽象クラスの一部としてSomeInterfaceに「Speed」がありました。検討の結果、これは「スピード」を置くのに最適な場所ではないと思いました。あまり良くないことは、インターフェイスに適切な名前を付けることができなかったことと、プロパティであるため、属性または操作コンパートメントのどこに「速度」を配置するかがわからなかったことです...
各オブジェクト(弾丸、侵入者、船)は独自の速度で移動するため、「速度」をインターフェイスに配置します。すべてのオブジェクトはスーパークラスSpriteを継承し、Update()メソッドのみをオーバーライドします。Bullet抽象クラスは、Spriteから取得したUpdateメソッドでは何もしません。そこから取得したことを示すためだけにあります。これが正しい方法であるかどうか、またはそれを省略して、それをオーバーライドするクラスでのみ表示する必要があるかどうかはわかりません。
対処方法がわからないもう1つの問題は、侵入者によって行われるアニメーションです。次のプロパティを取得しました:SheetSize、FrameSize、およびCurrentFrame。シートにはエイリアンの写真(パラパラマンガなど)が含まれ、FrameSizeはシート上のフレームだけを選択するためのものであり、CurrentFrame...は現在のフレームを保持します。ShipとBulletはアニメートしないため、これらのプロパティは役に立ちません。それらをどこに置くか?
最後に、IBulletBehaviorを実装する場所がありませんでした。最初に、各弾丸の動作にIBulletBehaviorを実装させましたが、抽象Bulletクラスに実装させるように切り替えました。どちらを取るかを決めるルールはありますか?