|
@@ -0,0 +1,84 @@ |
|
|
|
|
|
Chapitre 18 - Classes (3ème partie) |
|
|
|
|
|
==================================== |
|
|
|
|
|
|
|
|
|
|
|
Rappel - composition |
|
|
|
|
|
--------------------- |
|
|
|
|
|
|
|
|
|
|
|
Dans le chapitre 13 on a parlé de *composition* qui décrit une relation entre deux classes. |
|
|
|
|
|
|
|
|
|
|
|
Pour rappel:: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Chat: |
|
|
|
|
|
def __init__(self, nom): |
|
|
|
|
|
self.nom = nom |
|
|
|
|
|
|
|
|
|
|
|
def ronronne(self): |
|
|
|
|
|
print(self.nom, 'fait: "prrrrr"') |
|
|
|
|
|
|
|
|
|
|
|
def caresse(self): |
|
|
|
|
|
self.ronronne() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Enfant: |
|
|
|
|
|
def __init__(self, prénom, chat): |
|
|
|
|
|
self.chat = chat |
|
|
|
|
|
|
|
|
|
|
|
def console(self): |
|
|
|
|
|
self.chat.caresse() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Héritage |
|
|
|
|
|
-------- |
|
|
|
|
|
|
|
|
|
|
|
L'héritage décrit une autre relation entre classes, appelée parfois un peu abusivement "partage de code". |
|
|
|
|
|
|
|
|
|
|
|
Petit détour |
|
|
|
|
|
++++++++++++ |
|
|
|
|
|
|
|
|
|
|
|
Commencons par une question - qu'est-ce qui ne va pas dans ce code ?:: |
|
|
|
|
|
|
|
|
|
|
|
def faire_le_café(): |
|
|
|
|
|
mettre_café_dans_tasse() |
|
|
|
|
|
allumer_bouilloire() |
|
|
|
|
|
attendre_que_ça_bouille() |
|
|
|
|
|
verser_dans_tasse() |
|
|
|
|
|
melanger() |
|
|
|
|
|
|
|
|
|
|
|
def faire_le_thé(): |
|
|
|
|
|
mettre_thé_dans_tasse() |
|
|
|
|
|
allumer_bouilloire() |
|
|
|
|
|
attendre_que_ça_bouille() |
|
|
|
|
|
verser_dans_tasse() |
|
|
|
|
|
laisser_infuser() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Le proble est la *duplication* du code. Les lignes de ``allumer_bouilloire()`` à ``verser_dans_tasse()`` sont |
|
|
|
|
|
identiques. |
|
|
|
|
|
|
|
|
|
|
|
Du coup: |
|
|
|
|
|
|
|
|
|
|
|
* Le code est plus long |
|
|
|
|
|
* Si jamais la procédure pour faire chauffer l'eau change, il faudra changer |
|
|
|
|
|
le code a deux endroits différents |
|
|
|
|
|
|
|
|
|
|
|
Une solution est possible est *d'extraire une fonction*:: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def faire_chauffer_l_eau(): |
|
|
|
|
|
allumer_bouilloire() |
|
|
|
|
|
attendre_que_ça_bouille() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def faire_le_café(): |
|
|
|
|
|
mettre_café_dans_tasse() |
|
|
|
|
|
faire_chauffer_l_eau() |
|
|
|
|
|
verser_dans_tasse() |
|
|
|
|
|
melanger() |
|
|
|
|
|
|
|
|
|
|
|
def faire_le_thé(): |
|
|
|
|
|
mettre_thé_dans_tasse() |
|
|
|
|
|
faire_chauffer_l_eau() |
|
|
|
|
|
verser_dans_tasse() |
|
|
|
|
|
laisser_infuser() |