Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

C++ : ​La gestion des erreurs avec les exceptions

Déclencher une exception

Testez gratuitement nos 1344 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
À travers un projet concret utilisant une gestion d'erreur par valeurs de retour, identifiez où et comment doivent être déclenchées les exceptions.
06:26

Transcription

Pour apprendre à manipuler les exceptions, nous allons partir d’une application qui n'utilise pas les exceptions pour sa gestion d'erreurs, qui utilise les valeurs de retour. Et nous allons progressivement l'amener à utiliser des exceptions. Cette application affiche un formulaire qu'elle construit dans un premier temps avec Création du formulaire ici. Elle le construit en ajoutant différents types de champs, des ChampTexte, des ChampDate, des ChampFichier, en précisant le libellé. Voyez au passage qu'il n'y a pas d'accent mais c'est pour, sous Windows, avoir un affichage correct puisqu'en console les absences sortent mal. On a enlevé les accents volontairement des affichages. Les libellés donc et les contraintes qui sont spécifiques à la nature du sens. Si c'est un ChampTexte, il y a une taille minimum et une taille maximum allant de 1 à 20 caractères. Ici, la date va être le format de la date. Est-ce que le jour, le mois et l'année sont valides ? Et puis un ChampFichier, est-ce que le fichier existe ? Et ici, pour spécifier que le champ est obligatoire, true. Ensuite ce Formulaire est affiché, affiché à l'utilisateur pour qu'il soit rempli. D'où Remplissage du formulaire avec getline ici, pour récupérer l'utilisateur et ici, la saisie est fournie à remplir qui est la méthode de champ qui permet de remplir le champ. Et enfin, on demande au formulaire de se valider. Ce formulaire va passer en revue chaque champ et on va le voir dans le code de valider, demander à chaque champ s'il est valide et afficher le résultat. Justement ici, on a le code de Formulaire :: valider . Si on passe en revue chaque champ et si valider retourne faux pour un des champs, on retourne faux, sinon, on retourne vrai. C'est une conception qui est relativement intéressante ici puisqu'on a une classe de base avec une méthode virtuelle pure qui est validée et qui n'a pas de code puisque ce code est assuré par chaque classe dérivée, ChampTexte, ChampDate ou ChampFichier. Conception intéressante comme je le disais mais elle a un gros défaut. C'est le bool en retourné qui ne donne pas trop d'informations sur le problème de validation, qui ne nous permet pas d'informer l'utilisateur de son erreur de saisie ou de la nature de son erreur de saisie. Et puis, si on avait ce qui arrive souvent dans un programme complet, une classe champ qui est dérivée d'une autre qui est dérivée d'une autre pour faire un champ très complexe dans sa validation. Cet héritage successif risque d'avoir et de provoquer comme on l'a vu quand il y a une chaîne de responsabilité longue, une dilution de l'information sur l'erreur et donc une information erronée pour l'utilisateur afin qu'il rectifie sa saisie. Nous avons vu que la solution était l'exception. On va remplacer cette valeur de retour par un void puisqu'on n'a plus besoin de retourner quelque chose. On va utiliser des exceptions pour signaler le problème. On va donc faire ce remplacement dans toutes les classes dérivées de champs puisque maintenant ce sont les exceptions qui vont être levées. Alors lever une exception, on va voir comment le faire par exemple pour le ChampTexte ici. Si par exemple on a une taille minimale qui est supérieure à la saisie donc la saisie est trop petite et il va falloir signaler ce problème. Ou alors, si la saisie est trop grande, j'inverse le test ici. Si la saisie est plus grande, il faut lever une exception. Dans ces deux cas-là on fera ce qu'on appelle un throw, le mot clé qui permet de lever une exception en c++. Throw est le nom d'exception que l'on veut lever. Alors ici, je pourrais très bien faire throw exception ici. Le nom de l'exception qui est l'exception standard et celle de base mais ce n'est pas très spécifique. On va donc attendre d'avoir vu, dans les sections suivantes, l'exception qui correspond le mieux à ce problème pour pouvoir lever l'exception. Mais on sait déjà situer ou déclencher une exception et c'est cela le point important. On a commencé la migration de notre programme. Donc, throw d'une exception adéquate. Il faut bien sûr penser à repasser à void. Ici, valider pour que ce soit cohérent par rapport à déclaration. Et cette opération est à faire dans chaque classe dérivée de champs. Ce qui va nous intéresser ici aussi c'est d'adapter maintenant Formulaire :: valider. Lui ne peut plus tester le retour de valider puisqu'il n'y en a plus un valider, on ne retourne plus d'erreurs. Il faut maintenant qu'il capte ici AFFAIRE. Capter l'exception, s'il y en a une, s'il n'y en a pas, il n'a rien à faire. S'il capte une exception, il faut ajouter le problème à la liste. Liste d'erreurs et comme ça, on pourra afficher à l'utilisateur tous les problèmes sur son formulaire. On va créer un type liste d'erreurs qui sera un type interne à notre formulaire. On va retourner cette liste d'erreurs ici qui a un vecteur de chaîne. Donc je vais retourner sous forme d'un pointeur intelligent, je fais un typedef maintenant dans le .h. Voilà l'idée de notre code. Je vais dans formulaire, je vais créer ce nouveau type et je remplace mon bool très simple par quelque chose de bien plus complet puisque j'aurai la liste d'erreurs ici. Je résume, nous avons sorti le type de retour, levé des exceptions aux endroits où les problèmes survenaient, capté l'exception dans valider pour pouvoir avoir une liste d'erreurs complète. Et on n'a plus qu'à afficher correctement cette liste d'erreurs ici par un code qui récupère la liste d'erreurs ici. Si la taille est vide, le formulaire est valide puisqu’il n'y a pas d'erreurs. Sinon, si le formulaire n'est pas valide, on énumère les problèmes ici. Nous savons où placer les déclenchements d'exception, où les capter et il nous faut avoir des exceptions que l'on peut utiliser pour avoir quelque chose de spécifique ou personnalisé éventuellement et puis savoir les capter pour alimenter cette liste d'erreurs. C'est ce que nous allons voir par la suite.

C++ : ​La gestion des erreurs avec les exceptions

Profitez des nombreux atouts des exceptions pour gérer les erreurs dans vos développements C++. Apprenez à les déclencher, les intercepter, les personnaliser, etc.

56 min (13 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :20 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !