1

この質問はかなり長い間私を悩ませてきました:

クラスがあり、エンティティRoomを追加したいとしましょう。Ball

Ballこの部屋の場所を表す座標を持つ必要がxあります。y

だからここに質問があります:

座標を保持するクラスは?

1)Ballそれ自身のためのそれぞれ。

2)Roomは、すべての の座標を保持しますBall

おそらくそれほど問題ではないことはわかっていますが、どちらが好ましい選択であり、どちらがより人気がありますか?

編集

私が実際に心配しているのは、オブジェクトが好きなようにコンテンツを変更できるため、サードパーティによって制限されることで解決することです。しかし、私の場合ではなく、複数のユーザーを持つアプリケーションにのみ有効だと思います。

4

5 に答える 5

7

オブジェクト デザインに関して言えば、私の最初のマントラの 1 つは、「オブジェクトはそれ自体についてすべてを知っている」ということです。ボールが部屋に尋ねなければならないことを想像してみてください -私はどこにいますか? 座標を保持しているボールから始めます。このように、Room は自分自身と Ball オブジェクトのコレクションについてのみ知る必要があります。逆に、ボールは自分自身についてすべてを知っています。ボールの座標に関してルームが必要とする可能性のある詳細は、コレクションを反復することで収集できます。部屋に他のオブジェクトを追加するようになると、デザインへの影響も少なくなります.

于 2012-12-14T15:28:03.213 に答える
1

座標は class と一致する必要がありBallます。たとえば、 に 1 つ、2 つ、3 つ、またはそれ以上 (または動的な数)BallのインスタンスがありRoom、それぞれが独自の座標を持つことができます。

例外は、ボールの座標に対して重い処理を行う必要があり、それらをベクトルとして保存したい場合です。その場合、選択はそれらのベクトルを のメンバーとして配置することですRoom

于 2012-12-14T15:11:57.390 に答える
0

問題をどのように捉えるかに大きく依存すると思います。ボールはオブジェクトであり、各オブジェクトは現実世界の座標を持っています。一方、Room はオブジェクトのコンテナーであり、そこに含まれるオブジェクトの位置を含むことができます。

私が通常行うことは、自分のプログラムが開発しやすい方法を探すことです。とはいえ、私は PositionableObject から Ball を継承し、そのクラスに座標を格納することを好みます。したがって、この親クラスを継承した後、すべてのオブジェクトに座標または場所が含まれます...

于 2012-12-14T15:10:43.810 に答える
0

あなたが説明している場合、おそらく座標をボールのプロパティとして持つことは簡単で、...ポイントを与えます;-)

しかし、より一般的に言えば、この質問は驚くべきものかもしれません。多くのボールと部屋があり、それぞれがより多くの座標系を持っていると想像してみてください。ボールの座標は、座標系を選択して初めて意味を持つため、座標は実際にはボールと座標系の間のリンクです。

すべてのシステムに関してボールの位置を記述することに興味がある場合、これは線形構成では実行できませんが、ボールのコレクション、部屋のコレクション、座標のコレクションが必要です。各部屋には次のコレクションが含まれています。は、そのコンテキストでのボール参照とそのボールの座標参照を含むそれぞれを記録します。ボール自体は、部屋の参照と座標の参照であるコレクションまたはレコードを持つことができます。

部屋とボールの友達であり、部屋またはボールが移動した場合にすべての座標を更新し、コレクションの相互の一貫性を維持するスペースマネージャーが必要です。

しかし、これは当初の目的をはるかに超えています。これを指摘するのは、潜在的なより広い抽象化について考えてもらうためです。

于 2012-12-14T15:57:32.480 に答える
0

Room クラスに Ball オブジェクトがあり、Ball オブジェクトが Room 内の Ball の位置である場合、Ball オブジェクトには XY 座標が必要であると言わざるを得ません。

ルームにボールがないとします。これで、ボールがなくても Room オブジェクト内にボールの XY 座標が保存されます (設計が悪い)。

部屋に複数のボールがある場合は追加。ボールごとに異なる座標が存在する可能性があります。

于 2012-12-14T15:11:41.727 に答える