| @@ -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() | |||||