2012-07-17 80 views
2

嗨,我們目前正在使用MagicDraw 17.0。我們遇到了以下問題。我們想驗證對象圖中的對象是否有任何連接的對象。OCL 2.0約束條件

例如,如果對象「man」有另一個對象「地址」的鏈接。自動取款機。我們正在嘗試這個

self.address->isEmpty() 

其中address是adressobject在連接兩個對象的關聯中的角色,約束放在man上。不工作。

回答

0

嘗試oclIsUndefined()(見OCL規範2.3.1第16頁)

+0

我試着按照你的建議,但是當我在'self'或'OclAny'上調用它時,總會出現「'NXO不可執行的」錯誤。你能舉一個完整的例子嗎?這些規範並沒有很清楚地說明「oclIsUndefined()」的用法。我知道「OclAny是AnyType的唯一實例」,並且您將傳遞屬性('self.address')作爲'oclIsUndefined()'的唯一參數。你在哪個實體上調用該操作? – observer 2013-01-29 13:28:49

1

這不是直接回答你的問題,但希望會提供關於你問的問題更深入的瞭解:

如果對象(比如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專家評論區別?但可能第一種方法會有所幫助!

希望這會有所幫助!