所以我需要模擬我們有一群人是聯盟成員的情況。您可以是聯盟的活躍成員或非活躍成員。如果你不活躍,你就不是任何俱樂部的成員。如果您是活躍會員,那么您就是一個俱樂部的主要會員,并且您可以擁有任意數量的俱樂部作為內部會員。
我當前的 UML 模型并沒有強制每個活躍玩家都應該只有一個主要成員,所以我想知道如何解決這個問題。我個人認為我可以通過在“主要”和“活動”之間建立定期關聯來解決這個問題,但我真的不知道這是否允許,或者是否有任何其他解決方案可以解決我的問題。
uj5u.com熱心網友回復:
Main是 UML 關聯類的一個實體,因為它的超類是Membership. 這意味著Main可以專門化關聯(這需要另一條虛線)并且可以子集一個或兩個關聯端。當你說
isMemberOf { subsets isMemberOf } 1
在新協會線的左端,這意味著每個活躍玩家都必須參加一個Main會員資格,加上任意數量的其他會員資格。
為了清楚起見,您應該考慮重命名子集和/或子集屬性,但 UML 不需要它。例如,
isMainMemberOf { subsets isMemberOf } 1
(雖然這個名字暗示了一個人是Main俱樂部的成員,但這并不完全正確。)
uj5u.com熱心網友回復:
雖然不一定是錯誤的,但您可能過度使用 Generalization
一個推廣是一個關系,以及如果你說我能聽懂
- 一個
Player是一個Person
但我很難理解
- 一個
Active是一個Player是一個Person
這似乎更有意義的模型Active或NotActive作為值Status的Player。
以下是表達這些需求的最基本模型的樣子。

一些指示
Player變成了 Person 扮演的角色,而不是同一個物件。因此,如果 aPlayer被洗掉,該Person物件可以繼續存在。在另一個方向上,我使用組合對其進行了建模。所以如果 aPerson被洗掉,它的Player角色也被洗掉了,它也是Memberships- 使用組合而不是繼承是已知的軟體工程原則
- 我使用自然語言的約束來表達活躍成員應該有一個主要的成員資格要求
- 在大多數實作中,實體不能更改類。因此,如果您
Active要去哪里,NotActive則必須洗掉該Active物件并創建一個新NotActive物件。將 Active/Notactive 作為狀態將允許您使用相同的物件并簡單地更改它的狀態。可以使用狀態機對如何更改這些狀態??進行建模。 - 在這種情況下,我什至取消了關聯類,轉而使用具有常規關聯的常規類。關聯類使您的模型更難理解,因為不太懂 UML
我并不是說這個模型比你的模型更好或更差,但值得考慮復雜性范圍的另一端,以及你希望你的模型最終在哪里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407835.html
標籤:
上一篇:使用繼承的抽象方法的問題
