Module I5 - Java RT Programmation objet En utilisant JCreator, vous

publicité
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
Téléchargement