Master Informatique Approche Objet – 4TIN706U Universit´ e Bordeaux

publicité
Master Informatique
Université Bordeaux
Approche Objet – 4TIN706U
2016 – 2017
TD N o 2 Une simulation de mécanique. Précisions
Organisation du code : balles en chute libre, Jokari, etc.
Les lois de cinématique suivantes pourront simplifier le code :
— ∆x = v × ∆t
— ∆v = a × ∆t
— a = F/m
Pour simplifier également, nous dirons (ce qui est faux), que le rebond contre une surface
correspond à inverser la vitesse en multipliant par un coefficient. La vitesse, quand à elle, diminue
progressivement à chaque instant de façon proportionelle pour simuler l’effet de l’air (ce qui est
également faux).
Exercices
1. Création des classes
(a) Créer une classe Ball dans laquelle l’ensemble des propriétés d’un ballon ou d’une
balle seront regroupées (diamètre, masse, coefficient d’élasticité des rebonds, position, vitesse, accélération, force instantanée). Cette classe n’est pas immédiatement
instanciable, car la force instantanée exercée sur elle n’est pas encore connue (elle
dépendra de quelle type de balle il s’agit : une balle en chute libre, une balle retenue
par un fil, une balle retenue par un ressort, etc.)
On y ajoutera les méthodes suivantes
— Getters et Setters nécessaires et suffisants
— step qui implémente les rebonds contre les parois.
— draw qui dessine la balle sous la forme d’un simple cercle noir.
(b) Créer une classe Basketball qui hérite de Ball.
On y implémentera les méthodes suivantes
— Getters et Setters nécessaires et suffisants.
−
−
— step qui calcule la cinématique de la chute libre d’un corps (→
a =→
g ).
— draw qui dessine la balle sous la forme d’un rond coloré.
(c) Créer une classe Jokaribox qui contiendra l’ensemble des propriétés d’une boite de
Jokari : position, largeur et hauteur.
(d) Créer une classe Jokariball qui hérite de Ball et qui implémente une balle reliée à
un élastique.
On y implémentera les méthodes suivantes
— Getters et Setters nécessaires et suffisants.
→
−
−
— step qui calcule la cinématique d’une telle balle ( f = m→
g − K.∆x, où K est un
coefficient de raideur et ∆x la distance entre un point de repos de l’élastique et
la balle).
— draw qui dessine la balle sous la forme d’un rond coloré relié à un trait représentant
l’élastique.
(e) Créer une classe Jokari qui contient une boite de Jokari et une balle de Jokari.
(f) Créer une classe Animation qui contient un ensemble de balles de basket de Jokari.
2. Dépendance, Composition, Héritage
(a) Dessiner sommairement le schéma UML de l’organisation des classes entre elles.
(b) Optimiser le code selon les principes d’encapsulation et celui qui consiste à préférer
la composition à l’héritage.
(c) Ajouter aux constructeurs des affichages vers la sortie standard pour observer l’ordre
dans lequel les objets sont alloués en mémoire.
3. Collisions
(a) Ajouter une méthode boolean cover(Ball other) qui retourne la booléen vrai
lorsque this et other se recouvrent.
(b) Ajouter une méthode void collision(Ball other) qui modifie les vitesses de this
et other en fonction d’une collision. Nous prendrons la formule suivante pour ce
calcul :
m1 −m2
2
— vA1 = vB1 m
+ vB2 m2m
1 +m2
1 +m2
2m1
m2 −m1
— vA2 = vB1 m1 +m2 + vB2 m1 +m2
(c) Depuis quel(s) objet(s) et vers quel(s) objet(s) doit-on envoyer le message collision ?
Implémenter cet envoi de messages.
Téléchargement