TP 7

Introduction à la Programmation Objet



séparateur

Python est un langage de programmation objet de haut niveau, c'est à dire qu'il dispose d'instructions aisément compréhensibles par un être humain (contrairement au langage machine) et qu'il implémente la notion d'objet, c'est à dire qu'il permet la création et l'utilisation d'entités informatiques définies par un ensemble de variables et de fonctions associées, appelés respectivement attributs et méthodes.

L'utilisation d'objets dans les programmes permet d'obtenir un code clair et bien structuré. De plus ce type de programmation facilite la modularité du code, c'est à dire son organisation en parties indépendantes aisément ré-utilisables mais pouvant interagir entre elles par l'utilisation de variables communes.

Le caractère objet du langage python est omniprésent même s'il n'apparaît pas toujours de manière explicite. En python, tout est objet : les nombre entiers eux-mêmes sont des objets , ce que confirme l'instruction type(1) qui nous renvoie la valeur class 'int' qui signifie que le nombre 1 est un objet appartenant à la classe des entiers.

séparateur type 2

EXERCICE 1 : Chute et rebond d'une balle

On cherche dans cet exercice à simuler le mouvement de chute et de rebond de balles de tailles et de masse différentes dans le champ de pesanteur terrestre. L'idée est de créer un programme qui manipulera l'objet balle dont on précisera les variables et les fonctions associées.

1. Créer un script que vous nommerez tp7_1_8.py permettant, à l'aide de pocketgl, d'afficher une fenêtre (appelée chute de balles) de dimensions 800x600 pixels ainsi qu'un rectangle gris de dimensions 800x20 au bas de la fenêtre représentant le sol horizontal.

Remarque : il faut que le dossier contenant votre script contienne impérativement le fichier pocketgl.py. Si vous travaillez sur Repl.it, il faudra uploader ce fichier et le placer dans le même dossier que le fichier main.py (ce qui est le placement par défaut lors de l'upload).

2. Proposer un ensemble de variables permettant de placer correctement l'objet balle à l'écran et permettant de préciser son état de mouvement.

3. Créer dans votre script une classe balle en utilisant le modèle vu dans le CM4 et y ajouter comme attributs les deux composantes de l'accélération Ax et Ay.

5. Ajouter des méthodes, sur le modèle vu dans le CM4, permettant de lui attribuer un nom, une couleur, un rayon et une masse ainsi qu'une méthode permettant de l'afficher à l'écran. Tester votre programme en créant un objet balle, initialement immobile, soumis à une accélération verticale orientée vers le bas de composante Ay=-9.81 m.s-2, de nom ballon de basket, de couleur orange, de diamètre 24 cm et de masse 600 g placé au centre de la fenêtre, de centre situé à 5 m du sol.

Echelle : on prendra comme échelle 1 pixel pour 1 cm.

6. Créer une méthode move() spécifique à la classe balle permettant de modifier la position y du ballon toutes les dt=0.1 secondes, en utilisant le modèle théorique pour un mouvement rectiligne uniformément accéléré ainsi qu'une fonction rebond() permettant de faire rebondir la balle au contact du sol.

7. Modifier le programme principal de manière à créer une temporisation toutes les 0.1 s en utilisant la méthode time() et permettant de simuler le mouvement du ballon.

8. Modifier le programme principal de manière à créer deux autres objets et à afficher dans la fenêtre leur mouvement ainsi que leur nom :

Aide : on utilisera la fonction texte(px,py,message) de pocketgl pour afficher le nom de chaque balle.

Un exemple d'exécution :

Remarque : si votre navigateur internet ne prend pas en charge le format vidéo utilisé, vous pouvez télécharger la vidéo ICI et la visualiser dans votre lecteur vidéo (VLC par exemple).

9. Créer un nouveau programme que vous appellerez tp7_1_9.py permettant de simuler le mouvement d'un ballon de basket sur la Terre, sur la Lune et sur Jupiter et affichant le mouvement du ballon dans la même fenêtre, en indiquant en légende la planète considérée.

Remarque : il faut que vous recherchiez les valeurs de l'accélération de la pesanteur sur ces astres ;).

10. Modifier ce programme pour afficher, sous le nom des planètes, la valeur de la période de chaque mouvement en s.

Un exemple d'exécution :

Remarque : si votre navigateur internet ne prend pas en charge le format vidéo utilisé, vous pouvez télécharger la vidéo ICI et la visualiser dans votre lecteur vidéo (VLC par exemple).

séparateur type 2

EXERCICE 2 : Réaction chimique

On cherche dans cet exercice à simuler la réaction chimique entre 2 espèces chimiques A et B selon l'équation bilan suivante : A + B => C + D . On suppose pour cela que la réaction est totale et que chaque choc entre deux espèces A et B est efficace. On utilisera comme base le programme collisions_pocketgl.py disponible sur Moodle, dans le dossier à télécharger CM4.

1. Ouvrir le fichier collisions_pocketgl.py et l'enregistrer sous le nom tp7_2_1.py. Vérifier que ce programme est enregistré dans un dossier où le fichier pocketgl.py est présent.

2. Modifier le fichier pour ne conserver pour l'instant que deux sphères dures que vous nommerez A et B, de couleur respectives bleue et rouge et de rayon identique 10 pixels. Vérifier le bon fonctionnement de votre programme.

3. Modifier votre programme pour que lors d'une collision entre A et B, A et B disparaissent pour laisser place à deux autres espèces chimiques C (sphère dure verte de rayon 10 pixels) et D (sphere dure grise de rayon 10 pixels) de telle sorte que :

Aide : Pensez à utiliser un booléen pour détruire ou créer une sphère dure. On pourra pour cela créer une méthode setAlive pour l'objet balle permettant de fixer le booléen alive à True ou False.

Vous enregistrerez ce programme sous le nom tp7_2_3.py.

Un exemple d'exécution :

Remarque : si votre navigateur internet ne prend pas en charge le format vidéo utilisé, vous pouvez télécharger la vidéo ICI et la visualiser dans votre lecteur vidéo (VLC par exemple).

4. Modifier votre programme que vous appellerez tp7_2_4.py pour qu'il utilise 4 listes que vous appellerez listeA, listeB, listeC, listeD contenant respectivement des sphères de type A, B, C ou D dont les deux premières (listeA et listeB) contiennent chacune 10 sphères de rayon 10 pixel, de position initiale déterminée aléatoirement et de composantes Vx et Vy déterminées aussi aléatoirement et comprises entre 0.0 et 2.0.

Simplification : on ne traitera que les collisions entre A et B de même que les collisions entre les espèces chimiques A, B, C, D et les bords.

Un exemple d'exécution :

Remarque : si votre navigateur internet ne prend pas en charge le format vidéo utilisé, vous pouvez télécharger la vidéo ICI et la visualiser dans votre lecteur vidéo (VLC par exemple).

5. Modifier votre programme que vous appellerez tp7_2_5.py de manière à permettre à l'utilisateur de saisir dans le terminal au départ le nombre d'espèces chimiques A et B présentes initialement.