From b0bb2f7e5a832b45d0f4b6f764fdf9654bca7dc4 Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Mon, 2 Mar 2020 15:02:01 +0100 Subject: [PATCH] draft chapitre 18 (classe 3) --- cours/source/18-classes-03/index.rst | 84 ++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 cours/source/18-classes-03/index.rst diff --git a/cours/source/18-classes-03/index.rst b/cours/source/18-classes-03/index.rst new file mode 100644 index 0000000..2ba862f --- /dev/null +++ b/cours/source/18-classes-03/index.rst @@ -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()