Vous êtes sur la page 1sur 6

25/12/2022

TP Initiation à la POO
- Programmation orientée objet en Python

M.HAJJI
TP Initiation à la POO - Programmation orientée objet en Python

TP Initiation à la POO
- Programmation orientée objet en Python

Présentation
La programmation orientée objet n’est pas un langage procédural ou séquentiel comme, par exemple, le
Flowcode. C'est-à-dire qu’il n’est pas constitué d’une suite d’instructions qui s’exécutent en boucle étape par
étape.

Dans la programmation orientée objet, on ne cherche plus à traduire un algorithme mais de définir les
différentes entités, les objets, qui entrent en jeu dans la résolution d’un problème.

Par exemple, pour référencer des motos, on créera une classe moto.
La couleur : rouge, la cylindrée : 1000cm3, la catégorie : routière, etc. qui sont des caractéristiques, seront
appelées variables de classe.
Accélérer, freiner, klaxonner sont des fonctions qu’on appellera méthodes en programmation orientée objet.

Pour expliquer le principe de la programmation objet, on peut imaginer vouloir créer un objet moto qu’on
appellera maBecane et qui sera de classe moto :
maBecane = moto( )
maBecane existe maintenant quelque part dans une mémoire avec toutes les caractéristiques de la classe moto
définie précédemment. Pour changer ses caractéristiques, on pourra accéder à ses attributs de la manière
suivant :
maBecane.couleur = ‘rouge’
maBecane.cylindree = ‘750’
On pourra également faire appel à des méthodes préalablement définies :
maBecane.freiner(100) pour, par exemple, freiner à 100%.
maBecane.klaxonner( ) pour activer le klaxon, etc.
Les paramètres pourront être modifiés et les méthodes exécutées par l’utilisateur à partir d’un programme,
d’une application IHM, d’une console de type « invite de commandes » ou encore d’un script…
Pour cette initiation à la POO, nous utiliserons le langage Python pour sa simplicité et pour ses outils libres.
Mais il est possible de faire la même chose en C++. Exemple : lcd.clear(); // méthode clear de l’objet lcd

Exemple d’application N°1 : Borne de banque


Présentation
Dans cet exemple, le client peut faire ouvrir un compte courant à son nom. Ce compte sera un objet (ou
instance) de la classe compteBancaire avec ses attributs associés : nom, type, solde, etc.

À l’ouverture du compte, le solde par défaut est de 0,00€.


Le client a la possibilité de créditer son solde en effectuant un
dépôt. On utilisera pour cela la méthode depot( ).
Il peut consulter le montant de son solde. On utilisera pour cela
la méthode lireSolde( ).
Il a également la possibilité de débiter son solde en effectuant
un retrait. On utilisera pour cela la méthode retrait( ).
Afin de totaliser le nombre de comptes bancaires, à chaque
ouverture un compteur nbCompt de sera incrémenté.

TP 1
TP Initiation à la POO - Programmation orientée objet en Python

Diagramme de classe et Codage

Remarque : On pourra aussi créer un compte étudiant avec un solde à l’ouverture de 50€. La classe
compteEtudiant héritera des attributs et des méthodes de la classe compteBancaire.

Mise en œuvre
1. Utilisation des constructeurs __init__
 Dans le logiciel de développement EduPython, tapez le code ci-dessus et lancer son exécution

Nous allons créer trois objets qui seront des instances de la classe compteBancaire ou compteEtudiant :
L’objet compte1 qui matérialisera le compte bancaire de Antoine,
L’objet compte2 qui matérialisera le compte bancaire de Enzo,
L’objet compte1 qui matérialisera le compte étudiant de Diego.

 Dans la console en bas de l’écran , tapez les lignes suivantes qui feront appel au constructeur
__init__ de la classe compteBancaire :
>>> compte1 = compteBancaire("Antoine")
>>> compte2 = compteBancaire("Enzo")
>>> compte3 = compteEtudiant("Diego")
 Tapez la ligne suivante qui fera appel au constructeur __init__ de la classe compteEtudiant :

>>> compte3 = compteEtudiant("Diego")

Les trois objets existe maintenant en mémoire, on peut d’ailleurs les retrouver dans l’onglet variable
de la fenêtre de débogage de Edupython :

Onglet Variables
Nombre de
comptes ouverts
Nom du détenteur
du compte

Solde

Type de
compte
Retour à la
console

2
TP Initiation à la POO - Programmation orientée objet en Python

2. Utilisation des méthodes


Nous avons créé trois méthodes : lireSolde(), retrait() et depot()

 Dans la console en bas de l’écran , tapez les lignes suivantes et recopiez le résultat obtenu :
>>> compte1.lireSolde()
_________________________
>>> compte1.depot(100)
>>> compte1.lireSolde()
_________________________
>>> compte1.retrait(75)
>>> compte1.lireSolde()
_________________________

Remarque : pour éviter de retaper une ligne saisie précédemment, il est possible de la rappeler à l’aide des
touches clavier 

3. Accès direct aux variables


Il est possible d’accéder directement aux variables pour connaitre leur contenu ou pour le modifier.
 Par exemple, vous ne savez plus à qui appartient le compte1 ? Pour connaitre la réponse, saisissez la ligne
suivante :
>>> compte1.nom
_________________________
 Vous voulez connaitre le nombre de comptes créés ? Pour connaitre la réponse, saisissez la ligne suivante :

>>> compteBancaire.nbCompt
_________________________

Dans une « invite de commandes » ou dans un script, on utilisera la fonction standard suivante :
>>> print(compteBancaire.nbCompt)
_________________________
 Vous voulez directement faire passer le solde à une valeur (ex : 4500€) ? Pour cela, saisissez la ligne
suivante :
>>> compte1.solde=4500
>>> compte1.solde
_________________________

Dans une « invite de commandes » ou dans un script, on utilisera plutôt la méthode prévue à cet effet :
>>> compte1.lireSolde()
_________________________
 Vous voulez céder votre compte à votre professeur ? (C’est gentil ) Pour cela, saisissez la ligne suivante :

>>> compte1.nom='R KOLLY'


>>> compte1.nom
_________________________

4. Exercice
 Créez un compte à votre nom (bancaire ou étudiant). Effectuez un gros dépôt (faites-vous plaisir) avec la
méthode depot( ), effectuez un petit retrait. Consultez la variable solde. Cédez le compte à un camarade…

TP 3
TP Initiation à la POO - Programmation orientée objet en Python

Exemple d’application N°2 : Borne de banque améliorée


Présentation
Dans cet autre configuration, le client devra s’identifier avant d’effectuer un retrait ou de lire l’état de son
compte. Le banquier se charge d’ouvrir les comptes et d’imprimer les codes d’identification des clients. Il
dispose pour cela d’un code banque « 2222 ».

Nous avons ajouté la classe compteEpargne qui hérite de la classe compteBancaire et qui permet au client
d’obtenir un compte qui rapporte des intérêt mensuel (0,3% par défaut) que l’on peut estimer sur x mois (x
étant initialisé à 6 mois par défaut). Le programme correspondant est donné en page suivante.
Pour notre deuxième scénario, traduit par le
diagramme de séquence ci-contre, la cliente Manon
demande l’ouverture d’un compte épargne avec
100€. Elle dépose ensuite la somme de 650€.
Elle souhaite estimer ses intérêts sur 1 ans. Le
banquier devra imprimer son code client afin qu’elle
puisse effectuer un retrait de 200€
 Exécutez les séquences en langage Python
traduites par les instructions suivantes et recopiez
le résultat obtenu :
>>> ManonCompte=compteEpargne("Manon",100)
>>> ManonCompte.imprimerCode(2222)
___________________________________
___________________________________
>>> ManonCompte.depot(650)
___________________________________
___________________________________
>>> ManonCompte.capitalise(12)
___________________________________
>>> ManonCompte.retrait(200)
___________________________________
___________________________________
4
TP Initiation à la POO - Programmation orientée objet en Python

Programme
Lien vers le programme ici.
from random import randint

class compteBancaire:
"""Class compte bancaire courant"""
# variable partagée par tous les objets de cette classe et des classes héritées
type='Compte courant' # variables chaîne de carateres qui indique le type de compte : normal ou étudiant
nbCompt=0 # variable qui représente le nombre de comptes ouverts
solde=0.0 # variable qui contient le solde de l'objet compte bancaire normal ou étudiant
listeCodesClients=[0000] # liste des codes clients (uniques)

def __init__(self,nom): # constructeur d'objet de la classe compte bancaire


# attributs, uniques pour chaque objet soit chaque compte bancaire
self.nom=nom # variable d'instance
self.code = self.attribuerCode() # attribue un code unique au nouveau compte
compteBancaire.nbCompt+=1 # incrémente le nombre de compte (/!\ même si le compte existe déjà)

# Méthodes qui permettent de manipuler les objets de classe compte bancaire normal, étudiant ou épargne :

def attribuerCode(self):
codec=randint(1000,9999)
while(codec in compteBancaire.listeCodesClients): # tant que le code existe déjà dans la liste des codes clients
codec=randint(1000,9999) # alors on regénère un nouveau code
compteBancaire.listeCodesClients.append(codec) # ajoute le nouveau code client généré à la liste des codes clients
return codec

def imprimerCode(self, codeBanque):


if codeBanque == 2222: # le code de la banque est fixé arbitrairement à 2222
print("Le code secret de " + self.nom + " est :\n" + str(self.code)) # la fonction str() transforme le nombre entier code
en chaine de caractères
else:
print("Erreur de code banque") # le code banque 2222 a mal été tapé

def sIdentifier(self):
codeLu = int(input("Entrez votre code secret :\n"))
if self.code == codeLu :
id = True
else:
id = False
return id

def lireSolde(self):
iden = self.sIdentifier()
if iden == True:
print("Le solde du compte de " + self.nom + "est de :\n" + str(round(self.solde,2)) + " Euros") # pas besoin de str()
pour le nom qui est déjà une chaine de caractères

else:
print("Le code entré est erroné")

def retrait(self,montant):
iden = self.sIdentifier()
if iden == True:
self.solde -= montant
print("Retrait effectué, votre nouveau solde est de :\n"+ str(round(self.solde,2)) + " Euros")
else:
print("Le code entré est erroné")

def depot(self,montant):
iden = self.sIdentifier()
if iden == True:
self.solde+= montant
print("Dépot effectué, votre nouveau solde est de :\n"+ str(round(self.solde,2)) + " Euros")
else:
print("Le code entré est erroné")

class compteEtudiant(compteBancaire):
type='Compte etudiant' # variables de classe qui modifie la valeur des variable héritées de la classe compteBancaire
solde=50.0

class compteEpargne(compteBancaire):
def __init__(self,nom,solde): # constructeur d'objet de la classe compte épargne
# attributs, uniques pour chaque objet soit chaque compte épargne
self.nom=nom # variable d'instance
self.type='compte épargne' # variable d'instance
self.solde=solde # variable d'instance passée par paramètre
self.taux=0.3 # variable d'instance fixée à 0.3 par défaut
self.code = self.attribuerCode() # attribue un code unique au nouveau compte
compteBancaire.nbCompt+=1 # incrémente le nombre de compte (/!\ même si le compte existe déjà)

def changeTaux(self,taux): # Méthode pour modifier le taux


self.taux=taux # le taux prend la nouvelle valeur passée par paramètre

def capitalise(self,nombreMois=6): # Méthode pour etimer de capital après 6 mois (valeur par défaut)
self.nombreMois=nombreMois # le taux prend la nouvelle valeur passée par paramètre
for m in range(nombreMois):
self.solde=self.solde*(1+self.taux/100) # Calcul du capital estimé après nombreMois
print("Capitalisation sur " + str(self.nombreMois) + " mois au taux de "+ str(self.taux) + "% : " + str(round(self.solde,2)) +
" Euros")

Exemple d’application N°3 : Balles rebondissantes


Le dernier exemple crée des balles rebondissantes dans une fenêtre graphique à chaque click de souris.
Lien vers le programme ici.
M.HAJJI

TP 5

Vous aimerez peut-être aussi