Review an old article about building a simple program with my oldest son

This commit is contained in:
Fred Pauchet 2024-02-26 20:12:07 +01:00
parent cca1118132
commit a19c0d2514
3 changed files with 87 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@ -0,0 +1,87 @@
---
title: Quelques classes pour expliquer la programmation à un enfant de 9 ans
---
L'autre soir, passé 21h, mon fils (sensé dormir) débarque dans mon bureau et me demande à quoi servent toutes ces couleurs sur mon écran.
J'avais une instance de VSCode ouverte sur du code Python, avec un truc à finir pour le boulot.
Ni une, ni deux (ni trois, d'ailleurs) : je saute sur l'occasion pour lui expliquer quelques rudiments de programmation.
Comme il adôôôôre les transports, je lui demande comment il modéliserait un véhicule.
Réponse : "C'est quelque choseq qui roule et qui peut transporter des gens".
Nous définissons donc une classe de `Transport`, qui a des roues et qui peut transporter un certain nombre de personnes :
```python
class Vehicule:
def __init__(nombre_de_personnes_transportees, nombre_de_roues=4):
nombre_de_personnes_transportees = nombre_de_personnes_transportees
nombre_de_roues = nombre_de_roues
```
Je lui demande ensuite si tous les véhicules transportent des gens.
"Pas obligatoirement".
Nous ajoutons une méthode qui indique si le nombre de personnes transportées est supérieure à 0 :
```python
Vrai = True
Faux = False
class Vehicule:
[...]
def transporte_des_gens():
if nombre_de_personnes_transportees > 0:
return Vrai
else:
return Faux
```
J'en profite pour lui ajouter un petit sucre syntaxique, pour qu'il n'ait pas à (trop) gérer des mots anglais, même si tout n'est pas rose et qu'il reste des `if`, `else` ou `return`, sans parler des mots-clés comme `def` ou `class`.
J'ai volontairement laissé tomber le mot-clé `self`, même si ce n'est pas ce retrait qui change fondamentalement la compréhension du code ci-dessus (sauf qu'il ne fonctionne plus 😉).
"Peut-être que certains véhicules peuvent voler ?".
"Ah oui !".
On ajoute un booléen qui indique si le véhicule peut voler ou non.
```python
class Vehicule:
def __init__(nombre_de_personnes_transportees, nombre_de_roues=4, peut_voler=False):
peut_voler = peut_voler
[...]
```
Finalement, je lui demande s'il peut me citer plusieurs de ces véhicules.
J'ai droit à des avions, des bus et des trams.
Nous mettons en place une simili-forme d'héritage :
```python
class Avion(Transport):
...
class Bus(Transport):
...
class Tram(Transport):
...
```
Et finalement, je lui demande de me donner quelques modèles de chaque, avec leur capacité.
Il me donne des [Mercedes Citaro](https://duckduckgo.com/?q=mercedes+citaro&t=newext&atb=v398-1&iax=images&ia=images), un [Iveco Urban Way](https://duckduckgo.com/?q=iveco+urban+way&t=newext&atb=v398-1&iar=images&iax=images&ia=images), un [Airbus A380](https://duckduckgo.com/?q=airbus+A380&t=newext&atb=v398-1&iar=images&iax=images&ia=images), et deux [T3000 et T4000](https://duckduckgo.com/?q=tram+T3000+T4000&t=newext&atb=v398-1&iar=images&iax=images&ia=images) :
```python
petit_citaro = Bus(nombre_de_personnes_transportees=65, nombre_de_roues=4)
grand_citaro = Bus(nombre_de_personnes_transportees=65, nombre_de_roues=6)
urban_way = Bus(nombre_de_personnes_transportees=101, nombre_de_roues=6)
a380 = Avion(nombre_de_personnes_transportees=1100, nombre_de_roues=24)
t3000 = Tram(nombre_de_personnes_transportees=165, nombre_de_roues=32)
t4000 = Tram(nombre_de_personnes_transportees=225, nombre_de_roues=64)
```
Je pense qu'il était assez content de pouvoir manipuler des "choses" entre un clavier et un résultat qui apparaissait à l'écran.
Je pense aussi qu'il était content de rester éveillé un peu plus tard 😉.