Coder et développer

Tags :
  • cours
  • code
  • python
Auteur :
  • 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 :

  1. créer un nouvel interpréteur python pour chaque exécution du programme.
  2. é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 :

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 :