Programmation Objet - Cours
Programmation Objet - Cours
Programmation Objet - Cours
Informatique
Cours
Page 1 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
Page 2 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
La programmation orientée objet (POO) est une méthode de programmation très puissante et je tiens
à préciser que je n’entrerai pas dans des détails complexes et dans toutes les possibilités qui nous sont
offertes, et que je ne connais pas. C’est pourquoi je tiens à préciser que c’est une « initiation » à a
programmation objet. Nous allons plus nous focaliser sur la forme que sur le fond dans sa mise en
œuvre.
1.I.2 Définitions
1.I.2.a Objet
Un objet, c’est un truc ! Un code informatique, qui réalise quelque chose ! N’importe quoi.
Pour créer des objets, on utilise les classes. La classe est un outil qui permet de créer des objets.
class Compte():
a = 0
Page 3 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
1.I.2.b Attribut
Un objet peut posséder des attributs. On pourrait dire que chaque objet pourra posséder des variables
qui lui sont associées. Nous allons voir dans le prochain paragraphe ce qu’est une méthode, en
particulier la méthode appelée __init__. On peut juste dire ici que lorsque l’on va créer une instance
de Compte (un objet, ou un compte), la fonction __init_ sera toujours exécutée immédiatement. C’est
donc dans cette fonction de l’on va créer les attributs de chaque objet.
class Compte():
def __init__(self,Nom="Absent",Solde=0.0):
self.nom = Nom
self.solde = Solde
Sans rentrer dans les détails pour le moment, le self permet d’attribuer les valeurs des attributs à
l’objet en question. Nous en parlerons au prochain paragraphe.
On peut alors créer le compte de Denis avec un solde à 100€ et un compte à solde nul au nom de
Nicolas ainsi :
Vous remarquerez que l’on ne tient pas compte de l’argument « self » lors de l’appelle de la classe
Compte, qui appelle elle-même la méthode __init__.
Il est nécessaire de créer/modifier les attributs dans les méthodes, et pas uniquement dans la méthode
__init__.
Page 4 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
1.I.2.c Méthode
Un objet possède des méthodes. Ce sont des fonctions comme vous savez les créer, qui vont pourvoir
réaliser tout ce que vous souhaitez.
class Compte():
def __init__(self,Nom="Absent",Solde=0):
self.nom = Nom
self.solde = Solde
def depot(self,Montant):
self.solde += Montant
print("Nouveau solde: ",self.solde)
Il existe dans cette classe qui crée les objets Compte, deux méthodes : __init__ et depot
La première est entourée de « dunder », pour « double underscore ». Les méthodes dunder (magic
methods) sont des méthodes prédéfinies (leurs noms sont imposés) et ont des fonctions particulières
dans les classes. Ainsi, __init_ est une méthode qui est exécutée immédiatement à chaque appel de la
classe Compte.
On voit ensuite 3 méthodes qui sont des fonctions classiques que vous savez réaliser.
Je crée le compte de Denis avec un solde initial de 100€. J’effectue un versement de 100€.
- A l’appel de Compte, la fonction __init__ est appelée. Pour qu’init puisse affecter des valeurs
à l’objet créé c1, il faudrait normalement comme vous en avez l’habitude écrire
__init__(c1, « Denis »,100).
- A l’appel de depot, il faudrait de même écrire depot(c1,100)
Le « self » sert à ça ! self sera en réalité l’objet concerné, d’où le nom self en anglais…
Et c’est pour cela que lors de l’appel de méthodes (volontairement ou non (__init__)), il n’y a pas
d’argument à préciser pour self puisque la classe le place d’elle-même. Et il faudra bien évidemment
penser à mettre self en argument de toutes les classes qui agissent sur l’objet concerné.
Page 5 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
Pour obtenir toutes les méthodes prédéfinies dans python, on peut utiliser « dir ». Par exemple :
- « dir(list) » donnera toutes les méthodes utilisables sur les objets de type list
- « dir(math) » permettra d'obtenir la liste de toutes méthodes présentes dans le module math
(après l'avoir importé)
On peut observer :
Page 6 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
1.I.3 Exemples
class Compte():
def __init__(self,Nom="Absent",Solde=0):
self.nom = Nom
self.solde = Solde
def depot(self,Montant):
self.solde += Montant
print("Nouveau solde: ",self.solde)
def retrait(self,Montant):
self.solde -= Montant
print("Nouveau solde: ",self.solde)
def affiche(self):
print(self.nom,": ",self.solde)
Page 7 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
class int():
def __init__(self,Val):
self.val = Val
def __repr__(self):
return str(self.val)
def __add__(self,other):
return self.val + other.val + 1
On écrase la classe « int » de python ☺ et on la remplace par une autre ! Remarquez que j’ai utilisé des
méthodes magiques :
- __repr__ permet d’afficher la valeur de l’objet quand on l’entre et qu’on tape « Enter ».
Remarque : Vous avez probablement vu en première année cette possibilité offerte par
"{}".format de préciser dans une chaine de caractères aux bons endroits :
- __add__ permet de définir ce que doit faire l’opérateur « + » entre les objets « self » et
« other », add pour adition ! Vous verrez alors la supercherie ☺
Page 8 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
class Carte():
def __init__(self, f, c):
self.figure = f
self.couleur = c
def affiche (self):
s = self.figure + " de " + self.couleur
print(s)
def __repr__(self):
return str(self.figure) + " de " + str(self.couleur)
def taille(self):
return len(self.cartes)
jeu = JeuDeCartes()
jeu.battre()
c = jeu.tirer()
c.affiche()
Page 9 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
Voici une version non orientée objet qui réalise la même chose :
def JeuDeCartes():
Liste_cartes = []
couleur = ["Pique","Coeur","Carreau","Trèfle"]
valeur =
["1","2","3","4","5","6","7","8","9","10","Valet","Dame","Roi"]
for coul in couleur:
for val in valeur:
Liste_cartes.append([val,coul])
return Liste_cartes
def Taille(Jeu):
return len(Jeu)
def Battre(Jeu):
shuffle(Jeu)
def Tirer(Jeu):
if len(Jeu) == 0 :
print("Plus aucune carte")
return ["Fini","chez fini"]
else:
t = randint (0, len(Jeu)-1)
carte = Jeu.pop(t)
return carte
Jeu = JeuDeCartes()
Battre(Jeu)
c = Tirer(Jeu)
print(c)
Page 10 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
1.I.3.d Particules
from random import randint as rand from random import randint as rand
Page 11 sur 12
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet Cours
1.I.4 Conclusions
Il existe bien des avantages à la POO qui ne sont pas mis en évidence dans cette initiation.
- La gestion des paramètres associées à chaque objet est aisée. Là où par exemple, une particule
serait associée à une liste [X,Y,V,m,R,C] et où le rayon serait Part[4], l’ajout d’un
paramètre avant R nécessiterait la modification de tout le code. En POO, il est aisé d’ajouter
un nouveau paramètre dans init et de l’appeler par son nom Part.Var
- Les paramètres et fonctions méthodes sont regroupées au même endroit pour un type d’objet,
alors qu’habituellement, les fonctions des codes classiques sont éparpillées dans tout le code
et les paramètres sont dans des tableaux, plus ou moins bien organisées… Il est aisé d’ajouter
des paramètres/méthodes à chaque type d’objet au bon endroit, c’est très clair
- Les méthodes sont adaptées au type d’objet. Ainsi, on pourrait créer des classes triangle, carré,
cercle, mettre des objets de ces 3 types dans une liste puis créer une boucle for appelant pour
chaque objet sa méthode objet.affiche() qui serait adaptée à chacun…
Page 12 sur 12