• Aucun résultat trouvé

A non C désignant la négation (l'assertion contraire) de l'assertion C

6. Et si l'on rédigeait des marches à suivre !

6.3 Construction d'une marche à suivre

Il n'existe malheureusement aucune règle qui conduise à coup sûr à l'écriture d'une marche à suivre satisfaisante; autrement dit, il n'existe aucun algorithme pour la conception des algorithmes. En ce sens, la programmation reste et restera un art qui ne peut s'apprendre que lentement : c'est en s'exerçant à la conception des marches à suivre que, peu à peu, on maîtrise les difficultés qui y sont attachées.

Je vais cependant indiquer, dans le cas du robot peleur de pommes de terre, une manière de procéder qui illustre ce que peut être la démarche descendante qui va s'incarner dans l'utilisation de l'appel de procédure et que nous retrouverons plus tard dans la "vraie" programmation.

TANT QUE marmite pas remplie TANT QUE panier pas vide

SI marmite pas remplie ALORS Pèle

L'objectif ici est donc de faire en sorte que le robot pèle la quantité de pommes de terre nécessaire pour remplir la marmite. On "sent" bien que ce processus est essentiellement répétitif. Dès lors, on serait tenté de proposer :

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

JUSQU'A CE QUE la marmite soit remplie

en sachant fort bien que l'action dont on commande la répétition ne figure pas dans le répertoire des actions élémentaires de notre exécutant. Ce n'est pas grave; nous pouvons laisser cette instruction trop complexe au sein de la marche à suivre, quitte à l'expliciter dans une annexe.

Ce qui est important, c'est de sentir que, par rapport à l'énoncé original qu'on pouvait synthétiser par

"Remplis la marmite",

nous avons déjà fait un petit pas dans le décorticage rendu obligatoire par les caractéristiques de l'exécutant. Le problème n'est plus d'expliquer "comment faire pour remplir la marmite", mais seulement "comment faire pour ajouter une pomme de terre supplémentaire dans cette marmite".

Ainsi donc nous pouvons, à ce niveau de l'analyse, nous poser la question suivante : si l'exécutant était capable de comprendre :

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

la marche à suivre proposée ci-dessus serait-elle correcte ?

Et là, on constate que tout ira bien, sauf dans le cas (limite !) où aucune pomme de terre ne doit être pelée, parce que la marmite fournie est déjà remplie avant même que le robot ne commence son travail. Je rappelle que j'avais signalé cette possibilité lors de l'énoncé du problème.

On va objecter que vraiment c'est "chercher la petite bête" que d'évoquer le cas extrême où la marmite est déjà remplie avant que le travail ne commence. Je répondrai seulement que le folklore informatique foisonne de ces exemples de cas "extrêmes" et non envisagés par les programmes de traitement.

Combien de fois les consommateurs forcés d'informatique se voient-ils opposer, au cours de leurs démarches administratives, la petite phrase "l'ordinateur n'a pas prévu votre cas", comme si l'ordinateur pouvait "prévoir" quoi que ce soit ! La justification correcte est évidemment "l'analyste-programmeur a omis d'envisager les cas comme le vôtre et n'a donc pas indiqué à l'ordinateur d'y apporter un traitement convenable" ou même "je suis incompétent et incapable d'utiliser correctement l'ordinateur équipé du logiciel adéquat pour traiter votre problème". Nous touchons là deux traits fondamentaux de l'informatisation :

- L'ordinateur est devenu un "parapluie" providentiel derrière lequel abriter tout un tas d'incompétences, soit de ses utilisateurs, soit, le plus souvent, des concepteurs des programmes qui le contrôlent et le font agir.

- Le passage du "faire" au "faire faire" requis par l'informatisation gomme volontiers les cas limites ou exceptionnnels, soit parce que ceux-ci n'ont pas été débusqués lors de l'analyse, soit parce que les efforts de programmation nécessaires à leur mise en oeuvre sont trop importants.

REPETER

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

La souplesse apportée par les réactions "sur le tas" d'un être humain face aux situations nouvelles et difficilement prévisibles est évidemment absente du comportement de l'ordinateur : la seule souplesse alors est celle que le programmeur a bien voulu inclure dans les traitements commandés par ses programmes. Et c'est vrai que, dès lors, l'informatique a une tendance "naturelle" à standardiser, supprimer les nuances, raboter les cas extrêmes ...

Dans la solution proposée, en effet, à cause du choix de la structure REPETER ..., la question de savoir si la marmite est remplie est posée trop tard : quand le robot aura déjà fait tout ce qu'il faut pour y ajouter une pomme de terre en plus (et en trop !). Il faudrait donc commencer, avant tout travail, par faire évaluer cette condition. C'est possible, par exemple, si j'exprime la répétition grâce à la structure TANT QUE ...

TANT QUE la marmite n'est pas remplie

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

Cette fois et, à condition que nous arrivions à expliquer au robot (dans une annexe) "COMMENT FAIRE TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE", nous disposons d'une marche à suivre correcte.

Le problème global du remplissage de la marmite a maintenant disparu. Il a donné naissance à une question plus simple, puisqu'il reste seulement à expliquer comment peler une pomme de terre supplémentaire. On sent à nouveau que le seul paramètre gênant, à ce propos, c'est l'état du panier au moment où l'on va commander au robot de peler cette pomme de terre en plus. Il suffit donc de faire d'abord remplir le panier, si c'est nécessaire, et seulement après d'exiger de peler.

Cela conduit à :

COMMENT "FAIRE TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE" ?

panier vide

V ? F Remplis

Pèle

Nous avons donc, avec la marche à suivre principale et l'annexe ci-dessus, une solution au problème posé !

Nous soumettrons donc au robot l'ensemble : Comment "REMPLIR LA MARMITE"

TANT QUE la marmite n'est pas remplie

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

COMMENT "FAIRE TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE" ?

panier vide

V ? F Remplis

Pèle ou sous forme pseudo-code :

TANT QUE la marmite n'est pas remplie

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

COMMENT "FAIRE TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE" ?

SI panier vide ALORS Remplis Pèle

Comment "REMPLIR LA MARMITE" TANT QUE la marmite n'est pas remplie

FAIS TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE

et COMMENT "FAIRE TOUT CE QU'IL FAUT POUR METTRE UNE POMME DE TERRE EN PLUS DANS LA MARMITE" ?

SI panier vide ALORS Remplis Pèle

A chaque fois qu'au cours d'exécution de la marche à suivre principale, l'exécutant trouvera l'instruction trop complexe "FAIS TOUT CE QU'IL FAUT POUR ...", son "regard" va se détourner vers l'annexe explicative : il exécutera ce qui y est commandé, puis reviendra à la marche à suivre principale pour en poursuivre l'exécution.

Bien évidemment, je peux en quelque sorte intégrer les explications annexes dans le corps de la marche à suivre principale en proposant au robot :

TANT QUE la marmite n'est pas remplie

panier vide

V ? F Remplis

Pèle

Cette dernière proposition est peut-être plus "simple", mais elle a deux défauts importants : - Elle cache la démarche que nous avons menée et qui consistait à réduire petit à petit le

problème initial en passant à des problèmes plus simples. Il est sans doute préférable de choisir la présentation qui fait usage de l'appel de procédure. Ainsi, le lecteur; de la marche à suivre retrouvera facilement le cheminement de l'analyse menée et pourra la comprendre et la partager.

- Dans le cas où les tâches deviendront plus complexes, cette démarche d'affinements successifs et de simplifications par petits pas va s'avérer de plus en plus payante.

Elle s'incarnera, comme ci-dessus, dans la structure d'appel de procédure et nous essayerons de la rendre aussi visible que possible, dans un souci constant de faciliter la tâche de compréhension du lecteur.