IUT Colmar TP3 : Abstraction/Polymorphisme
Didier Petitjean 1 17/04/2017
Module E5
TP3 : Initiation POO/Java Abstraction/Polymorphisme
Objectifs : Le but de ce TP est :
A partir des classes réalisées dans le TP2, compléter le programme pour utiliser les formes dans une
collection. Ce TP vous permettra de découvrir les notions d’abstraction, de polymorphisme et de
collection dynamique d’objet.
Gym tonique.
But :
Créer des dessins utilisant des formes représentant des individus et les faire bouger.
Déroulement du TP
Créer un nouveau package (TP3)
Dans le répertoire de votre package, copier les cinq fichiers du TP2.
La structure de votre programme aura le diagramme de classes suivant :
IUT Colmar TP3 : Abstraction/Polymorphisme
Didier Petitjean 2 17/04/2017
Rajouter la classe Ligne. Programmer ses méthodes. DeplacerDebut et deplacerFin
permettent de ne déplacer qu’un seul point de la ligne (stretch).
Ecrire la classe abstraite Humain dérivée de Forme. Son constructeur ajoutera des
formes (Lignes, cercle) communes à la représentation d’un homme et d’une femme.
Vous utiliserez un ArrayList pour « stocker » ces éléments. Ecrire les cinq autres
méthodes.
Ecrire les classes Homme et Femme qui ne comprend qu’un constructeur qui rajoute
les éléments du dessin propres à l’individu.
Modifier la classe Dessin (ajouterObjet) pour pouvoir rajouter un homme ou une
femme.
Tester l’application avec un seul individu
Changer dans Dessin maForme pour lui adjoindre une collection. Modifier alors
ajouterObjet, deplacer, upDate. Tester dans appliForme pour ajouter plusieurs
individus.
Rajouter flechir et etendre à dessin.
Modifier l’application pour créer le mouvement tension/extension de votre ribambelle.
IUT Colmar TP3 : Abstraction/Polymorphisme
Didier Petitjean 3 17/04/2017
/* Permet de dessiner une ligne et de la déplacer
* TP3 : Didier Petitjean le 08/08/2006 */
package TP3;
import java.awt.*;
import java.math.*;
public class Ligne implements Forme{
private Point debut,fin;
/*************/* Trois constructeurs **********************/
public Ligne() {
debut = new Point(); //Par defaut à 0,0
fin = new Point(20,20);
}
public Ligne(int xDebut,int yDebut, int xFin,int yFin) {
debut = new Point(xDebut,yDebut);
fin = new Point(xFin,yFin);
}
public Ligne(Point debut, Point fin) {
this.debut=new Point(debut);
this.fin=new Point(fin);
}
/************************************************************/
public void dessiner(Graphics g)
{ g.drawLine(debut.x,debut.y,fin.x,fin.y);
}
public void deplacer(int dx, int dy)
{ debut.x+=dx;
debut.y+=dy;
fin.x+=dx;
fin.y+=dy;
}
public void deplacer(Point vecteur)
{ debut.x+=vecteur.x;
debut.y+=vecteur.y;
debut.x+=vecteur.x;
debut.y+=vecteur.y;
}
/** Permet le édplacement juste du point de début */
public void deplacerDebut(Point vecteur)
{ debut.x+=vecteur.x;
debut.y+=vecteur.y;
}
/** Permet le édplacement juste du point de fin */
public void deplacerFin(Point vecteur)
{ fin.x+=vecteur.x;
fin.y+=vecteur.y;
}
/** Permet le retour du point haut gauche du rectangle contenant la ligne */
public Point getPointHautgauche()
{ Point retour = new Point();
retour.x-=(debut.x<fin.x?debut.x:fin.x);
retour.y-=(debut.y<fin.y?debut.y:fin.y);
return retour;
}
/** Permet le retour du point bas droit du rectangle contenant la ligne*/
public Point getPointBasDroit()
{ Point retour = new Point();
retour.x-=(debut.x>fin.x?debut.x:fin.x);
retour.y-=(debut.y>fin.y?debut.y:fin.y);
return retour;
}}
IUT Colmar TP3 : Abstraction/Polymorphisme
Didier Petitjean 4 17/04/2017
/* Représentation factoriser d’un dessin homme/femme */
package TP3;
import java.lang.reflect.Array;
import java.util.*;
import java.awt.*;
public abstract class Humain implements Forme {
Collection corps = new ArrayList();
private Ligne cuisseDroite,cuisseGauche,tibiaDroit,tibiaGauche;
private Ligne brasDroit,brasGauche;
int taille;
public Humain() {
corps.add(new Cercle(200,200,26)); // Tete
brasDroit=new Ligne(200,250,250,210); // Bras
corps.add(brasDroit);
brasGauche=new Ligne(200,250,150,210);
corps.add(brasGauche);
cuisseDroite = new Ligne(200,300,215,340); // Jambes
corps.add(cuisseDroite);
cuisseGauche=new Ligne(200,300,185,340);
corps.add(cuisseGauche);
tibiaDroit=new Ligne(215,340,230,380);
corps.add(tibiaDroit);
tibiaGauche=new Ligne(185,340,170,380);
corps.add(tibiaGauche);
}
public void dessiner(Graphics g)
{ Forme enCours;
Iterator iterateur=corps.iterator();
while (iterateur.hasNext())
{ enCours=(Forme)iterateur.next();
enCours.dessiner(g);
}
}
public void deplacer(int dx, int dy)
{ Forme enCours;
Iterator iterateur=corps.iterator();
while (iterateur.hasNext())
{ enCours=(Forme)iterateur.next();
enCours.deplacer(dx,dy);
}
}
public void deplacer(Point vecteur)
{ Forme enCours;
Iterator iterateur=corps.iterator();
while (iterateur.hasNext())
{ enCours=(Forme)iterateur.next();
enCours.deplacer(vecteur);
}
}
public void flechir()
{ cuisseDroite.deplacerFin(new Point(15,0));
cuisseGauche.deplacerFin(new Point(-15,0));
tibiaDroit.deplacerDebut(new Point(15,0));
tibiaGauche.deplacerDebut(new Point(-15,0));
brasDroit.deplacerFin(new Point(0,80));
brasGauche.deplacerFin(new Point(0,80));
}
public void etendre()
{ cuisseDroite.deplacerFin(new Point(-15,0));
IUT Colmar TP3 : Abstraction/Polymorphisme
Didier Petitjean 5 17/04/2017
cuisseGauche.deplacerFin(new Point(15,0));
tibiaDroit.deplacerDebut(new Point(-15,0));
tibiaGauche.deplacerDebut(new Point(15,0));
brasDroit.deplacerFin(new Point(0,-80));
brasGauche.deplacerFin(new Point(0,-80));
}
}
/* Homme.java
* Classe dérivant de humain représentant un homme
* Didier Petitjean : 09/08/2006 */
package TP3;
public class Homme extends Humain{
public Homme() {
corps.add(new Ligne(174,174,226,174)); // Chapeau
corps.add(new Rectangle(185,150,215,174));
corps.add(new Ligne(200,226,200,300)); // Corps
}
}
/* Femme.java
* Classe dérivant de humain représentant une femme
* Didier Petitjean : 09/08/2006 */
package TP3;
public class Femme extends Humain{
public Femme()
{ corps.add(new Ligne(200,226,200,246)); // Corps
corps.add(new Ligne(200,246,170,300)); // Robe
corps.add(new Ligne(170,300,230,300));
corps.add(new Ligne(230,300,200,246));
}
}
/* * Defini le contenu de la fenêtre de l'application d'animation du visage. Lorsqu'il se réaffiche
* l'objet Dessin redessinne l'objet contenu dans cette liste. */
package TP3;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
public class Dessin extends Canvas {
private Dimension offDimension;
private Image offImage;
private Graphics offGraphics = null;
private Forme maForme=null;
private Collection compagnie = new ArrayList();
public int getLargeur() {
return getWidth();
}
public int getHauteur() {
return getHeight();
}
/** ajoute une forme à la zone de dessin. */
public void ajouterObjet(int sorte) {
switch (sorte)
{ case 0 : maForme=new Cercle();break;
case 1 : maForme=new Rectangle();break;
case 2 : compagnie.add(new Homme());break;
case 3 : compagnie.add(new Femme());break;
default : System.out.println("Forme n'existe pas");
1 / 7 100%