Fiche à trous · Première · NSI
Python — Programmation orientée objet et récursivité
Complétez de mémoire, puis vérifiez avec la page de corrigé.
Affectez une liste à une nouvelle variable, modifiez la seconde, et regardez la première : elle a changé aussi. Ce n'est pas un piège du langage, c'est ce que fait une affectation — elle donne un second nom au même objet. Beaucoup de bugs incompréhensibles tiennent à cette seule phrase.
Variables, noms et objets
Règle
2Piège
Croire qu'affecter une liste à une nouvelle variable en crée une copie indépendante.
Objet modifiable : se demander si l'on veut un alias ou une copie.
La programmation orientée objet
Définition — Classe et instance :
Définition — Encapsulation :
Définition — Héritage :
La récursivité
Règle
7Exemple
Écrire la factorielle de façon récursive et vérifier sa terminaison.
- 8.
- 9.
- 10.
Résultat :
Chaque appel non terminé occupe une place dans la pile d'appels, ce qui limite la profondeur possible. Une récursivité naïve sur la suite de Fibonacci recalcule en outre les mêmes valeurs un nombre considérable de fois : elle est correcte et inutilisable au-delà de quelques dizaines de termes. Correction et efficacité sont deux propriétés distinctes.
Exceptions et modules
Propriété
Un module est un fichier de code réutilisable qu'on importe. La bibliothèque standard en fournit pour les mathématiques, l'accès au système de fichiers, la lecture de fichiers tabulaires, les dates. Importer un module existant plutôt que réécrire une fonction n'est pas de la paresse : le code importé est testé par bien plus d'utilisateurs que le vôtre ne le sera.
Écrire une fonction récursive qui se termine
- 13.
- 14.
- 15.
- 16.
- 17.
- Ai-je distingué un alias d'une copie pour mes objets modifiables ?
- Ma fonction modifie-t-elle une liste reçue en argument ? Est-ce voulu ?
- Ma classe distingue-t-elle attributs et méthodes ?
- Mon héritage passe-t-il le test « est un » ?
- Ma fonction récursive a-t-elle un cas de base atteint à coup sûr ?
- Mes exceptions rattrapées sont-elles précises et effectivement traitées ?