2013-11-22 2 views
2

동일한 UML 클래스 다이어그램에 관해서 두 가지 질문이 있습니다. 첫 번째는 UML 기본 유형으로 템플릿 클래스를 모델링하는 방법에 관한 것입니다. 두 번째 방법은 OCL 제약 조건에서 템플릿 클래스를 처리하는 방법입니다.기본 UML 유형이있는 템플릿 클래스 및 템플릿 클래스의 OCL 제약

질문 1 : 템플릿 클래스 나 간격에 대한 템플릿 클래스를 사용하여 UML 표준을 사용하여 표현하고자하는

. 간격은 정수 및 부동 소수점에 사용할 수 있어야합니다. 지금까지 발견 된 가장 좋은 방법은 다음과 같다 : 여기

Best solution found so far

아이디어는 매개 변수 T 중 하나 IntegerFloat 클래스의 슈퍼 클래스 인 상태, 템플릿 클래스를하는 것입니다.

내가보기에 문제는 그룹화하기 위해 UML의 기본 유형을 재정의해야한다는 것입니다. 나는 템플릿 클래스를 정의하고, 이 integer 또는 float (여기서 UML의 프리미티브 임) 중 하나임을 알리는 명확한 방법이 있는지 알고 싶습니다.

질문 2 : 템플릿 클래스

내 문제의 두 번째 측면에 대한 OCL 제약 내 간격은 최소 2 개 요소를 포함해야한다는 말을 OCL 제약 조건을 추가 할 수 있도록한다는 것이다. 문제는 이전 클래스 다이어그램에서 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 

그래서 내가 TInteger에 바인딩 할 때 몇 가지 규칙 만 적용된다는 말을 OCL의 방법을 찾을 필요가 있고, 다른 사람 그것은 Float에 묶여있다. OCL 전문가가 아니기 때문에 도움이되는 정보를 찾을 수 없으므로 도움이 필요합니다.

미리 감사드립니다.

바스 티앙. 1 솔루션은 제네릭 형식과 템플릿 클래스를 사용하는 것입니다

(이 클래스에 따라 인스턴스화되지 않습니다

질문 :

답변

1

는 더 많은 연구 후에, 나는 다음과 같은 솔루션 나왔다 UML 표준)을 구현 클래스와 바인딩합니다. 해당 UML 클래스 다이어그램은 다음과 같다 : 여기

enter image description here

, 우리는 두 개의 가능한 클래스 IntegerInterval 및 UML 기본 유형 integer 등을 사용하는 것 외에도, 단순함을 유지하는 일반적인 템플릿 클래스 Interval로부터 유도 RealIntervalreal.정수와 실제 간격 사이의 분리가 클래스 수준에서 수행되기 때문에

질문 2

는 OCL 차별화는 간단합니다. 다음과 같이 따라서 제약 조건은 다음과 같습니다

context IntegerInterval 
inv: ... 

context RealInterval 
inv: ... 

을 어쨌든, 나는 다른 제안에 열려있어 :)

관련 문제