Chapitre 13. Mécanismes d'inférence

13.1. Attachement Procédural

L'attachement procédural est un mécanisme d'inférence des valeurs des variables des instances d'une base AROM. Ce mécanisme permet d'associer à une variable et à une classe AROM une méthode Java réalisant le calcul de la valeur de cette variable pour les différentes instances de la classe.

L'attachement procédural est réalisé en désignant explicitement la classe Java et la méthode de cette classe qui devra être appelée par le système AROM pour inférer la valeur de la variable. La classe et la méthode sont toutes deux désignées par leur nom : le nom complet (fully qualified name) de la classe et le nom de la méthode.

13.1.1. Propriétés de la méthode attachée

La méthode appelées par le système AROM doit respecter les propriétés suivantes :

  • la méthode retourne une valeur sous la forme d'un objet (type java.lang.Object).

  • la méthode peut prendre posséder un argument de type arom.kr.model.AMInstance. Si c'est effectivement le cas, ce paramètre est utilisé par le système AROM pour passer à la méthode l'instance AROM pour laquelle le calcul est déclenché.

  • Enfin, la méthode peut être une méthode d'instance ou une méthode statique. Dans le cas d'une méthode statique, il est inutile de créer une instance de la classe à laquelle la méthode Java appartient. Dans le cas d'une méthode d'instance, il faut que le système AROM puisse récupérer une référence à une instance de la classe Java à laquelle cette méthode appartient. Pour ce faire, le système tente d'appeler la méthode statique getInstance de cette classe, et cette méthode doit retourner au système une instance qui sera utilisée pour effectuer l'appel. De cette manière, c'est le concepteur de la classe attachée qui décide de la manière de créer les instances utilisées par l'attachement procédural.

13.1.2. Attachement procédural version 1.0 vs version 2.0

La manière dont on spécifie l'attachement procédural, telle qu'elle vient d'être décrite, est très différente de celle de la version 1.0. Dans la version 1.0, l'association (classe, variable)-méthode Java était basé sur une convention de nommage de la classe java réalisant le calcul de la valeur. De cette manière, le concepteur de la base de connaissances devait uniquement indiquer (par un booléen) si une variable peut-être calculé ou non via un attachement procédural. Le nom de la classe Java associée au calcul de la variable était alors automatiquement déterminé par le système à partir du nom de la variable et du nom de la classe dans laquelle l'attachement était déclaré.

Ainsi, pour calculer par attachement procédural la valeur de la variable salaire de la classe Professeur, le système AROM recherchait automatiquement une classe PAProfesseur (PA pour Procedural Attachment, suivi du nom de la classe AROM : Professeur) et appelait la méthode getSalaire() de cette classe.

Ce mode de fonctionnement a été abandonné au profit d'une déclaration plus explicite de la classe et de la méthode qui doit être appelée. Toutefois, le parser standard reconnaît l'ancienne forme de la déclaration de l'attachement et reproduit l'ancien fonctionnement en reconstruisant le nom de la classe Java et le nom de la méthode à partir du nom de la classe AROM et du nom de la variable.

13.1.3. Exemple

L'exemple ci-dessous illustre le fonctionnement de l'attachement procédural en utilisant des méthodes statiques.

Exemple 13-1. Attachement procédural de la variable salaire de la classe Professeur


/**
 * Attachement procedural permettant le calcul de la variable salaire
 * de la classe AROM Professeur.
 *
 * @author Christophe Bruley
 */

public class PAProfesseur {
  
 private static PAProfesseur instance_;

  public static PAProfesseur getInstance() {
    if (instance_ == null) 
      instance_ = new PAProfesseur();
    return instance_;
  }

  private PAProfesseur (){
    
  }
  public Object getSalaire() {
    return new Long(210000);
  }

}// PAProfesseur