Aller au contenu principal

TP2 - Vérification des erreurs

Objectif

Découvrir des erreurs possibles en POO à ne pas répéter.

Au préalable
  1. Se créer un dossier Terminale NSI sur votre ordinateur ou clé USB
  2. Dans ce dossier, créer un dossier POO (Programmation Orientée Objet)

Sur EduPython ou autre instance python, faire :

  1. Créer un nouveau fichier en cliquant sur l'icône 📄, ou en appuyant sur CTRL+N
  2. Enregistrer le fichier sous le nom TP2_bugs en cliquant sur l'icône 💾, ou en appuyant sur CTRL+S
TP

La réécriture du code se fait sur python. Les explications aux questions se font soit sur papier, soit sous la forme de commentaire dans le programme.

La Programmation d'objets peut être sujette à la présence d'erreur lors de la conception des classes, ainsi que par l'utilisation des attributs et méthodes. Ce TP a pour but d'essayer de comprendre la présence de ces erreurs, pour ne pas avoir à les reproduire dans les activités et projet.

Exercice 1

On donne la classe suivante :

class test :
def __init__(self):
test = 0
  1. Peut-on se servir de la variable test du constructeur ? Pourquoi ?

On rajoute ceci dans le main :

t1 = test()
t2= test()
print("Test :",t1)
  1. A quoi correspondent t1 et t2 ?
  2. Qu'affiche le print ? Expliquer en quelques mots le résultat obtenu.
  3. La fonction isinstance(objet,class) permet de retourner un booléen vérifiant si objet est bien une instance de class. Rajouter une ligne affichant si t1 est une instance de test, et si t2 est une instance de list.
  4. Modifier la classe pour que chaque objet ait un attribut ayant pour valeur 0, et modifier le print pour afficher la valeur de l'attribut de t1.

Pour finir, on écrit ce code :

class test :

def __init__(self):
self.t = test()

t1 = test()

On obtient cette erreur : RecursionError: maximum recursion depth exceeded while calling a Python object

  1. Essayer de déterminer l'origine de cette erreur, puis expliquer en quelques mots pourquoi le constructeur crée une erreur.

Exercice 2

On donne la classe suivante :

class test2 :

def __init__(self,i):
self.i = 12
i = 15

def i():
print(self.i)
  1. Peut-il y avoir la présence de 2 variables i dans le constructeur ?
  2. Dans le main, créer un objet de classe test2, et appeler la méthode i() de cet objet. Que se passe-t-il ?
  3. Renommer la fonction en fonctionTest et modifier l'appel dans le main. Quelle erreur s'affiche ?
  4. Rajouter le paramètre manquant de la fonction et exécuter à nouveau le programme.