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
TP 1
TP Initiation à la POO - Programmation orientée objet en Python
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 :
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
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
>>> 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 :
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
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)
# 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 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 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")
TP 5