Erreurs sur les tableaux


o Messages généraux
o Utilisation du mécanisme standard de captage d'erreur
Les services de bas niveau opérant sur des tableaux sont utilisés dans de nombreux services de plus haut niveau : fonctions globales, méthodes des différentes classes (Entity, Process, etc.).

Certaines erreurs faites dans la manipulation des tableaux font l'objet d'un message général, non particularisé au contexte dans lequel cette erreur est survenue, dans le code de la bibliothèque DIESE ou dans le code applicatif. Ces erreurs sont documentées dans le premier lien ci-dessus.

D'autres occasionnent un message dans lequel est indiqué dans quel code, manipulant un tableau, est apparue la situation d'erreur. Ce code peut faire partie de la bibliothèque DIESE ou de l'application. Pour permettre une particularisation au contexte d'appel, on utilise le mécanisme standard de captage d'erreur, dont on rappelle ici le schéma :

//
// le code réputé pouvoir rencontrer une situation interdite
//
template <class T>
T& Tableau<T>::get_nth(int k) {
  if (k < 0 || k >= nbElements) {
      throw OUT_OF_TAB_RANGE_GET_NTH;
    }
  else 
    ...
}
Dans le code qui est réputé pouvoir révéler une situation interdite, ici get_nth(k), son programmeur à lancé, quand la situation interdite est rencontrée, une exception au moyen d'une instruction throw <e>.
//
// un code applicatif, appelant un service pouvant révéler une situation interdite
//
void UnCodeAppelant() {
  Tableau<int>* tab = new Tableau<int>(0, 10); // un tableau de 10 éléments tous égaux à 0
  try {
    int index = f();  // une fonction retournant un entier
    int k = tab->get_nth(index);
  }
  catch (int e) {
    // une réaction particulière pour la situation interdite
    // la réaction ci-dessous est prédéfinie dans DIESE
    TabIndexOutOfRange(e, "UnCodeAppelant", tab, index, TRUE);
  }
}
Dans l'application de plus haut niveau, le code réputé pouvoir révéler une situation interdite, ici get_nth(index), est inclus dans un bloc try.
Ce bloc try est immédiatement suivi par un bloc catch, le "capteur d'exception", qui reçoit en argument l'exception lancée (ici OUT_OF_TAB_RANGE_GET_NTH). Le corps du catch n'a plus qu'à exploiter cette information et le contexte d'appel pour émettre à l'utilisateur un message approprié.
DIESE contient un certain nombre de réactions prédéfinies corespondant à des situations d'erreur envisageables. Elles sont documentées dans le second lien dans la liste en haut de la présente page.

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