Simscript III/Dictionnaire des instructions/MOVE FROM
L’énoncé move from est utilisé dans l’implantation d’un sous-programme associé à une variable monitorée. Il sert à affecter la valeur de la variable monitorée une variable associée au sous-programme ou à affecter une valeur à la variable monitorée.
Syntaxe : |
|
Le mode de variable doit être le même que le mode de la variable monitorée. La variable peut être simple ou indicée, locale ou globale.
L’énoncé move from est utilisé dans une routine ou méthode monitorée à gauche pour affecter la valeur d’une expression à la variable monitorée. L’énoncé move to est utilisé dans une routine ou méthode monitorée à droite pour affecter la valeur de la variable monitorée à une variable dans le sous-programme.
L’exemple suivant est tiré du guide de programmation de Simscript III. Dans le préambule, il y a une déclaration d’une classe Ressource avec un attribut Unités_Disponibles qui est déclaré comme une variable monitorée à gauche ; ceci implique qu’à chaque fois que l’on affecte une valeur à l’attribut Unités_Disponibles, la méthode Unités_Disponibles (du même nom que la variable monitorée) est invoquée automatiquement. La valeur affectée à l’attribut Unités_Disponibles est affectée avec l’énoncé enter with à la variable locale Acquises ; avant de quitter le sous-programme la valeur de l’expression Acquises est affectée à la variable monitorée.
preamble
begin class Ressource
every Ressource
has a Unités_Totales,
an Unités_Acquises,
an Unités_Disponibles method,
an Attendre_Pour method,
a Nettoyer method,
and owns a Requête'Queue;
define Unités_Totales as an integer variable;
define Unités_Acquises as an integer variable monitored on the left;
define Unités_Disponibles as an integer method;
define Attendre_Pour as a method
given 2 integer values; ‘‘Unités requises et priorité;
before destroying a Ressource, call Nettoyer;
end ‘‘ Ressource
end ‘‘ preamble
methods for the Ressource class
left method Unités_Acquises
define Acquises as an integer variable;
define Requête as a Requête reference variable;
enter with Acquises;
while Queue(Ressource) is not empty and
Unités(F.Queue(Ressource)) <= Unités_Totales - Acquises
do
remove first Requête from Queue(Ressource);
add Unités(Requête) to Acquises;
reschedule the Le_Processus(Requête) now;
destroy Requête;
loop;
move from Acquises;
end ‘‘ Unités_Acquises