Attributs fonctionnels : les méthodes


o Les classes de base pour représenter les méthodes
o Méthodes prédéfinies
Le système simulé est composé d'entités entre lesquelles existent des relations structurales (de composition, ensembliste), gérées par des services de la classe BasicEntity. Ces services, par exemple GetElement(int k), sont des méthodes (au sens du C++ natif) de la classe BasicEntity. Dans le code de la classe, ce sont de simples fonctions-membres :
Entity* BasicEntity::GetElement(int k) {
  Entity* result = NULL;
  ...  // recherche de l'élément de rang k
  return result;
}
Une telle méthode est spécifiée au niveau de la classe d'objets et est commune à tous les objets instances de la classe.

Les "méthodes" présentées dans cette page ne sont pas des services de la même nature : ce sont elles-mêmes des objets (complexes) qui permettent de spécifier des attributs fonctionnels d'autres objets. Un attribut essentiel de ces objets "méthodes" est leur corps qui, lui, est une simple fonction. Par exemple, si le service GetElement(int k) n'était pas prédéfini, on doterait la classe Entity d'une "méthode" GetElementMethod, héritant de EntityMethod, dont le corps serait le suivant :

Entity* getElementMethod_Body(EntityMethod* pM) {
  int rank = pM->GetIntArgValue(RANK);
  Entity* result = NULL;
  ...  // recherche de l'élément de rang 'rank'
  return result;
}
On note ici, et on précisera plus loin, que :

Les différentes spécialisations de méthodes

Les attributs des méthodes

Une méthode en général (instance de Method) est caractérisée essentiellement par les propriétés suivantes :

A chaque type de valeur renvoyée par le corps correspond une sous classe de EntityMethod, ProcessMethod, EventMethod, …, selon le cas. Dans DIESE, le type d'une méthode peut être l'un des suivants :

Accessoirement, une méthode est caractérisée par les propriétés suivantes :

L'invocation des méthodes

L'invocation d'une méthode, instance de Method, attachée par exemple à une entité, n'est pas très différente de l'invocation de la même méthode qui serait installée comme une fonction membre classique GetElement(int) de l'entité. L'appel classique :

  int k = 1;
  Entity* pElem_k = pObj->GetElement(k);

devient :

  pObj->SetIntArgValue(GET_ELEMENT_METHOD, RANK, 1);
  Entity* pElem_k = pObj->ExecIntMethod(GET_ELEMENT_METHOD);

ou encore :

  EntityEntityMethod* pM = pObj->GetMethod(GET_ELEMENT_METHOD);
  pM->SetArgValue(RANK, 1);
  Entity* pElem_k = pM->Body(pM);

GET_ELEMENT_METHOD est le symbole de la sous-classe de Method dont le corps a le même code que GetElement(int), et dont pM est l'instance attachée à pObj.

Pourquoi les méthodes sont-elles des classes ?

L'utilisateur de DIESE peut trouver les avantages suivants au codage d'une connaissance fonctionnelle par une instance de Method :

Remarques diverses et générales


This page was generated with the help of DOC++.