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.