#!/usr/bin/python
# -*- coding: utf-8 -*-
###############################################################################
### Correction du TP 4 (Mon chef d'oeuvre) ###
### Par : Matthieu Aubry ###
###############################################################################
###############################################################################
### Ce qu'il faut retenir du TP ###
###############################################################################
# 1) Pour chaque attribut privé, on créé systématiquement un accesseur et un #
# mutateur. #
# 2) Si on ne veut pas que l'utilisateur de la classe puisse lire ou modifier #
# un attribut, on met l'accesseur / le mutateur en privé. #
# 3) Dans les méthodes de la classe, on utilise les accesseurs / mutateurs #
# pour lire / modifier les attributs #
# #
# Les deux premiers exercices sont faits, à vous de jouer pour le dernier. #
###############################################################################
###############################################################################
### La classe Domino ###
###############################################################################
class Domino:
""" Un domino """
# --- Constructeur / Destructeur ---
def __init__(self, faceA, faceB):
self.__faceA = faceA
self.__faceB = faceB
def __del__(self):
return
# --- Accesseur ---
# Tout le mode peut lire les valeurs du domino
# => les accesseurs sont publiques
def getFaceA(self):
return self.__faceA
def getFaceB(self):
return self.__faceB
# --- Mutateurs ---
# Je ne veux pas que mon joueur puisse modifier
# la valeur de ses dominos
# => mutateurs privés
def __setFaceA(self, value):
self.__faceA = value
def __setFaceB(self, value):
self.__faceB = value
# --- Méthodes publiques ---
# Dans toutes les méthodes, on récupère la valeur
# des attributs privés en utilisant les accesseurs
# et non pas le nom de l'attribut directement
def show(self, horizontal=False):
if horizontal:
print "+---+---+"
print "|",self.getFaceA(), "|", self.getFaceB(), "|"
print "+---+---+"
else:
print " +---+"
print " |",self.getFaceA(), "|"
print " +---+"
print " |",self.getFaceB(), "|"
print " +---+"
# getValeur() est une méthode et pas un accesseur
# car elle apporte une valeur ajoutée aux données
# présentes dans la classe
def getValeur(self):
return self.getFaceA() + self.getFaceB()
###############################################################################
### La classe CompteBancaire ###
###############################################################################
class CompteBancaire:
""" Un compte bancaire """
# --- Constructeur / Destructeur ---
def __init__(self, nom="Dupont", solde=1000):
self.__nom = nom
self.__solde = solde
# --- Accesseur ---
def getNom(self):
return self.__nom
def getSolde(self):
return self.__solde
# --- Mutateurs ---
def __setNom(self, value):
self.__nom = value
def __setSolde(self, value):
self.__solde = value
# --- Méthodes publiques ---
def depot(self, montant):
print "Dépot de", montant, "euro(s) sur le compte de", self.getNom()
self.__setSolde(self.getSolde() + montant)
def retrait(self, montant):
print "Retrait de", montant, "euro(s) sur le compte de", self.getNom()
self.__setSolde(self.getSolde() - montant)
if self.getSolde() < 0:
print "Attention", self.getNom(), "est à découvert"
def affiche(self):
print self.getNom(), "dispose de", self.getSolde(), "euro(s) sur son compte"
###############################################################################
### Pour tester les classes ###
###############################################################################
if __name__ == "__main__":
# Les dominos
dominos = []
for i in range(7):
for j in range(7):
dominos.append(Domino(i,j))
somme = 0
for d in dominos:
somme += d.getValeur()
if d.getFaceA() == d.getFaceB():
d.show(True)
else:
d.show()
print "La somme des points de tous les dominos est :", somme
print "------------------------------------------------------------------"
# Le compte bancaire
compte = CompteBancaire("Toto", 1000000) # Il est riche ce toto
# ... normal il touche 1 euro à chaque fois que je mets dans un programme
# D'ailleurs je viens encore de le mettre
compte.depot(1)
# Combien a-t'il maintenant ?
compte.affiche()
# Toto retire des sous pour s'acheter un jet privé
compte.retrait(1500000)
syntax highlighted by Code2HTML, v. 0.9.1