La programmation orientée objet est un paradigme de programmation extrèmement courant actuellement (seul le C n'est pas orienté objet dans les 10 langages les plus utilisés). Le simula 67 en 1967 est parfois considéré comme le premier langage orienté objet. Pour annecdote Le C++ (= C augmenté) rajoute la programmation objet au C (il fait beaucoup plus depuis).
En programmation orientée objet on identifie les éléments et concepts qui vont constituer notre programme (par exemple pour le pong : la balle, les palets,...) puis on décrit les propriétés et interactions qui les caractérisent (la balle va se déplacer, la balle va rebondir sur les palets, la balle doit être représentée à l'écran,...).
Puis on passe au codage, pour chaque élément trouvé précédemment on crée une classe avec des attributs (variables) et des méthodes (fonctions) associées qui va le représenté dans la machine. Vous pouvez voir ses classes sont des types personnalisés utilisables dans le corps de votre programme.
L'an passé, il était recommandé de décomposer le programme en plein de petites fonctions, cela permettait une meilleure maintenabilité, un premier avantage de la programmation objet et de de grouper les fonctions.
Cependant vos fonctions étaient dépendantes du choix des variables faites pour modéliser le problème, si vous changez cette modélisation il fallait corriger toutes les fonctions dépendantes (c'est un long travail surtout si on utilise des variables globales et il faut comprendre l'ensemble du code), en programmation objet un changement de modélisation entraînera des modifications dans une partie précise du programme (là où est définie la classe). Le corps du programme lui ne sera pas modifié.
Par exemple si vous voulez faire rebondir une balle dans un pong, il suffit dans le programme principal de demander le rebond, l'implémentation de l'algorithme se fera dans la classe qui correspond à la balle, on peut très bien d'ailleurs confier cette partie du travail à une personne et laisser dans l'ignorance les programmeurs du corps principal du programme.
L'an dernier nous avons vu que les problématiques du réseau était séparé en couche, le programmeur n'a pas besoin de savoir le fonctionnement de la couche physique, en programmation objet c'est pareil, un programmeur utilisera des objets sans savoir comment ils sont fait.
Dans le programme une variable issue d'une classe est appelée instance de la classe.
Présentation du problème.
Utiliser et manipuler des dates est une chose courante en informatique (comme dans la vraie vie), de base Python possède le module datetime qui s'en occupe, nous allons en faire une version simplifiée.
Que souhaitons nous pouvoir faire avec des dates ?
La définir
Connaître le numéro jour du mois associé (le 1 le 2...).
Connaître le mois associée.
Connaître l'année associée.
Connaître le jour de la semaine associée (lundi, mardi,...).
L'afficher.
Augmenter la date de n jours.
Comparer deux dates.
Quand on réfléchit à une classe on peut faire un petit shéma :
Les différentes parties seront expliquées plus tard. Pour exemple, on va commencer par définir une classe année, puis vous ferez la classe date.
Classe année.
Avant de commencer voici quatre petites fonctions pratique pour la suite.
Définition classe.
Quand on définit une classe en utilise mot réservé class puis on donne le nom de la classe, par convention on utilise une majuscule pour commencer le nom de la classe.
Constructeur
Le constructeur est la méthode la plus importante, elle est obligtoire. Elle se fait en appelle de la méthode __init__.
Pour utiliser la classe il faut créer une instance cela se fait de la manière suivante :
D'autres méthodes
Les méthodes doivent être dans la classe, attention à la tabulation.
Surcharger les opérateurs
Python permet de donner, pour une classe créée, un sens aux opérateurs de bases, vous pouvez trouver la liste des opérateurs ici. Dans la partie ci-dessous nous allons donner un sens à l'égalité, à inférieur, et à la transformtion en string.
Création d'une classe date.
Pour c'est exemple, on fait le choix de représenter une date à l'aide de trois entiers jour, mois, année.