13. création d'une nouvelle classe



Dans la leçon précédente, nous avons introduit un tableau pour stocker la position de la tortue après chaque trait. Ce tableau permet de redessiner facilement les figures que la tortue a faites avant le "nettoyage". Toutefois cette manière de procéder ne fonctionne pas si la tortue fait des sauts (après un sautil faut pouvoir conserver aussi les coordonnées de départ du nouveau trait et non pas seulement celles de son point d'arrivée). Pour remédier à ceci, une solution simple est de créer une nouvelle classe trait et de conserver un tableau de traits au lieu d'un tableau de points.

Le code ci-dessous montre comment créer la classe Trait, puis comment modifier les méthodes av2 et redessine de la classe Tortue en conséquence. Le programme principal dessine deux petites maisons (avec un saut entre les deux).

class Trait{

    //variables d'instances
    Coordonnee depart;
    Coordonnee arrivee;

    Trait(Coordonnee dep, Coordonnee arr){
        depart = dep;
        arrivee = arr;
    }

    Coordonnee depart(){
        return(depart);
    }

    Coordonnee arrivee(){
        return(arrivee);
    }
}

class Tortue extends SuperTortue{

    Trait[] tableau = new Trait[100];
    //pour stocker les 100 premiers traits de la tortue
    int i = 0;
    //indique l'index de la prochaine case libre dans le tableau
 

    void av2(int dist){
        Coordonnee c1 = position();
        avance(dist);
        Coordonnee c2 = position();
        tableau[i] = new Trait(c1,c2);
        i++;
    }
 

    void redessine(){
        for(int j=0; j<i; j++){
            dessineTrait(tableau[j].depart(), tableau[j].arrivee());
        }
    }

    Coordonnee triangle(int longueurCote){
        tourneDroite(30);
        av2(longueurCote);
        Coordonnee coord = position();
        tourneDroite(120);
        av2(longueurCote);
        tourneDroite(120);
        av2(longueurCote);
        tourneDroite(90);
        return(coord);
    }

    Coordonnee rectangle(int hauteur, int largeur){
        av2(hauteur);
        Coordonnee coord = position();
        tourneDroite(90);
        av2(largeur);
        tourneDroite(90);
        av2(hauteur);
        tourneDroite(90);
        av2(largeur);
        tourneDroite(90);
        return(coord);
    }

    void maison(int hauteurMur, int largeur, int x, int y){
        saute(x,y);
        Coordonnee c = rectangle(hauteurMur, largeur);
        saute(c.x(), c.y());
        triangle(largeur);
    }
}
 

public class MonProg13a{

    public static void main(String[] args){

        Tortue rosalie = new Tortue();

        rosalie.maison(50,80,100,500);
        rosalie.maison(100,60,400,300);
        rosalie.nettoie();
        rosalie.redessine();
    }
}
MonProg13a.java

Remarque
[à revoir] méthodes pour retourner la valeur des variables d'instance et pour les mettre à jour peut être intéressant (manipulation de ces variables uniquement au moyen de ces méthodes) -> en cas de changement de représentation interne -> modification minimale du code des autres méthodes.



9/1/2001
CLMJ