Les instances sont les seules entités AROM qui ne sont pas créées depuis l'entité représentant leur espace de nommage, c'est à dire la base de connaissances. En effet, les instances sont créées à partir des structures auxquelles elles sont rattachées, voir section Les instances AROM. L'exemple qui suit illustre cette création d'instances, objets et tuples.
Exemple 12-1. Création d'instances, objet et tuple
/**
* CreateInstance.java
*
* Cet exemple montre comment creer des objets AROM (des instances de
* classes AROM) et des tuples (des instances d'associations AROM).
*
* @author Veronique DUPIERRIS
* $Id: CreateInstance.java,v 1.7 2001/12/06 11:55:05 fauchera Exp $
*/
import arom.kr.model.AMClass;
import arom.kr.model.AMAssociation;
import arom.kr.model.AMObject;
import arom.kr.model.EntityCreationException;
import arom.kr.model.Link;
import arom.kr.model.AMTuple;
import arom.kr.model.KnowledgeBase;
import java.util.Iterator;
import arom.kr.factory.AromSystem;
import arom.AromSetUp;
import arom.kr.model.modifiers.FacetModifier;
import arom.kr.model.InvalidNameException;
public class CreateInstance {
/**
* Cette methode cree une nouvelle base de connaissances nommee "BaseTest" et
* cree un ensemble de classes dans cette base. Cet ensemble comprend : la
* classe racine 'Personne' specialisee par les classes 'Homme'et 'Femme'.
* Une association 'Couple' relie les objets de ces deux classes.
*
* @return l'object KnowledgeBase representant la nouvelle base de
* connaissances.
*/
public static KnowledgeBase createKb(){
String kbName = "BaseTest";
AromSystem kbFactory = AromSetUp.getAromSystem();
KnowledgeBase kb = null;
try{
kb = kbFactory.createKB(kbName, new Object[0]);
AMClass personne = kb.createClass("Personne", null);
AMClass femme = kb.createClass("Femme", personne);
AMClass homme = kb.createClass("Homme", personne);
AMAssociation couple = kb.createAssociation("couple", null);
// --- cree les roles pour l'association
// Aucun modifier n'est precise, la classe typant le role etant explicite.
FacetModifier[] modifiers = new FacetModifier[0];
couple.createRole("mari", homme, modifiers);
couple.createRole("femme", femme, modifiers);
} 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);
} catch(InvalidNameException ine) {
System.out.println("Une erreur est survenue lors de la creation de la base: ");
System.out.println(ine.getMessage());
System.exit(1);
}
return kb;
}
/**
* Cree une instance pour chacune des classes 'Homme' et 'Femme'.
*
* @param la base de connaissances contenant les classes 'Homme', 'Femme'
* et l'association 'Couple'.
*/
public static void createInstances(KnowledgeBase kb){
AMClass homme = kb.lookupClass("Homme");
AMClass femme = kb.lookupClass("Femme");
AMAssociation couple = kb.lookupAssociation("couple");
//creer un objet pour chacune des classes
AMObject leon = null;
AMObject ginette = null;
try{
leon = homme.createObject("Leon");
ginette =femme.createObject("Ginette");
} catch( EntityCreationException ece) {
System.out.println("Une erreur s'est produite lors de la creation des objets: ");
System.out.println(ece.getMessage());
System.exit(1);
}
// creer un lien utilise pour la creation d'un tuple
// de l'association couple et identifiant pour chaque
// role de cette association les objets.
String[] roleNames = new String[2];
roleNames[0] = "mari";
roleNames[1] = "femme";
AMObject[] roleValues = new AMObject[2];
roleValues[0] = leon;
roleValues[1] = ginette;
Link lienDuCouple = new Link(roleNames,roleValues);
// creer un tuple
try{
AMTuple nouveauCouple = couple.createTuple(lienDuCouple);
} catch( EntityCreationException ece) {
System.out.println("Une erreur s'est produite lors de la creation du tuple: ");
System.out.println(ece.getMessage());
System.exit(1);
}
}
public static void main(String[] args){
KnowledgeBase kb = createKb();
createInstances(kb);
Iterator allClasses = kb.rootClasses();
while(allClasses.hasNext()){
AMClass nextClass = (AMClass) allClasses.next();
System.out.print("La classes "+ nextClass.getName());
System.out.println(" a pour instance(s) :" );
Iterator allInsts = nextClass.instances();
while(allInsts.hasNext())
System.out.println("- "+ ((AMObject) allInsts.next()).getName());
}
Iterator allAssocs = kb.rootAssociations();
while(allAssocs.hasNext()){
AMAssociation nextAssoc = (AMAssociation) allAssocs.next();
System.out.print("L'assoc "+ nextAssoc.getName());
System.out.println(" a pour instance(s) :" );
Iterator allInsts = nextAssoc.instances();
while(allInsts.hasNext())
System.out.println("- "+ (AMTuple) allInsts.next());
}
AromSetUp.getAromSystem().cleanup();
}
}// CreateSlot