簡而言之
主流的基于類的 OO 語言不允許物件的類在創建后改變。我在 UML 中假設了相同的約束,尤其是基于 UML 2.5 規范中的以下條款:
7.5.1:在包含值的元素的宣告中使用型別和多重性,以限制可能包含的值的種類和數量。
9.2.3.2:分類器的實體也是其每個泛化的(間接)實體。
然而,在對這個答案的評論中,一些高度熟練的 UML 專家質疑這個假設。因此我的問題是:實體可以改變 UML 中的類嗎?UML 規范中的哪些條款允許這樣的改變?
附加引數
雖然我在 UML 規范中找不到任何關于實體和類之間關系的更嚴格的條款,但我解釋了以下提示以支持固定類:
11.4.3.1 : (...) 活動物件是一個物件,作為其創建的直接結果,開始執行其分類器行為,并且直到執行完整的行為或物件被某些外部終止時才會停止目的。
(它特定于活動物件。但如果物件在創建后可以更改類,它就不能再處于活動狀態,或者它會保留新類的舊行為,這看起來很奇怪):
此外,如果實體的類可以動態更改,則有多個子句會導致歧義。例如在 6.5.1 中:
一個類也可能有不變的條件,這些條件在操作執行之前和之后都必須為真,但在操作方法的執行程序中可能會被違反。
如果在對分類器實體進行操作期間不變數不再為真,會發生什么情況:實體是否只是失去了類實體的質量?它可能是一個與任何類都無關的實體嗎?
屬性的語意指定,當一個具有默認值的屬性被實體化時,如果沒有對該屬性的某些特定設定,則評估默認值以提供該屬性的初始值
如果一個實體不再是一個具有默認值的類的實體,它會突然得到另一個它可能是實體的類的默認值嗎?或者如果一個實體可以匹配兩個相似的類:它會得到兩者的默認值嗎?
uj5u.com熱心網友回復:
物件可以改變它們的類。至少在現實世界中,這是顯而易見的。AStudent可以變成 aResearchAssistent甚至是Professor。ACar可能會在一段時間后變為 a ClassicCar。UML 確實支持這一點:
16.4.3.7重新分類物件動作ReclassifyObjectAction 是一個動作,它改變分類器對在其物件 InputPin 上給定的物件進行分類。它可以從物件中添加和洗掉分類器。可以一次添加和洗掉多個分類器。[...] 保留輸入物件的身份,不執行任何行為,也不計算默認值運算式。newClassifiers 在原子步驟中替換現有的分類器,因此當 oldClassifiers 和 newClassifiers 具有共同的結構特征和關聯時,在重新分類程序中不會丟失結構特征值和鏈接。
重新分類是否有意義,這不是問題。在對您有意義的時候使用它。當然,你可以模擬廢話。
不言而喻,所有新的類不變數都必須在更改類后得到滿足。如果新不變數涉及舊類的特征,則可能會出現新不變數無法滿足舊值的問題。它們必須同時通過更改類的行為進行更新。
默認值在這里不是問題。類的行為負責確保設定默認值,它不是自動的。如果您更改類,則新類中仍然存在的特征值將保持不變。
當您從主動類重新分類為被動類時,那么分類器行為就會停止。不過,我懷疑這個案例是否有用。
PS:上面已經說過,InstanceSpecifications將物件指定為某些分類器的實體,它們不是物件。因此,我認為規范中關于它們的任何內容都與我們的討論無關。
uj5u.com熱心網友回復:
我可能已經找到了困擾您的部分,基本上這就是多重??繼承發揮作用的地方(這肯定是邪惡的)。
9.9.9 InstanceSpecification [類]
9.9.9.1 說明
InstanceSpecification 是表示建模系統中的實體的模型元素。InstanceSpecification 可以作為 Deployment 關系中的 DeploymentTarget,在它代表節點實體的情況下。如果它代表工件的實體,它也可以充當 DeployedArtifact。
[...]
9.9.9.5 關聯結束
- 分類器:分類器 [0..*](與 A_classifier_instanceSpecification::instanceSpecification 相反)所表示實體的一個或多個分類器。如果指定了多個分類器,則實體按所有分類器分類。
你是:多重分類。所以InstanceSpecification(物件)確實有點像一個轉斗篷,可以采取多種形式。
另外規范說:
9.8 實體
9.8.3. 語意
[...]
InstanceSpecification 可以表示某個時間點(快照)的實體。可以使用多個 InstanceSpecification 對實體的更改進行建模,每個快照一個。
重要的是要記住 InstanceSpecification 是一個模型元素,不應與它正在建模的實體混淆。[...]
使用 anInstanceSpecification將及時顯示物件的表示。如上所示,這可能會改變其分類的限制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330446.html
上一篇:如何從兩列資料制作一個PowerBI餅圖小部件/或將兩個餅圖合并為一
下一篇:股票基本知識
