Coder et développer
- cours
- code
- python
- François Brucker
Ce cours est dédié au code informatique. On utilisera le language python comme support car c'est un langage très utilisé et qui permet de mettre en lumière tous les aspects du développement d'un code informatique. La très grande majorité des concepts que l'on verra seront cependant transposables dans d'autres langages (comme le javascript ou encore ruby par exemple).
On supposera que vous avez des connaissances scientifiques de base (ie. mathématiques de Lycée) et que vous disposer d'un ordinateur dont vous êtes administrateur.
Aucune compétences en informatique préalable n'est nécessaire.
Bases
Une fois les bases acquises, terminez cette partie en faisant le tutoriel de python qui reprend tout ce que nous avons vu de façon plus détaillée :
S'équiper pour le développement
Avant de pouvoir écrire des programmes conséquents il faut comprendre comment est organisé votre ordinateur et pouvoir minimalement interagir avec son système d'exploitation.
Connaissances système minimales
Préparer son ordinateur pour le développement
Développer
Le débogueur, qui permet d'exécuter ligne à ligne du code python est non seulement un excellent outil pour corriger son code, mais également un très bon outil d'apprentissage puisqu'il vous permettra d'assimiler plus rapidement ces notions de variables, d'objets et d'espaces de noms :
TBD exercices :
- plein de fonctions différentes à créer (voir partie algorithmie ?). Utilisation de listes, suppression de doublon, recursion (flocon de Koch ?) etc
- faire de petits programmes
Stockage des données
En mémoire
Chaîne de caractères
TBD exercice méthodes de chaines de caractères :
- split
- caractères spéciaux : tabulation, fin de ligne
- strip
- supprimer les accents. transformation et ascii.
Sur des fichiers
Archétype de programmation
Programmation objet
La programmation objet est un principe de programmation utilisé par la quasi-totalité des langages de programmation. Nes nuances existent bien sur, la programmation objet en rust n'est pas la même qu'en java par exemple, mais quelques principes fondateurs sont utilisés partout.
Nous allons dans cette partie du cours nous atteler à montrer ces principes et leur utilité dans le cadre du langage python.
Programmation évènementielle
La programmation évènementielle est un principe de développement très utilisé dans le développement de GUI. Le principe est de coder des réactions qui seront exécutées lorsqu'un utilisateur effectuera une action spécifique (générant un évènement) comme cliquer sur quelque chose, appuyer sur une touche, etc.
Maintenir et développer du code sûr
Gestion des dépendances
Lorsque l'on veut utiliser l'interpréteur python exécuter un programme informatique que l'on aura développé, il faut s'assurer que chaque exécution du programme soit identique. Pour éviter les effets de bords (anciennes variables déclarées, modules importées, etc) Il est indispensable de pouvoir :
- créer un nouvel interpréteur python pour chaque exécution du programme.
- écrire notre programme en-dehors de tout interpréteur
Dépendances de l'interpréteurs
Les dossiers où python va cherchez les modules sont listés dans la variable sys.path
et dépendent de l'interpréteur utilisé :
Il faut installer les modules en utilisant python -m pip
et non directement le programme pip
, car l'interpréteur pour lequel sera installé le module est ainsi explicite.
vous pouvez le voir en exécutant le code :
import sys
for dossier in sys.path:
print(dossier)
Chez moi, sur un mac où python est installé avec brew ce programme rend :
/opt/homebrew/Cellar/python@3.11/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python311.zip
/opt/homebrew/Cellar/python@3.11/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11
/opt/homebrew/Cellar/python@3.11/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload
/Users/fbrucker/Library/Python/3.11/lib/python/site-packages
/opt/homebrew/lib/python3.11/site-packages
/opt/homebrew/lib/python3.11/site-packages/gpg-1.22.0-py3.11-macosx-13-arm64.egg
/opt/homebrew/opt/python-tk@3.11/libexec
Il y a plusieurs dossiers :
/opt/homebrew/Cellar/python@3.11/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11
contient les packages de bibliothèque standard (il contient par exemple un fichier "random.py" qui contient le code du packagerandom
)/opt/homebrew/Cellar/python@3.11/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload
contient les packages python qui ne sont pas écrit en python mais en C/opt/homebrew/lib/python3.11/site-packages
qui contient les packages qui seront installés par pip.
La gestion des packages peut être compliquée. Normalement, si vous vous y prenez comme indiqué ici et en utilisant votre ordinateur personnel, tout devrait bien se passer. Si cela commence à ne plus aller, vous pouvez essayer d'installer les packages à un autre en endroit en suivant ce tuto, ou, comme on le fera plus tard en utilisant un environnement virtuel. Mais, dans le doute, consultez un prof qui s'y connaît.
Un interpréteur par projet
Programmation par les tests
On a pris l'habitude d'écrire des tests pour se rassurer quant à l'exactitude de nos fonctions. Mais pourquoi pas ne pas écrire les tests avant ? C'est le parti pris osé (mais très efficace) de la programmation par les tests (Test Driven Development, ou TDD) que l'on vous propose d'essayer dans le projet ci-après.
Couverture de code
La couverture de code est un outils essentiel lorsque l'on programme par les tests et plus généralement lorsque l'on code tout court. Cet outil permet de vérifier les lignes de codes qui sont testées (ie. couvertes).
Packages
Lorsqu'un module devient important, il devient compliqué de mettre tout son code dans un seul fichier. On a alors coutume de rassembler tout le code du module dans un dossier que python appelle package. Ces packages pourront ensuite être réutilisés dans d'autres projets, voir être directement placés sur https://pypi.org/ pour être utilisés par d'autres.
Comme l'import d'un module revient à exécuter un fichier et qu'importer un package revient à importer un dossier, python exécute le fichier __init__.py
présent dans le dossier.
Un package est un dossier contenant un fichier __init__.py
.
-
importer le dossier revient à exécuter le fichier
__init__.py
. -
exécuter le dossier avec l'interpréteur revient à exécuter le fichier
__main__.py
.
Enfin, on peut faire en sorte que nos modules/packages soient exécutables directement avec un interpréteur :