Les exceptions et leurs traitements
Quelles représentations pour les exceptions : classe ou identificateurs ?
Nul (ou Nil) ne sait si l’erreur de parcours dans le flot de contrôle d’un programme est l’exception qui confirme la règle, mais au moins chacun(e) est conscient(e) que l’exception doit être traité avec tout autant de sérieux que ce qui ne l’est pas.
J’invite ici chacun(e) à formuler son point de vue sur la question (vous en avez un, n’est-ce pas )
J’ouvre la danse en vous exposant une question que je me pose au sujet du traitement des exceptions en Pascal objet ou FreePascal, et surtout de l’aspect orienté objet du traitement des exceptions dans ces dialectes du Pascal.
J’ai un doute sur ce point précis. Les classes et les objets recouvrent deux aspects : un aspect « structure » et un aspect « polymorphisme ». L’aspect structure peut être accessible à la programmation structuré en générale, et si c’est des classes sont utilisé en Pascal pour le traitement des exception, l’intention initiale est certainement donc d’y amener le polymorphisme.
Mais dire que le polymorphisme est utile au traitement des exceptions, revient à prétendre que les classes peuvent encapsuler le traitement à la suite d’une exception (logique, puisque car on est dans un contexte polymorphisme+traitement-d’exception… alors que pourraient-elles encapsuler d’autre).
Mais d’un autre point de vue, la classe représentant l’exception étant défini par le code levant l’exception, et non pas le code traitant l’exception, cela amène le remarque que comme c’est le code levant l’exception, s’il encapsule un traitement d’exception dans les classes représentant les exceptions, alors ce code connaîtrait le traitement à faire suite à une exception.
Dans ce cas, encapsuler serait inutile, puisque le traitement pourrait être opérer immédiatement.
Je souligne cela pour dire que si encapsulation de traitement il y avait, il ne serait utile que du coté du code recevant l’exception (qui n’est pas toujours dans le même module, loin de là, et même pas toujours non-plus du/de-la même auteur). Mais cette encapsulation coté code receveur est impossible, sauf si le protocole d’émission des exceptions prévoyait que les codes receveur pouvaient initialisé (dans l’initialisation de l’application), les associations classes/exceptions. Mais cela ne fait pas parti du protocole (il n’y en a d’ailleur tout simplement pas du tout, de protocole)
Et si un tel protocole existait, fonctionnerait comme suit : les exception ne serait que des identificateurs, et les codes receveurs d’exception, associerait ces identificateurs à des classes. Mais dans le fond à ce point là, il n’y aurait même pas obligation d’associer les identificateurs à des classes, mais on pourrait les associers à n’importe quel autre traitement (programmation structuré standard).
Pour en revenir au point de départ, et faire un bilan sous l’éclairage de tout ceci : on remarquera (pour ce que j’en sais), que l’aspect polymorphisme n’est jamais utilisé dans le traitement des exception des programmes Pascal, et que l’utitlité des classes pour les exception n’y est donc jamais confirmer.
L’approche Ada (qui hérite directeemnt du Pascal), qui emploie de simple identificateur, me semble donc mieux réfléchi.
N.b. je ne cherche pas ici à discréditer le Pascal au pretexte de son traitement des exceptions, … loin de là… c’est au contraire pour mieux comprendre ou y voir plus clair. que j’appel à en discuter et à faire des commentaires sur ces remarques. Noter encore qu'il n'est pas obligatoire d'aboutir à la conclustion que l'approche Pascal des exception est vraiment bonne, tout comme il n'est pas obligatoire d'en arriver à la conclusion quelle est mauvaise.... mais il est sûrement bon d'argumenter les points de vues.
Bonne plume à tous/toutes
Partager