2013-11-22 94 views
2

我有兩個關於同一個UML類圖的問題。第一個是關於如何使用UML本機類型爲模板類建模。第二個是關於如何處理OCL約束中的模板類。具有原生UML類型的模板類和模板類的OCL約束

問題1:模板類

我想用一個模板類的間隔,並使用UML標準的代表。間隔必須可用於整數和浮點數。我迄今發現的最好的方法如下:

Best solution found so far

的這裏想法是有一個模板類,用參數T是要麼IntegerFloat類的父類。

我看到的問題是我需要重新定義UML的基本類型以便對它們進行分組。我想知道是否有一種簡潔的方式來定義模板類,並說Tintegerfloat(這裏是UML的基元)類型。

問題2:模板類

在我的問題的第二個方面OCL約束的是,我希望能夠添加OCL約束地說,我的時間間隔必須至少包含2個元素。問題在於規則不能相同,這取決於前一個類圖中T的綁定。

對於浮動:

context Interval 
inv : self.supBound > self.infBound 

對於整數:

context Interval 
inv : (self.infBoundIncluded and self.supBoundIncluded) implies supBound - infBound >= 1 

context Interval 
inv : (not(self.infBoundIncluded) and self.supBoundIncluded) implies supBound - infBound >= 2 

context Interval 
inv : (self.infBoundIncluded and not(self.supBoundIncluded)) implies supBound - infBound >= 2 

context Interval 
inv : (not(self.infBoundIncluded) and not(self.supBoundIncluded)) implies supBound - infBound >= 3 

所以,我需要找到OCL的方式說,當T勢必Integer一些規則只適用,等人的時候它是綁定到Float。我不是OCL的專家,我也找不到任何有用的信息,所以我在尋求一些幫助。

在此先感謝,

Bastien。

回答

1

更多的研究後,我想出了以下解決方案:

問題1

的解決方案是使用模板類與通用型(該類不會根據實例化UML標準),並將其與實現類綁定。相應的UML類圖如下:

enter image description here

在這裏,我們有兩個可使用的類IntegerInterval和從一般的模板類Interval,這保持簡單起見,除了使用UML基本類型integer和派生RealIntervalreal

問題2

由於整數和實間隔之間的分離是在類級完成,OCL分化是直截了當的。因此,限制如下:

context IntegerInterval 
inv: ... 

context RealInterval 
inv: ... 

不管怎麼說,我還是接受其他的建議:)