嗨,我們目前正在使用MagicDraw 17.0。我們遇到了以下問題。我們想驗證對象圖中的對象是否有任何連接的對象。OCL 2.0約束條件
例如,如果對象「man」有另一個對象「地址」的鏈接。自動取款機。我們正在嘗試這個
self.address->isEmpty()
其中address是adressobject在連接兩個對象的關聯中的角色,約束放在man上。不工作。
嗨,我們目前正在使用MagicDraw 17.0。我們遇到了以下問題。我們想驗證對象圖中的對象是否有任何連接的對象。OCL 2.0約束條件
例如,如果對象「man」有另一個對象「地址」的鏈接。自動取款機。我們正在嘗試這個
self.address->isEmpty()
其中address是adressobject在連接兩個對象的關聯中的角色,約束放在man上。不工作。
嘗試oclIsUndefined()
(見OCL規範2.3.1第16頁)
這不是直接回答你的問題,但希望會提供關於你問的問題更深入的瞭解:
如果對象(比如Man的一個實例)沒有與另一個對象(比如說Address的實例)的鏈接(比如說地址),遍歷self.address
並且自己是一個人,對於自我來說,根本就沒有定義! (請注意,地址是參考,地址是類型)。
看起來oclIsUndefined()
的操作可以用於這個目的(就像gefei提到的那樣),所以大概self.address -> oclIsUndefined()
會適合你!
第16頁的OCL規範的說:
...有用於測試一個明確的操作如果 表達式的值是不確定的。 oclIsUndefined()是OclAny 上的一個操作,如果其參數爲null或invalid,則返回True,否則返回False 。
但還有另一種觀點:
self.address
代表的集合。所以isEmpty
函數應該返回true,如果它是空的! (這是你可能會想到來使用self.address->isEmpty
的方式)關於IsEmpty函數的OCL規範的
第175頁說:
的isEmpty():布爾
是自空集?
post: result = (self->size() = 0)
注:空值>的isEmpty()返回「真」在憑藉 的隱式轉換,從零到袋{}
但是,正如你所提到的isEmpty不是爲你工作!
我要離開這到OCL專家評論區別?但可能第一種方法會有所幫助!
希望這會有所幫助!
我試着按照你的建議,但是當我在'self'或'OclAny'上調用它時,總會出現「'NXO不可執行的」錯誤。你能舉一個完整的例子嗎?這些規範並沒有很清楚地說明「oclIsUndefined()」的用法。我知道「OclAny是AnyType的唯一實例」,並且您將傳遞屬性('self.address')作爲'oclIsUndefined()'的唯一參數。你在哪個實體上調用該操作? – observer 2013-01-29 13:28:49