SysML 1.6 RTF Avatar
  1. OMG Issue

SYSML16 — Rate constraint#2 is ambiguous

  • Key: SYSML16-356
  • Status: closed  
  • Source: Airbus Group ( Mr. Yves Bernard)
  • Summary:

    Rate constraint#2 states:

    The rate of a parameter shall be less than or equal to rates on edges that come into or go out from pins and parameters nodes corresponding to the parameter

    This is ambiguous since SysML::Rate::rate is typed by UML::InstanceSpecification for which "less than or equal to" is not defined

  • Reported: SysML 1.5 — Thu, 14 Sep 2017 08:49 GMT
  • Disposition: Duplicate or Merged — SysML 1.6
  • Disposition Summary:

    Merged with SYSML16-274

    To be fixed as part of SYSML16-311 by assuming than the specification of Rate can be given a OCL::Real value:

    The complete OCL statement for this constraint shall be:

    self.base_Parameter->notEmpty() implies (
    	let nodes: Set(UML::ObjectNode) =
    	if self.base_Parameter.owner.oclIsKindOf(UML::Behavior) then
    		let pOwner: UML::Behavior = self.base_Parameter.owner.oclAsType(UML::Behavior) in
    		UML::CallBehaviorAction.allInstances()->select(a | a.behavior = pOwner)->collect(a | a.argument->at(pOwner.ownedParameter->indexOf(self.base_Parameter)))
    		->union(UML::StartObjectBehaviorAction.allInstances()->select(a | a.behavior() = pOwner)->collect(a | a.argument->at(pOwner.ownedParameter->indexOf(self.base_Parameter))))
    		->union(UML::ActivityParameterNode.allInstances()->select(n | n.parameter = self.base_Parameter))
    		->asSet()		
    	else if self.base_Parameter.owner.oclIsKindOf(UML::Operation) then
    		let pOwner: UML::Operation = self.base_Parameter.owner.oclAsType(UML::Operation) in
    		UML::CallOperationAction.allInstances()->select(a | a.operation = pOwner)->collect(a | a.argument->at(pOwner.ownedParameter->indexOf(self.base_Parameter)))->asSet()
    	else
    		Set(UML::ObjectNode){}
    	endif endif in
    	nodes.incoming->flatten()->union(nodes.outgoing->flatten())
    	->forAll(e | let eRate: Rate = Rate.allInstances()->any(r |  r.base_ActivityEdge=e) in
    		(not eRate.oclIsUndefined() and self.rate. specification.realValue() <= eRate.rate. specification.realValue()))
    )
    
  • Updated: Mon, 1 Apr 2019 18:17 GMT