Champagne !
Paradigmes de programmation
Il existe plusieurs manière de concevoir un programme; on parle de paradigmes de programmation.
Jusqu'ici, vous avez utilisé ( a priori ) uniquement la programmation impérative; dans ce type de programmation, le code est constitué de données stockées dans des variables de différents types ( entiers, tableaux,...), et sont manipulées par des fonctions.
Mais il existe bien d'autres paradigmes, et vous en verrez deux autres cette année :
- la programmation fonctionnelle, que vous aborderez en fin d'année, et qui est le paradigme utilisé par le langage utilisé ( OCaml ) pour l'informatique en CPGE.
- et surtout la programmation orientée objet ( POO ), que vous allez découvrir ici et réutiliser de manière très fréquente tout au long de l'année.
Chaque langage ne permet pas forcément tous les paradigmes de programmation : le langage C par exemple ne permet pas la POO, le langage Haskell est uniquement fonctionnel, etc...
Avec Python, tous les paradigmes de programmation sont possibles, impératif, objet, fonctionnel,....c'est une chance !
L'utilisation de tel ou tel paradigme de programmation dépend du but visé et des contraintes du programme à écrire : par exemple, le paradigme fonctionnel est utilisé dans les domaines où l'on cherche un code robuste dans lequel les données ne sont pas susceptibles d'être modifiées accidentellement, comme par exemple dans le domaine spatial; la POO permet d'écrire un code clair et facilement maintenable, etc...Chaque paradigme a ses avantages et ses inconvénients.
En introduction au concept de POO, nous allons tout de suite voir un exemple de problème dans lequel ce paradigme montre ses avantages.
Une "bulle" qui monte...
Vous allez coder en Python une petite animation qui, dans un premier temps, fera "monter" une "bulle" dans une fenêtre.
Les scripts de ce chapitre utilisent le module Pyxel ( du moins, une version "light"...)
C'est le module que vous utiliserez pour créer des jeux lorsque vous participerez à la Nuit du c0de au mois de mai 😊.
Pour pouvoir utiliser ce module dans les éditeurs de ce chapitre, penser auparavant à installer le module poorpyxel à l'aide du
bouton
.
Attention, ce module est disponible uniquement dans les éditeurs en ligne, mais n'est pas installé pas sur vos machines.
Pour commencer, nous allons considérer l'ébauche de code ci-dessous qui vous permettra de démarrer :
import poorpyxel as ppx
from random import randint
ppx.init(150, 150)
def update():
global x, y, couleur, taille, vitesse
# Déplacement de la bulle vers le haut en tenant compte de sa vitesse;
# Quand la bulle arrive en haut de la fenêtre, on réinitialise ses caractéristiques.
pass
def draw():
# 1. Effacement global de la fenêtre :
ppx.cls(0)
# 2. Dessin de la bulle dans la fenêtre :
ppx.circ(x, y, rayon, couleur)
# initialisation des caractéristiques de la bulle
x = randint(10, 140)
y = ppx.height
couleur = randint(1, 15)
rayon = randint(2 ,5)
vitesse = randint(2, 10)
ppx.run(update, draw)
Quelques commentaires sur ce code :
- Le module est importé avec un alias
ppx. - l'instruction à la ligne 5 définit la fenêtre d'affichage et sa taille en "pixels".
- la fonction
updatesert, comme son nom l'indique, à modifier les variables utilisées dans l'animation; c'est dans cette fonction que vous coderez la "mécanique" de votre script, c'est à dire les instructions pour déplacer la bulle. - la fonction
drawest quant à elle chargée uniquement de l'affichage des objets. - Dans le programme principal, on trouve ( lignes 21 à 25 ) les instructions qui définissent les caractéristiques de la bulle : coordonnées initiales dans la fenêtre, couleur, taille et vitesse.
- en toute fin du programme principal, on trouve l'instruction ( ligne 27 ) qui "lance" l'animation; cette instruction doit toujours être la dernière du code, toute autre instruction placée après elle ne sera pas exécutée.
On remarque que les variables caractéristiques de la bulle ( x, y, vitesse, ...) sont définies dans le programme principal, mais qu'elles devront
être modifiées dans la fonction update de façon à faire bouger la bulle.
Cependant, une fonction ne peut modifier que les variables qui lui sont locales, c'est à dire définies dans sa propre portée ( autrement dit, définies dans
le corps de cette fonction )...la solution est donc ici de rendre ces variables globales au script, c'est à dire modifiables
à n'importe quel endroit; c'est le rôle du mot clé global placé au début de la fonction update.
Revoir au besoin le chapitre de Première au sujet de la portée des variables.
L'usage des variables globales est à limiter au strict nécessaire, car souvent source de problèmes...vous verrez que la POO est un moyen de s'affranchir de ce genre de problème !
A vous de compléter le code dans la fonction draw de façon à :
- faire se déplacer la bulle vers le haut du canevas ( attention, les coordonnées diminuent vers le haut : l'origine de ces coordonnées est en haut à gauche de la fenêtre. )
- tester si la balle arrive en haut de la fenêtre : dans ce cas, réinitialiser toutes les caractéristiques de la bulle de façon à en faire "monter" une nouvelle.
Deux bulles...
Travail à faire
Compléter votre code précèdent de façon à faire "monter" deux bulles en même temps.
Trois, quatre,... bulles...
Compléter votre code précèdent de façon à faire "monter" plusieurs bulles en même temps !
Vous commencez à voir le problème ??