Simscript III/Dictionnaire des instructions/MOVE FROM

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

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