Module I5 - Java RT Programmation objet En utilisant JCreator, vous développerez les applications demandées ci-après en mode console. Vous pouvez réutiliser des extraits de code du TP précédent (affichage, saisie au clavier, ..) Consignes : - Proposez un code le plus simple possible (limiter les saisies clavier) - Soignez la présentation de votre code (indentation, commentaires, ...) - Organisez correctement vos fichiers (numérotation, répertoire, …) I – Création de la classe de classe 1.1 – Classe Point Nous allons utiliser dans ce TP la classe Point précédemment définie, comme classe de base. Récupérez donc dans vos TP précédents, cette classe qui doit correspondre à la définition suivante : Classe Point - Variables de champ : x, y - Constructeurs Point(), Point(int, int), Point(Point) - Méthodes internes : void affiche() Affiche les valeurs de x et y boolean testEgal(Point) true si les valeurs x et y de l'objet Point passé en argument sont identiques à celles de void déplace(int, int) Déplace les coordonnées void rotation() Rotation du point par rapport à l'axe void normalise() Normalisation des coordonnées void initPoint(int, int) Permet d'initialiser les coordonnées du point Point copiePoint(Point) Permet d'effectuer la recopie d'un point Regroupez dans un fichier unique, tous les éléments de vos précédents TP afin de constituer votre classe Point, et validez son fonctionnement en réalisant le programme ci-dessous : Création des points P1, P2 et P3 Initialisation de leurs coordonnées aux valeurs respectives P1(1,2), P2(4,5) – P3 non initialisé Affichage des coordonnées de ces 3 points Déplacement de P1 de dx=4, dy= -6 Rotation de P1 Normalisation de P1 Copie de P2 dans P3 Déplacement de P2 de dx=-2, dy=+3 Test d'égalité entre P1 et P3 Affichage des valeurs des 3 points IUT Elbeuf 1-6 S.H. - TP03-01 Module I5 - Java RT Programmation objet 1.2 - Evolution de la classe Point On souhaite pouvoir identifier le point lors de son affichage. Pour cela, nous allons modifier la classe Point de la manière suivante : Ajouter 2 variables de type chaîne de caractères dans votre classe : Type (défini avec le mot clé static) indique le type d'élément dont il s'agit. Nom permet de mémoriser le nom de l'objet ("?" par défaut) Réalisez les modifications de la classe permettant de prendre en compte cette évolution. La création d'un point s'effectuera de la manière suivante : Point P1=new Point("P1",1,2) Lors de l'affichage des caractéristiques de P1, le message obtenu sera de la forme : Point P1 : x = 1 / y = 2 Valider les modifications effectuées en exécutant les opérations suivantes : - Créez 2 points nommés P1 et P2 aux coordonnées P1(11,12) et P2 (21,22) - Définir pour ces points le type "Point" - Affichez les caractéristiques de ces 2 points - Créez un troisième point P3(31,32) - Définir le type "NouvPoint" pour P3 - Affichez les caractéristiques des 3 points Questions : Quelle est l'incidence du modificateur "static" sur l'utilisation de la variable de champ "Type" définie dans la classe Point ? II – Organisation du programme 2.1 – Séparation classe & main Si vous avez respectez l'organisation classique dans votre application Java, la méthode main est inclues dans votre classe Point. Ceci présente l'inconvénient de ne pas séparer le code de la partie déclaration. Nous allons donc modifier cette organisation. - Déclarez votre classe Point avec le code suivant sans utiliser de modificateur, ce qui donne la ligne de déclaration suivante : class Point { … - Créez une classe publique que vous nommerez "ProgTest", que vous positionnerez en début de fichier. - Par un copier / coller, déplacez la portion de code correspondant à la fonction main pour l'insérer dans la classe ProgTest. - Modifiez la méthode main contenue dans la classe Point, afin de ne laisser que la ligne de code suivante : System.out.println(« Execution du main de la classe Point »); - Compilez et exécutez votre programme Questions : Comment devez-vous nommer votre fichier ? Pourquoi la classe Point n'est-elle pas déclarée en publique ? Que ce passe-t-il si la classe "ProgTest" n'est pas déclarée publique ? L'ordre de déclaration des classes présente-t-il une importance ? IUT Elbeuf 2-6 S.H. - TP03-01 Module I5 - Java RT Programmation objet 2.2 – Constructeurs Afin d'illustrer le rôle des constructeurs, nous allons modifier à nouveau la classe Point. - Insérez dans chaque constructeur de la classe Point, la ligne de code suivante : System.out.printfn("Constructeur \"Point()\" : création de l'objet "+Nom); Exécutez le code suivant : Point P1 = new Point("P1",11,12); Point P2 = new Point(P1); P2.Nom="P2"; Point P3=new Point(); Point P4; P2=copiePoint(P1); System.out.println("Fin de l'application"); Question : Justifiez les messages affichés. III – Héritage 3.1 - Création de la classe PointColor Nous allons faire évoluer la définition du point utilisé, afin de lui adjoindre un attribut couleur (dans cette exercice, la couleur sera simplement définie par une chaîne de caractère). Toutefois, pour conserver la compatibilité de la classe Point avec les applications déjà existantes, nous allons créer une nouvelle classe nommée "PointColor". Classe PointColor - Variables de champ : x, y Position du point Type Dénomination du type de l'objet (chaîne de car.) Nom Nom de l'objet (chaîne de car.) Coul Couleur de l'objet (chaîne de car.) - Constructeurs Point(), Point(int, int), Point(Point) - Méthodes internes : void affichage() Affiche la totalité des caractéristiques de l'objet boolean testEgal(Point) true si les valeurs x et y de l'objet Point passé en argument sont identiques void déplace(int, int) Déplace les coordonnées du point void rotation() Rotation du point par rapport à l'axe void normalise() Normalisation des coordonnées void initPoint(int, int) Permet d'initialiser les coordonnées du point Point copiePoint(Point) Permet d'effectuer la recopie d'un point Question : Quel est l'intérêt d'utiliser la notion d'héritage pour créer cette nouvelle classe ? Mettez donc en œuvre la notion d'héritage pour créer une nouvelle classe "PointColor", définie dans un fichier distinct de la classe "Point" IUT Elbeuf 3-6 S.H. - TP03-01 Module I5 - Java RT Programmation objet Validez votre programme par un programme test : Créez un objet Point P1(10,11) Créez un objet PointColor PC(20,22, couleur rouge) Affichez les caractéristiques des 2 objets Déplacez les 2 points de dx=10, dy=-5 Affichez les caractéristiques des 2 objets Question : Fournir le code source de la classe PointColor 3.2 – Domaine d'existence des variables Modifiez la classe Point, en définissant les variables de champs : protected int x,y; private static String Type=new String(); Questions : * Quelles incidences sur le fonctionnement de votre application sont induites par ces modifications ? * Compétez le tableau ci-dessous L'accès aux variables est-il possible depuis : Classe "Point" Classe "PointColor" main x, y Nom Type 3.3 – Accès aux méthodes de la classe de base La méthode "affiche" de la classe PointColor doit faire appel à la méthode "affiche" de la classe "Point". Pour cela, utiliser le mot clé "super". Modifiez votre code en conséquence et valider le fonctionnement IUT Elbeuf 4-6 S.H. - TP03-01 Module I5 - Java RT Programmation objet IV – Utilisation des fonctions définies dans les bibliothèques Java Java dispose de nombreuses bibliothèques permettant facilitant la création des applications. Nous allons dans la suite mettre en oeuvre quelques unes des possibilités offertes Remarque : Le nombre de bibliothèques exploitables en Java est l'un des plus élevé pour les langage de programmation. 4.1 – Fonctions mathématiques Nous souhaitons ajouter à notre classe Point, une méthode qui retourne la distance séparant ce point de l'origine des axes. Cette valeurs est obtenue par la formule : d = √ (x² + y²) - Ajoutez à la classe "Point", la méthode distance - Nous allons mettre en œuvre les fonctions extraites de la classe mathématique : int distance() { double a,b,c; a=Integer.doubleValue(x); b=Integer.doubleValue(y); c=Math.pow(a,2)+Math.pow(b,2); c=Math.sqrt(c); return Double.intValue(c); } Utilisez cette méthode pour obtenir la distance d'un point par rapport à l'origine. Exploitez l'aide de JCreator pour commenter chacune des lignes de la méthode "distance" 4.2 – Fonctions chaînes de caractères Recherchez avec l'aide de JCreator, les fonctions relatives aux chaînes de caractères, et permettant de : - Modifier la casse d'une chaîne de caractères - Convertir une chaîne de caractères en valeur entière (et inversement) IUT Elbeuf 5-6 S.H. - TP03-01 Module I5 - Java RT Programmation objet Travail à rendre sur feuille : Répondre aux quetions suivantes : 1.2 – Quelle est l'incidence du modificateur « static » lors de la déclaration d'un attribut de classe ? 2.1 – L'ordre de déclaration des classes engendre-t-il une modification vis à vis de l'exécution de l'application ? 2.2 – Affichez les messages obtenus à l'écran, en précisant en regard lorsqu'il y a lieu, la ligne de code ayant déclenché l'appel à l'un des constructeurs. 3.1 – Listing source complet de la classe PointColor 3.2 – Fournir le tableau spécifiant l'accès aux variables, complété. 3.3 – Listing source de la méthode « affiche » de la classe PointColor 4.2 – Proposer un extrait de code permettant de réaliser les opérations suivantes en exploitant au mieux les possibilités offertes par les bibliothèques Java : • Convertir une chaîne de caractères en minuscules • Convertir un nombre réel double précision, en une valeur entière codée sur 32 bits. • Calcul de la surface d'un cercle à partir de la variable R (rayon du cercle). Vous préciserez le format de R. IUT Elbeuf 6-6 S.H. - TP03-01