Skip to content

Concepts élémentaires

Floww edited this page Mar 31, 2014 · 7 revisions

Composant

class Component

Le composant est une notion élémentaire dans l’architecture de ce simulateur. Sa faible définition lui apporte une grande souplesse suffisante pour permettre à un développeur de l’adapter à son problème.

Un composant se définit en plusieurs points :

  • Un identifiant statique (nom)
  • Un identifiant d’instance unique (uuid)
  • Un identifiant de classification (définit via une énumération, soit un entier pour rester générique)
  • Une stratégie d’instance
  • Ensemble de propriétés (clé = valeur)
  • Ensemble de sous-composants

De façon synthétique, le composant est la représentation d’un principe physique ou logique à un niveau de détail donné pour lequel il délègue son comportement à une stratégie d’instance : l’implémentation. L’identifiant d’instance unique a vocation à différencier deux instances d’un même composant ; exemple arbitraire : j’ai deux composants “Carte” dans mon contexte de simulation.

Dans le cadre de l’échange de flux, le composant a été spécifié en trois types pour intérargir :

  • Composant entrée : élément esclave réagissant sur intéraction
  • Composant sortie : élément maître ou autonome réagissant sur évènement
  • Composant entrée / sortie : deux notions précédentes réunies

Concernant l'identifiant de classification, cette notion permet de classifier les composants : les cartes, les TPE, ... afin de permettre la recherche du médiateur correct si plusieurs sont disponibles. Cette notion n'est pas nécessaire si un seul médiateur existe entre deux composants et que l'appelant n'a pas d'autres médiateurs. Dans le cas de notre validation monétique, nous avons voulu valider ce mécanisme en définissant pour chaque composant un identifiant de classification. L'identifiant 0 correspond au type "non défini" qui permet d'utiliser ce système. Attention, la recherche de médiateur sur des types non définis n'est pas implémentée actuellement (méthode à ajouter dans la classe Context basée sur getMediators).

Stratégie

class IStrategy

Alors que le composant définit la structure et encapsule les données, la stratégie définit à elle seule l’implémentation. Une stratégie se traduit par l’implémentation de l’interface IStrategy définissant trois phases fondamentales :

-Initialisation

  • appelée au début de la simulation sur chaque composant
  • la stratégie peut initialiser des paramètres fonctionnels du composant
  • la stratégie peut initialiser des paramètres techniques du composant
  • la stratégie peut inscrire le composant à des événements globaux
  • permet de définir les propriétés nécessaire à la stratégie

-Traitement d’un message

  • appelé lors de l’arrivée d’un message sur le composant
  • la stratégie peut traiter ce dernier
  • la stratégie peut répondre au composant appelant

-Traitement d’un évènement

  • appelé lors du déclenchement d’un évènement sur le contexte
  • la stratégie peut traiter et réagir à ce dernier

Médiateur

class Mediator

Le médiateur permet à deux composants de communiquer entre eux ; il est comparable au moyen de communication, pour exemple : le cable ethernet entre une carte ethernet et un switch. Ce concept découle du patron de conception qui apporte un couplage faible entre les composants et définit puis caractérise une communication entre deux composants.

Il facilite donc les communications et permet de définir leur nature :

  • communication unilatérale : A envoie un message à B
  • communication bidirectionnelle : A envoie un message à B et répond.

Il existe trois types de médiateur :

  • explicite, ceux définit par l'utilisateur
  • implicite, ceux qui sont automatiquement définit par la relation parent/enfant des composants
  • dynamique, ceux qui sont générés pendant la simulation afin de relié les composants ayant des liens implicites

Des médiateurs dynamique ont été créés pour gérer dynamiquement quelques cas spécifiques et ainsi déporter la complexité au framework et non au développeur :

  • communication transférée : un composant logique transfère le message au composant physique (ex : le TPE transfère au chipset)
  • communication pontée : encapsulation de deux médiateurs en un seul (ex : le chipset du TPE pilote le lecteur de puce, les médiateurs TPE <-> Chipset et TPE <-> Lecteur de puce seront pontés).
  • communication inversée : inverse A et B dans un médiateur bidirectionnelle (utilisé dans le cadre du pontage).

La notion de médiateur nous permettra à terme de connaître les composants pouvant communiquer avec un composant donné au travers de notre bibliothèque.