Professional Documents
Culture Documents
Examen 2022
Examen 2022
Modèle vs Méta-modèle :
L'OCL est un langage de description des contraintes qui complète UML (Unified Modeling
Language). Il est utilisé pour exprimer de manière précise les contraintes sur les modèles
UML, comme les règles d'intégrité, les conditions ou les affaires qui ne peuvent pas être
représentées graphiquement en UML.
Dans l'IDM, l'OCL est utilisé à différents niveaux pour assurer la validité des modèles, la
vérification des contraintes métier, et comme partie intégrante des transformations de
modèle pour spécifier des règles de transformation précises.
Déclare une grammaire Xtext pour un DSL appelé StateMachine. Cette grammaire étend les terminaux communs
d'Xtext, qui incluent des définitions pour des éléments de syntaxe de base tels que les identifiants et les nombres.
Indique que le méta-modèle généré par cette grammaire sera identifié par l'URI donné, ce qui est utile pour la résolution de références et
Statemachine: {Statemachine}
Définit un élément racine Statemachine qui contient des listes optionnelles d'événements,
d'événements de réinitialisation, de commandes et d'états. Le * signifie zéro ou plusieurs, et le
+= indique que ces éléments sont collectés dans des listes. Les crochets [] pour resetEvents
indiquent que ce sont des références à des événements définis ailleurs dans le modèle.
Command:
name = ID code = ID
Une Command est un élément qui a un name et un code, tous deux identifiés par des
identifiants uniques (ID).
State:
'state' name=ID
(transitions+=Transition)*
'end'
Un State représente un état dans la machine. Il a un name et peut avoir une liste d'actions
(références à des objets Command) et une liste de transitions. L'opérateur ? indique que le bloc
d'actions est optionnel.
Transition:
Une Transition est définie par un événement déclencheur (event) et un état cible (state). La
syntaxe [Event] et [State] indique que event et state sont des références à des instances
existantes des types Event et State.
events
event E1 code C1
event E2 code C2
end
resetEvents
E1 E2
end
commands
end
state S1
transition E1 => S1
end
state S2
transition E2 => S1
end }
context State
pour question 5
Solution 1
[module generate('http://www.example.org/StateMachine')]
package org.example.statemachine;
machine.run();
// Initialize states
[/for]
// Initialize transitions
[transition.from.name.toJavaIdentifier()/],
[transition.to.name.toJavaIdentifier()/],
[transition.event.name.toJavaIdentifier()/]
);
[/for]
// ...
class State {
String name;
this.name = name;
}
class Transition {
State from;
State to;
String event;
this.from = from;
this.to = to;
this.event = event;
[/file]
[/template]
Solution 2
[module generateJava('http://www.example.org/StateMachine')]
[comment @main /]
package org.example.statemachine;
[/for]
// Initial state
this.currentState = [aStateMachine.initialState.toJavaIdentifier()/];
switch (this.currentState) {
case [transition.from.name.toJavaIdentifier()/]:
if ("[transition.event.name/]".equals(event)) {
this.currentState = [transition.to.name.toJavaIdentifier()/];
break;
[/for]
default:
[/file]
[/template]