| |
Angenommene Spezifikation UML Ocl 2,0 73 -- zunächst die iteratorverbindung von IteratorExp -- wenn die variable Erklärung anwesend ist, ist sein ast das iterator dieses iteratorExp -- wenn die variable Erklärung nicht anwesend ist, hat das iterator einen Rückstellungsnamen und -- Art -- in irgendeinem Fall, hat das iterator nicht einen initausdruck [ A ] IteratorExpCS.ast.iterators->at(1).name = wenn VariableDeclarationCS[1]->isEmpty() dann '' sonst VariableDeclarationCS[1].ast.name endif [ A ] IteratorExpCS.ast.iterator->at(1).type = wenn VariableDeclarationCS[1]->isEmpty() oder (VariableDeclarationCS[1]->notEmpty() und VariableDeclarationCS[1].ast.type.oclIsUndefined()) dann OclExpressionCS[1].type.oclAsType (CollectionType).elementType sonst VariableDeclarationCS[1].ast.type endif - das wahlweise freigestellte zweite iterator [ A ] wenn VariableDeclarationCS[2]->isEmpty() dann IteratorExpCS.ast.iterators->size() = 1 sonst IteratorExpCS.ast.iterators->at(2).name = VariableDeclarationCS[2].ast.name und IteratorExpCS.ast.iterators->at(2).type = wenn VariableDeclarationCS[2]->isEmpty() oder (VariableDeclarationCS[2]->notEmpty() und VariableDeclarationCS[2].ast.type.oclIsUndefined()) dann OclExpressionCS[1].type.oclAsType (CollectionType).elementType sonst VariableDeclarationCS[2].ast.type endif endif [ A ] IteratorExpCS.ast.iterators->forAll(initExpression->isEmpty()) -- zunächst die Namensattribut- und Körperverbindung des IteratorExp [ A ] IteratorExpCS.ast.name = simpleNameCS.ast und [ A ] IteratorExpCS.ast.body = OclExpressionCS[2].ast -- Alternative B ist sammeln von einem Betrieb über einer Ansammlung ein implizites [ B ] IteratorExpCS.ast.iterator.type = OclExpressionCS.ast.type.oclAsType (CollectionType).elementType [ B ] IteratorExpCS.ast.source = OclExpressionCS.ast [ B ] IteratorExpCS.ast.name = ' sammeln ' [ B ] -- der Körper vom impliziten sammeln ist der Betriebsanruf, der durch ' Namen ' bezieht IteratorExpCS.ast.body.oclIsKindOf (OperationCallExp) und lassen Sie Körper: OperationCallExp = IteratorExpCS.ast.body.oclAsType(OperationCallExp) in body.arguments = argumentsCS.ast und body.source.oclIsKindOf(VariableExp) und body.source.oclAsType (VariableExp).referredVariable = IteratorExpCS.ast.iterator und body.referredOperation = OclExpressionCS.ast.type.oclAsType (CollectionType).elementType |  |
|
| |
|
|