• [^] # Re: Quelques "coquilles"

    Posté par . En réponse à la dépêche Sortie de Hercule la version 2 du compilateur SmartEiffel. Évalué à 1.

    Oulà ! j'avais mal regardé. Ton invariant est complètement extravagant. Déjà le fait de ne pas être inversible pour une matrice déclenche une exception. Tu n'aimes pas la singularité ! Tu codes ensuite if m.inversion_reussie then que je traduis par : s'il ne s'est pas produit d'exception... De toutes façon ce code ne sera jamais exécuté car la simple crétion d'une matrice, même inversible, va engendrer une exception.
    Ah bon ? Je ne vois pas pourquoi ?
    L'invariant est : inversion_reussie = (inverse /= Void)
    À la création de la matrice : inversion_reussie = False et inverse = Void (ce sont les valeurs par défaut, que l'on peut de toutes façons modifiées dans la méthode de création). (inverse = Void)=True, donc (inverse /= Void) = False, donc (inverse /= Void) = inversion_reussie.
    Ensuite, après tentative d'inversion :
    - inversion réussie : inversion_reussie = True, inverse /= Void, et donc (inverse /= Void) = True
    - inversion échouée : inversion_reussie = False, inverse = Void et donc (inverse /= Void) = False

    Ensuite il y a un autre critère de qualité qui s'appelle le masquage d'information. Les clients ne doivent pas avoir accès à l'implémentation de la classe.
    Je ne vois pas en quoi les clients ont accès à l'implémentation de la classe. La post-condition [not inversion_reussie or else (Current * inverse).distance (identity) < epsilon] suffit à l'utilisateur de la classe pour comprendre comment utiliser les méthodes pour trouver l'inverse de la matrice. La partie implémentation, ce serait le code dans la méthode. Ce n'est pas parce que l'utilisation de la classe n'est pas conforme à la version mathématique, ou aux habitudes qu'il s'agit d'implémentation montrée.