1

最近、オブジェクト指向の分析と設計について勉強していて、全体的にかなり良い感じになったと感じています。

しかし、この小さなシナリオは私を悩ませ続けています。

私が単純なボードゲームを設計しているとしましょう。ボードとプレーヤーに関する情報を保持するクラス Game があります。プレーヤーはクラス Player から作成されます。すべてのプレイヤーは、クラス BankAccount から作成された銀行口座を持っています。

My Game は、移動後に何が起こるべきかについてのロジックを処理します。ほとんどの場合、これにはプレイヤーの銀行口座からの引き出しまたは入金が含まれます。

My BankAccount には、残高の引き出し、入金、および返却の方法があります。しかし、私のゲームはプレイヤーの銀行口座を知りません。プレイヤーについてのみ。Player クラスにメソッド getAccount を与えて、呼び出すことができるようにしplayerObject.getAccount().withdraw()ますか? または、この行動の責任をどのように割り当てることができますか? Player クラスは、関連するアカウント オブジェクトをwithdraw()呼び出すだけのメソッドを実装する必要がありますか?account.withdraw()

4

4 に答える 4

3

オブジェクトではなく、Bankを制御する必要があります。BankAccountsplayer

つまり、Bank は BankAccounts のコレクションと、これらのアカウントを管理するための追加のメソッドである必要があります。

これにより、次のようなことができます。

bank.WithDrawMoney(player, amount);

また

bank.TransferMoney(playerFrom, playerTo, amount);

この場合、銀行はそのプレーヤーが持っている口座を「検索」し、そこから適切な資金を削除します。

それが実際の銀行口座だったと想像してみてください。人はそのアカウントを持っていません。それへの参照のみです。銀行は、資金の移動 (預金、引き出しなど) を担当します。

したがって、トップレベルでは、 、、Gameなどのオブジェクトを含む があります。などのトップメソッドがある場合があります。理事会には次のような方法がある場合があります。PlayersBankBoardRollDice()Move(player, distance);

于 2011-10-31T19:31:35.327 に答える
0

価値のあることですが、私は通常、他の人が触れたようにコードから離れて、問題のドメインで考え始めることが生産的であると感じています。

モノポリーのようなボードゲームだと思います。実際の支払いはどのように行われますか? 実際にモデル化しようとしているプロセスは何ですか?

あなたが銀行口座クラスを持っていると述べたのは承知していますが、プロセスが実際にジョー・ブロッグスが実際に現金で(トイレの貯水池の彼の隠し場所から)支払うことである場合、フレッドは銀行とは何の関係もありません。銀行口座が必要です。フレッドがマットレス (またはゲームボード) の下に詰め続けるのではなく、ある時点で銀行に預けることを選択した場合、その時点で銀行と口座が必要になります。

プレーヤーが他のプレーヤーのハンドルを取得/保持できると仮定すると、最初のプロセスは (プレーヤーで) 次のようになります。

void payPlayer( player, amount )
{
  spendCash( amount ); // reduces stash by "amount"
  player.recieveCash( amount );

}

現金の隠し場所のサイズは、プレーヤー クラスの属性にすぎない可能性があります。

2 番目のアクティビティは、まったく別のものです。フレッドは今、まず自分の銀行に 100 ドルを預けたいと伝えなければなりません。それから、彼の銀行は、壁に穴を開けるか窓口係のどちらかによって (願わくば) 彼の口座に入金します。したがって、フレッドは本当に銀行を必要としており、おそらく今すぐ口座を必要としています。しかし、なぜはアカウントが必要なのですか? ゲーム内でどのような目的に使用されますか? それは間違いなくプログラムの必要な要素ですか、それとも銀行は実生活でお金が動く場所だからですか?

次に、プレーヤーが自分の口座の銀行資金を別のプレーヤーの口座に支払いとして送金したい場合があります。このシナリオでは、両方のプレーヤーが銀行と口座を必要としますが、実際に資金を送金できるのは銀行だけであるため、銀行について知る必要があるだけです。もちろん、銀行がゲームで他の重要な役割を果たしている場合にのみ、これを行います。

したがって、ゲームで送金を実装する方法に対する答えは、完全にゲームの仕組みに依存します。銀行口座のようなクラスが本当に必要な場合は、銀行を持っている方が安全です。しかし、そもそもなぜ銀行口座オブジェクトが飛び交う必要があるのか​​、自問する必要があります。また、プレーヤーの銀行口座が直接関連付けられている場合、それは本当に銀行口座なのか、それともジョーがトイレの水槽に手を浸しているだけなのか?

于 2012-02-28T15:48:16.970 に答える