2017-01-13 3 views
1

私はこのシナリオをUMLクラス図でモデル化していますが、私は太字のコメントに同意しません。がカテゴリに属することができ、各カテゴリは(継承が解決しようとする その適切ではない、変更することができる)も従業員ある独自の管理者を、割り当てられた管理者IsAn従業員の関係は継承に適していませんか?

コース。

なぜ従業員< | ==管理者は継承に適していませんか?私はそれが明らかに "あります"という関係ではなく、 "あります"と考えています。彼らが "切り替える"ことができることは、両側でキャスティングすることで簡単に解決できます。余分な属性は削除され、欠落した属性はNULLまたは何らかのデフォルト値に初期化されます。

+0

「変更可能」とはどういう意味ですか?何が変わるつもりですか?その声明はあいまいだと思います。 –

+0

@ThomasKilianこれは、管理者が従業員になる(降格される)こと、またはその逆(昇進する)ことを意味します。 – Slazer

答えて

1

これは明確に述べますが、相続

によって解決することが適切でない部分

はあなたに

を変更することができますか

を理解するためのヒントを与えないが

重要な部分はまだまた、従業員

あるなしブラケット部はこの部分から来ていない

管理者が、あった場合、あなたはこれを変更することができる情報(例えばを持って継承することができ将来的には外部の管理者がいるか、または管理部分が別の会社に除外されるため、管理者は従業員ではなくなります)。したがって、管理者が従業員であるという事実を取ることはできません(将来的にはそれは今でも真実ではないかもしれません)。したがって、この関係をモデル化するために継承を使用することはできません。

enter image description here

左右の管理者の違いは何ですか:

+0

まだ茶葉を読んでたくさんの。私はOPの引用の著者に、彼が実際に意味していたことを尋ねるだろう。スペキュレーションに基づいて設計することはできません。 –

+0

@Isterそれはちょうど「従業員の管理者から従業員の従業員に降格する」と言っても、賢明な説明です。私はあなたが実証した問題を見ることができますが、今は意図した意味を考えてみてください。引用の主張の著者は、オブジェクトがキャストされなければならないという問題があります。私は同意しない、どうしてそれが問題なの?著者は継承の代わりに関連付けを提案しますが、やはり "IsA"関係です。それはうまくいくかもしれませんが、意味的にはちょうどいい気分にはなりません。 – Slazer

1

このモデルを考えてみましょうが(私はここ1に2つのモデルをマージ)?左にはEmployeeのすべての属性と操作が継承されており、Categoryにアクセスできるようになりました。しかし、それはAdmin部分としかやりとりできません。適切なバージョンでは、AdminEmployee -relation privateとなるため、Categoryではアクセスできません。

いずれの場合でも、プロ/デモートはCategoryから削除する必要があります。では、ランタイムはどうですか?継承されたAdminを扱うときは、Employeeが必要なすべての操作でそのオブジェクトを使用するだけです。今、彼はもはや管理者ではないとき、何をしなければならないのですか?あなたは単純なEmployeeを作成し、彼に前者Adminから必要な部分を与える必要があります。

enter image description here

右のケースで、あなただけのAdminを削除します。

enter image description here

関連する問題