Browse Source

draft chapitre 18 (classe 3)

master
Dimitri Merejkowsky 4 years ago
parent
commit
b0bb2f7e5a
No known key found for this signature in database GPG Key ID: 6BF3C7EA7C2D64EC
1 changed files with 84 additions and 0 deletions
  1. +84
    -0
      cours/source/18-classes-03/index.rst

+ 84
- 0
cours/source/18-classes-03/index.rst View File

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