You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
 

85 lines
1.8 KiB

  1. Chapitre 18 - Classes (3ème partie)
  2. ====================================
  3. Rappel - composition
  4. ---------------------
  5. Dans le chapitre 13 on a parlé de *composition* qui décrit une relation entre deux classes.
  6. Pour rappel::
  7. class Chat:
  8. def __init__(self, nom):
  9. self.nom = nom
  10. def ronronne(self):
  11. print(self.nom, 'fait: "prrrrr"')
  12. def caresse(self):
  13. self.ronronne()
  14. class Enfant:
  15. def __init__(self, prénom, chat):
  16. self.chat = chat
  17. def console(self):
  18. self.chat.caresse()
  19. Héritage
  20. --------
  21. L'héritage décrit une autre relation entre classes, appelée parfois un peu abusivement "partage de code".
  22. Petit détour
  23. ++++++++++++
  24. Commencons par une question - qu'est-ce qui ne va pas dans ce code ?::
  25. def faire_le_café():
  26. mettre_café_dans_tasse()
  27. allumer_bouilloire()
  28. attendre_que_ça_bouille()
  29. verser_dans_tasse()
  30. melanger()
  31. def faire_le_thé():
  32. mettre_thé_dans_tasse()
  33. allumer_bouilloire()
  34. attendre_que_ça_bouille()
  35. verser_dans_tasse()
  36. laisser_infuser()
  37. Le proble est la *duplication* du code. Les lignes de ``allumer_bouilloire()`` à ``verser_dans_tasse()`` sont
  38. identiques.
  39. Du coup:
  40. * Le code est plus long
  41. * Si jamais la procédure pour faire chauffer l'eau change, il faudra changer
  42. le code a deux endroits différents
  43. Une solution est possible est *d'extraire une fonction*::
  44. def faire_chauffer_l_eau():
  45. allumer_bouilloire()
  46. attendre_que_ça_bouille()
  47. def faire_le_café():
  48. mettre_café_dans_tasse()
  49. faire_chauffer_l_eau()
  50. verser_dans_tasse()
  51. melanger()
  52. def faire_le_thé():
  53. mettre_thé_dans_tasse()
  54. faire_chauffer_l_eau()
  55. verser_dans_tasse()
  56. laisser_infuser()