Chapitre 10. Traitements spécifiques aux structures

Table des matières
10.1. Création de structures.
10.2. Spécialisation des structures
10.3. L'accès aux slots
10.4. L'accès aux instances

10.1. Création de structures.

Les structures, classes et associations, sont des entités nommées, voir chapitre Représentation des entités du système, qui appartiennent à l'espace de nommage défini par la base de connaissances. Par conséquent, la création d'une structure ne peut être réalisée qu'à partir de l'objet représentant la base de connaissances, l'objet KnowledgeBase. L'exemple qui suit illustre la création de classes.

Exemple 10-1. Création d'une classe


/**
 * Cette exemple montre comment creer une classe AROM.
 *
 * @author Veronique DUPIERRIS
 */
import arom.kr.model.KnowledgeBase;
import arom.kr.factory.AromSystem;
import arom.AromSetUp;
import arom.kr.model.EntityCreationException;
import arom.kr.model.AMClass;

public class CreateClass {
  
  /**
   * Cree une nouvelle base de connaissances nommee 'Test'. 
   *
   * @return la nouvelle KnowledgeBase
   */
  public static KnowledgeBase newKB(){
    //nom de la nouvelle base de connaissances.
    String kbName = "Test";

    // recupere une instance la classe AromSystem qui est en charge de la 
    // creation des objets KnowledgeBase.
    AromSystem kbFactory = AromSetUp.getAromSystem();
    
    // creer une nouvelle base de connaissancers AROM nommee Test. 
    // aucun autre attribut n'est necessaire lors de la creation de cette base.
    KnowledgeBase newKb = null;

    try {
      newKb = kbFactory.createKB(kbName, new Object[0]);
    } catch (EntityCreationException ece){
      System.out.println("Une erreur est survenue lors de la creation de la base :");
      System.out.println(ece.getMessage());
      System.exit(1);
    }
    return newKb; 
  }
  
  /**
   * Cette methode cree une nouvelle classe racine 'Cours' dans
   * la base test ainsi qu'une sous classe de la classe 
   * cours, la classe 'Mathematiques'. La base modifiee est ensuite
   * retournee a l'appelant.
   *
   * @param kb La base de connaissances dans laquelle les classes
   * seront inserees.
   */
  public static void createClasses(KnowledgeBase kb){
    
    //nom de la nouvelle classe a creer
    String className = "Cours"; 
    // 'Cours' est une classe racine, sans superClasse
    AMClass parent = null; 
    try{
      AMClass classeCours = kb.createClass(className, parent);
      //cree une sous classe de la classe 'Cours'.
      //nom de la nouvelle classe
      className = "Mathematiques";
      //Mathematiques est une sous classe de cours
      parent = classeCours; 
      AMClass classMath = kb.createClass(className, parent); 
    }catch (EntityCreationException ece){
      System.out.println("Un erreur est survenue lors de la creation de classes :");
      System.out.println(ece.getMessage());
    } 
  }
  
  public static void main(String[] args){
    KnowledgeBase kBase = newKB();
    createClasses(kBase);
    System.out.println("Nouvelle classes : "+kBase.lookupClass("Mathematiques").getFQName());  

    AromSetUp.getAromSystem().cleanup();

  }
  
}// CreateClass

    

La création d'une association est identique à celle d'une classe. Seuls le nom et la structure parente sont spécifiés. Les différents slots de la nouvelle structure, rôles et/ou variables, sont définis par la suite, à partir de cette nouvelle structure qui représente l'espace de nommage des slots.