Présentation générale

DIESE est une bibliothèque de classes C++, orientée vers le développement de simulateurs. Ces classes, indépendantes de tout domaine d'application, fournissent à la fois des modèles et des services pour créer des classes propres à l'application de l'utilisateur. Par exemple, la classe Entity de DIESE propose une structure générale pour représenter tout système, toute partie ou élément de système simulé, et des fonctions standards pour accéder aux propriétés de cette structure.

L'utilisation de DIESE consiste simplement à exploiter les classes prédéfinies et les services associés (en termes d'envoi de messages et d'appel de fonctions) à l'intérieur d'un programme C++ dont l'utilisateur à l'entière maîtrise. C'est le programme écrit par l'utilisateur, avec ses directives d'inclusion des classes prédéfinies et des classes propres à l'application, qui constitue le simulateur.

Typiquement une tâche élémentaire de simulation consiste à provoquer et entretenir les changements d'état d'un système au cours d'une périodé déterminée. En cours de simulation, l'utilisateur peut être tenu informé de ces changements. En fin de simulation, un rapport lui est fourni sur cette évolution ou simplement sur l'état final du système. De façon plus générale, la tâche de simulation peut être un enchaînement d'un certain nombre de ces tâches élémentaires, en considérant à chaque fois des conditions différentes en début ou en cours de simulation, ce qui entraîne éventuellement l'écriture d'un rapport global.

Les tâches de modélisation et de simulation d'un système à l'aide de DIESE présentent les deux particularités importantes suivantes :

L'approche dans laquelle se situe DIESE est celle des systèmes discrets -ou considérés comme tels-, par opposition aux systèmes continus. Dans ces derniers, l'état du système et le temps sont supposés changer continuement : on représente cela par un système d'équations différentielles et l'état est généralement calculé par des techniques d'intégration numérique. Dans les systèmes discrets, les changements d'états sont représentés par des fonctions de transition d'état entre deux instants. L'avancement du temps simulé peut être explicitement programmé sous la forme d'une boucle qui incrémente le temps par un certain pas, à partir d'un moment initial jusqu'à un moment final. Les équations de changement d'état sont alors calculées à chaque pas. Dans une simulation à événements discrets, le contrôle du temps consiste à savoir en permanence quelle est la prochaine opération à effectuer sur le système, et à faire avancer le temps simulé jusqu'à la date à laquelle cette opération est prévue. Il s'agit donc de gérer un agenda d'événements, c'est-à-dire une structure dans laquelle on insère des événements à une place fonction de leur date d'occurrence, et de laquelle on enlève constamment l'événement de tête. La simulation s'arrête lorsque l'agenda est vide. C'est sur ce principe que DIESE est conçue.

Le modélisateur n'a donc qu'à exploiter un module qui assure le contrôle de la simulation, fourni dans les classes prédéfinies de DIESE, en particulier la classe Simulation. En contrepartie, l'utilisateur doit modéliser son domaine applicatif en termes d'événements. Un événement est défini comme une action ou un fait qui contrôle l'évolution du système. Ce contrôle est conçu comme un ensemble de directives données à des processus. Ces processus sont, de façon générale, des mécanismes de changement d'état du système (par exemple, une transformation biologique ou physique, ou bien un raisonnement). Plus explicitement, les directives permettent d'initier, d'exécuter complètement ou partiellement, d'arrêter un processus ou de reprendre son exécution. Un processus géré par DIESE est caractérisé par les directives qu'il reconnaît et par les procédures (initiation, …) qui leurs sont associées. Ces procédures sont librement écrites par l'utilisateur, mais normalement elles modifient l'état de certains composants du système : c'est dire qu'elles en constituent le modèle dynamique. En utilisant la terminologie de DIESE, les procédures modifient la valeur des descripteurs des composants du système, qu'on appellera les entités. L'utilisateur de DIESE est donc invité à exploiter les classes prédéfinies qui réalisent les différents concepts qui viennent d'être évoqués : Event, Process, Descriptor et Entity, à partir desquelles il pourra faire descendre les sous-classes propres à son domaine d'application.

DIESE donne la possibilité d'attacher aux descripteurs (des entités) des morceaux de programme qui se déclenchent automatiquement quand on accède à la valeur du descripteur, ou quand on la modifie. Ces procédures, parfois appelées démons ou moniteurs sont représentées et gérées par les classes DescValueMonitor et StructureMonitor.

Ce manuel est organisé en pages, chacune relative à une ou plusieurs des classes prédéfinies qui ont été évoquées dans cette introduction, ou à l'une de leurs sous-classes. Il présente ainsi les traits d'un manuel de référence. Il constitue cependant un manuel de l'utilisateur, puisque, de par sa conception même, DIESE s'utilise en faisant constamment référence, dans un code C++, aux classes prédéfinies, à leurs méthodes et aux fonctions globales.

En préalable à la description des classes, la page "Mise en œuvre de DIESE" décrit les deux modes d'utilisation des simulateurs : le mode en ligne de commande et le mode interactif (à l'aide d'une interface graphique). Y est aussi évoquée la possibilité de placer en entrée du simulateur la description de la structure du système ainsi que des connaissances sous forme de fonctions. Ensuite deux pages donnent deux exemples d'utilisation de DIESE, ainsi que les sorties correspondantes dans le format disponible avec la version actuelle. Puis sont décrits les types prédéfinis et les différentes variables et structures globales, dont la connaissance est nécessaire à la lecture des pages suivantes. La page "La gestion du temps" décrit les fonctions de gestion du temps en général et du temps simulé en particulier. La page "Fonctions globales" décrit diverses fonctions, en particulier celles qui gèrent les informations sur les classes d'entités elles-mêmes (notamment relatives à leur hiérarchie). La page "La gestion des situations d'erreur" liste les fonctions invoquées pour signaler une erreur, en général une incompatibilité entre le code de l'utilisateur et les spécifications des services de DIESE, ou une situation inattendue lors de l'exécution et qui nécessite en général que l'utilisateur vérifie son code.