Module I5 – Java Corrigé TP3 RT I – Création d'une classe 1.1 – Classe Point Reprendre la classe point définie dans le TP précédent, en incluant dans ce fichier, toutes les méthodes qui ont été précédemment décrites pour cette classe. ... main ... Point P1,P2,P3; P1=new Point(1,2); P2=new Point(4,5); P3=new Point(); P1.affiche(); P2.affiche(); P1.deplace(4,-6); P1.rotation(); P1.normalise(); P3=P2.copiePoint(); P2.deplace(-2,+3); P1.affiche(); P2.affiche(); ... P3.affiche(); P3.affiche(); 1.2 – Evolution de la classe Point class Point { ... String Nom=new String("?"); static String Type=new String(); Point(String s, int a, int b) { x=a; y=b; Nom=s; } affiche() { System.out.println(Type +"-"+ Nom + " x=" + x + " , y=" + y); } ... main ... Point P1=new Point("P1",11,12); Point P2=new Point("P2",21,22); P1.Type="Point"; P2.Type="Point"; P1.affiche(); P2.affiche(); Point P3=new Point(31,32); P3.Type="Nouv Point"; P1.affiche(); P2.affiche(); P3.affiche(); => La variable "Type" est déclarée en "static"', elle est donc commune à tous les objets issus de la classe Point. Par conséquent, sa modification dans l'un des objets est implicitement effective pour tous les objets. IUT Elbeuf 1/4 S.H. Module I5 – Java Corrigé TP3 RT II – Organisation du programme 2.1 - Séparation classe et main public class ProgTest { // Cette classe ne contient que main public static void main(String [] arg) { Point P1=new Point("P1",11,12); ... } } class Point { // Classe idem précédente sauf main int x,y; ... public static void main(String [] arg) { System.out.println("Execution du main de la clsse Point"); } } – – – – Le fichier doit avoir le même nom que la classe publique, donc "ProgTest" Une seule classe peut être déclarée en publique dans un fichier Même si la classe ProgTest n'est pas déclarée publique, le fonctionnement reste identique Si l'on inverse l'ordre des classe, on s'aperçoit que le main exécuté appartient à la classe déclarée en premier 2.2 – Constructeurs L'ajout de la ligne d'affichage (System.out.println...) dans les constructeurs, permet d'obtenir à l'écran l'affichage d'un message chaque fois qu'un constructeur est appelé. Dans le programme demandé ici, le résultat affiché sera le suivant : Ligne de code Message affiché Ligne 1 => Contructeur "Point(String,int,int)" : création de l'objet P1 Ligne 2 => Contructeur "Point(Point)" : création de l'objet P2 Ligne 4 => Contructeur "Point()" : création de l'objet P3 Ligne 6 => Contructeur "Point()" : création de l'objet ? A la ligne 6, le constructeur "Point()" est appelé pour la création d'un objet temporaire utilisé dans la méthode "copiePoint". Remarque : La ligne 5 ne génère aucun appel au constructeur (pas de réservation d'espace mémoire); IUT Elbeuf 2/4 S.H. Module I5 – Java Corrigé TP3 RT III – Héritage 3.1 – Création de la classe PointColor => En utilisant la notion d'héritage, nous pouvons directement réexploiter la totalité du code déjà défini pour la classe Point. De ce fait, seules les modifications nécessitent une redéfinition. // Héritage class PointColor extends Point { String Coul=new String(); PointColor() {} PointColor(String s, String c; int a, int b) { x=a; y=b; Nom=s; Coul=c; } PointColor(PointColor Px) { x=Px.a; y=Px.b; Nom=sPx.Nom; Coul=Px.Coul; } void affiche() { Super.affiche(); // Méthode de la classe point System.out.println("Couleur : " + Coul); } } Lors d'un appel d'une méthode non définie dans la classe PointColor, la méthode de la classe Point sera utilisée si elle existe. 3,2 – Domaine d'existence des variables Les restrictions d'existence des variable x,y,String dans le constructeur, imposent le fonctionnement suivant : L'accès aux variables est-il possible depuis : Classe "Point" Classe "PointColor" x, y oui oui Nom oui oui Type oui non main non non non Après ces modifications, l'application précédente continue de fonctionner, car toutes les actions sur les variables de champ de la classe Point, PointColor, s'effectuent en interne à la classe (seuls les appels de méthodes sont à l'extérieur de la classe) IUT Elbeuf 3/4 S.H. Module I5 – Java Corrigé TP3 RT IV – Utilisation des fonctions définies dans les bibliothèques java 4,1 – Fonctions mathématiques L'utilisation des fonctions mathématiques dans la méthode "distance" permet de simplifier l'écriture du code. Java n'acceptant pas les mélanges entre variables de types différents (int, double, ...), il est nécessaire de procéder au départ à une conversion de format pour obtenir des lignes de calculs homogènes. Integer.doubleValue(x) Double.intValue(x) Math.pow(x, n) Math.sqrt(c) => Conversion d'une variable entière au format double => Conversion d'une variable double au format entier => Renvoie la valeur xn => Renvoie la racine carrée de c La bibliothèque "Math" propose donc diverses fonctions mathématiques 4,2 – Fonctions chaînes de caractères Pour modifier la casse , utiliser les méthodes : String.toUpperCase Conversion de la chaîne de caractères en majuscules String.toLowerCase Conversion de la chaïne de caractères en minuscules Integer.parInt(c) Integer.toString(x) IUT Elbeuf Conversion du caractère "c" en valeur numérique Conversion d'un entier en chaîne de caractères 4/4 S.H.