Les méthodes (au sens d'instances de Method, voir page 'Attributs fonctionnels : les méthodes') décrivent des connaissances fonctionnelles sur les entités, les processus ou les événements.
Elles possèdent un attribut (appelé le corps) qui décrit la procédure exécutée lors de l'invocation de la méthode (par le message Body adressé à la méthode ou le message Exec..Method adressé à l'entité, le processus ou l'événement).
Ce que fait ce corps et/ou la valeur qu'il renvoie peuvent dépendre du contexte de l'appel. Ces élements de contexte sont transmis au corps de la méthode sous forme de paramètres. La liste des paramètres est une donnée membre de la classe Method. Ainsi, leurs valeurs sont accessibles à l'intérieur du corps.
En fait, un paramètre est une instances de la présente classe Argument.
Dans DIESE, le type d'un paramètre, désormais appelé argument, peut être :
A chacun de ces types correspond une sous-classe prédéfinie de Argument. Seules ces sous-classes peuvent avoir des instances (autrement dit, on ne crée jamais d'instance directe de Argument).
- un des types de descripteurs (sous-classes de Descriptor), à savoir un entier ou un réel (resp. les types int, float et double de C), un tableau d'entiers ou de flottants, une chaîne de caractères (le type char* de C), un pointeur sur un tableau d'intervalles sur les entiers (le type pIntIntervalTab*), une instance des sous-classes de Entity, un tableau d'instances d'entités, un tableau d'instances de spécifications de domaines de valeurs.
Le type bool n'est pas fourni : un argument booléen doit être représenté par un argument de type int dont les valeurs possibles sont FALSE (0) et TRUE (1).- le type Event* quand la valeur est une instance des sous-classes de Event
- le type Descriptor* quand la valeur est une instance des sous-classes de VariableDescriptor, à l'usage exclusif des méthodes de démons.
- le type DescValueSpec* quand la valeur est une instance de DescValueSpec
De façon générale :
- Les constructeurs de base des sous-classes de Argument affectent un symbole et un nom de classe, ainsi qu'une valeur par défaut, précisés dans la documentation de chaque sous-classe.
- Les constructeurs par copie copient le type, le symbole, le nom et les valeurs.
- Les opérateurs d'affectation font que l'argument à gauche a la même valeur que celui à droite.
- les services GetValue renvoient la valeur de l'instance d'Argument.
- les services SetValue, argumentées par une valeur, affectent cette valeur à l'instance d'Argument.
Lors de la création d'un argument, la valeur par défaut, définie pour les différents types conformément au tableau suivant, est éventuellement assignée à l'argument :
classe
type valeur par défaut IntArgument
int aucune FloatArgument float aucune DoubleArgument double aucune StringArgument char* "" EntityArgument BasicEntity* NULL IntTabArgument pIntTab* NULL FloatTabArgument pFloatTab* NULL DoubleTabArgument pDoubleTab* NULL EntityTabArgument pEntityTab* aucune IntDomainArgument pIntIntervalTab* un pIntIntervalTab vide DescValueSpecArgument DescValueSpec* aucune DescValueSpecTabArgument pDescValueSpecTab* aucune EventArgument Event* aucune DescriptorArgument Descriptor* aucune