1

これは比較的単純だと思いますが、クラス図は初めてなので混乱しています。

マクドナルドの従業員の種類を管理するプログラムを (Java で) 作成しようとしています。そこで、オブジェクトのモデリングについて考えました。

簡単に言うと、マクドナルドの従業員は「スーパーバイザー」と「クルーメンバー」の 2 種類だけで、どちらも月給で支払われます。さらに、どちらも状況に応じて別々の種類のボーナスを受け取ります (もちろん、将来変更される可能性があります)。

そこで、属性を持つスーパークラス「従業員」を作成してモデリングを開始しました

name
empId
salary

(方法……など)

ちなみに「CrewMember」と「Superviser」はそのサブクラスにしました。

では、この方法でオブジェクトをモデル化した場合、「CrewMember」クラスと「Supervisor」クラスのインスタンスが互いに異なる可能性があるのはなぜでしょうか?

クラスをモデル化する方法について修正してください。クラスを区別できるようにするために、「CrewMember」と「Superviser」ごとにボーナスの種類を追加することも考えましたが、将来、ボーナスとボーナスの種類が変更される場合、柔軟になるとは思いません。だから、私は現時点で非常に混乱しています。

4

3 に答える 3

3

スーパーバイザーとクルーメンバーの違いは何ですか?

少なくとも、スーパーバイザーが 1 人以上の乗組員の上司であることをモデル化するこれら 2 つのクラス間の関連付けが必要だと思います。

スーパーバイザーが行い、乗務員が行わないことがある場合、それをクラス Supervisor でモデル化する必要があります。

スーパーバイザーとクルー メンバーに違いがない場合は、2 つのクラスは必要ありません。

于 2012-10-23T10:35:30.480 に答える
0

こんにちは。:)この回答は私のiPhoneに投稿されていますが、後で更新します。従業員のようなスーパークラスを作成するときは、スーパークラスから2つの子クラスへの単純な矢印でクラス図に表示するだけです-私はすぐにリンクを見つけますまた、2つのクラスが問題ではないことに注意してください同一のように見えますが、図が完成したときに明確になるはずです。通常、これらのタイプの継承を示すために、クラス図の前にドメインモデルを作成します

于 2012-10-23T10:41:00.927 に答える
0

一般化されたケースと特殊化されたケースで継承の概念を使用するには、一般化/特殊化されるエンティティ間の違いが何であるかという動機が必要です。これはディスクリミネーターと呼ばれます - 異なるのは何らかの機能 (行動または構造) です。そのため、監督者/乗組員にのみ適用される何らかの機能、何らかの関連付けまたは属性が必要です。それ以外の場合は、最初のスーパークラス「Employee」で「employeeType」をモデル化するだけで十分です。ほとんどの開発環境では、継承を追加するとコストがかかることに注意してください。追加のソース コード、追加のドキュメント、追加のテーブル、ファイル、および後でモデルから実装に移行しようとするときに必要となるものがあります。

于 2012-10-23T21:10:47.947 に答える