Unité IN3S02 - TP2
Enoncé

Durée : 3 h

1- OBJECTIFS

 

2- TRAVAIL A REALISER

Nota : le travail demandé doit être terminé, en séance ou en hors séance.

2.1- Créer un répertoire de travail

Créer un répertoire IN3S02-tp2 à la racine de votre compte. C'est dans ce répertoire que devront être stockés tous les programmes Java et exercices relevant de ce tp.

 

2.2- Exercice 1 : Projet "picture"

Cet exercice va consister à modifier des classes d'un exemple de projet BlueJ : le projet picture

2.2.0- Préparer l'environnement de travail

Lancer Bluej et charger le projet picture qui se trouve dans le répertoire .../bluej/examples [ menu Project, choix Open Project... ].

Afin de ne pas modifier l'original de ce projet, nous allons travailler sur une copie : enregistrer ce projet dans le répertoire IN3S02-tp2, créé préalablement, sous le nom picture2 [ menu Project, choix Save As ... ].

2.2.1- Découvrir et essayer le projet picture2

 

Dans la fenêtre principale de Bluej,  les flèches entre classes définissent des liens de dépendance. Les flèches en tiretet spécifient un lien "uses". Comme l'indiquent ces flèches, la classe Picture utilise les classes Circle, Square et Triangle, et ces dernières utilisent la classe Canvas. La classe Canvas définit des utilitaires de bas niveau pour l'affichage graphique d'objets : nous ne l'étudierons pas de suite.

Créer une instance de la classe Picture [ clic droit sur cette classe puis choisir new Picture( ) ]. Invoquer la méthode draw de cette instance [ clic droit sur l'objet puis choisir void draw( ) ]. L'image affichée illustre que l'objet de type Picture est une composition d'objets de type Circle, Square et Triangle.

2.2.2- Modifier la classe Circle

 
Prendre connaissance du code source de la classe Circle [ clic droit, choix Open Editor ].


a) Créer dans la classe Circle la méthode suivante :

  • signature : getPosition( )
  • valeur de retour : la position de l'objet codée sous la forme 1000*x + y, où x et y sont ses coordonnées.
  •       Compiler, créer un objet de type Circle, puis tester le bon fonctionnement de la méthode getposition

    b) Créer dans la classe Circle la méthode suivante :

  • signature : changeSize(double)
  • paramètre : un coefficient de type réel
  • valeur de retour : aucune
  • comportement : change le diamètre en le multipliant par le coefficient fourni en paramètre
  • nota : faire appel à une méthode existante pour éviter une duplication de code ?
  •  
        Compiler, créer un objet de type Circle, puis tester le bon fonctionnement de la méthode changeSize(double).

    Nota. On notera que la classe Circle possède ainsi deux méthodes de même nom : changeSize. Ceci ne crée pas d'ambiguïté car ces deux méthodes ont des signatures différentes. Cette possiblité qu'offre Java est appelée surcharge.

    2.2.3- Modifier la classe Picture

     

    Prendre connaissance du code source de la classe Picture. Modifier la classe Picture de façon à ajouter un deuxième soleil à l'image. Compiler et tester.

    Créer dans la classe Picture la méthode suivante :

    Compiler et tester. 

    2.2.4- Générer automatiquement la documentation

     

    Editer le code source de la classe Circle. Dans l'éditeur, passer du mode Implementation (menu rouge en haut à droite) au mode Interface. Quelles sont les informations du code source qu'on retrouve dans cette documentation automatiquement générée ? Si besoin, ajoutez, en anglais de préférence, des commentaires de documentation aux méthodes que vous avez développées (getPosition( ) et changeSize(double)) pour qu'elle soient renseignées au même niveau que les autres.

     

    2.2.4- Terminer l'exercice

     

    Prendre connaissance de l'arborescence des fichiers générés et, sous navigateur, consulter le fichier index.html

    Sauvegarder le projet picture2 [ menu Project, choix Save ] et le fermer [ menu Project, choix Close ]

     

     

    2.3- Exercice 2 : Projet "complex"

    Cet exercice va consister à créer une nouvelle classe, indépendante, permettant de représenter un nombre complexe.

    2.3.0- Préparer l'environnement de travail

    Si pas fait antérieurement, fermer tous les projets ouverts dans BlueJ ou, si BlueJ n'est pas ouvert, le lancer.
    Si pas fait antérieurement, créer un répertoire IN3S02-tp2 à la racine de votre compte.

     

    2.3.1- Créer un nouveau projet

     

    Créer dans le répertoire IN3S02-tp2, préalablement créé,  un nouveau projet BlueJ de nom complex [ menu Project, choix New Project ].

     

    2.3.2- Créer une nouvelle classe

     

    Dans le projet complex, créer une nouvelle classe de nom Complex [ bouton New Class ].

    Ecrire cette classe en Java, en la documentant au fur et à mesure, afin qu'elle réponde aux spécifications suivantes :

  • finalité : représenter un nombre complexe
  • champs : deux réels re et im pour stocker les parties réelle et imaginaire
  • constructeurs :
  • - un contructeur pour définir un complexe à partir de ses parties réelle et imaginaire
    - un constructeur pour définir un complexe réel pur

  •  méthodes
  • - une fonction d'accès pour chaque attribut
    - une procédure d'ajout d'un nombre complexe au complexe courant
    - une fonction toString renvoyant une représentation du nombre complexe sous la forme de la chaîne de caractères suivante : [ partie réelle ; partie imaginaire ]
    Optionnel : remplacer la forme [ a ; b ] par la forme  a + b i , en gérant le problème des signes et le cas particulier des nombres réels purs et imaginaires purs.
    - une procédure println affichant dans un terminal la valeur renvoyée par la fonction toString

     

    Tester le bon fonctionnement de cette classe.

    Générer la documentation de cette classe.

     

    2.3.3- Terminer l'exercice

     

    Sauvegarder le projet complex et le fermer.

     

    2.4- Exercice 3 : Projet "straightLine"

     

    Cet exercice va consister à créer une nouvelle classe, indépendante, permettant de représenter une droite dans le plan.

    Créer dans le répertoire IN3S02-tp2, préalablement créé,  un nouveau projet BlueJ de nom straightLine. Y définir une classe de nom Line, en la documentant au fur et à mesure, répondant aux spécifications suivantes :

  • finalité : représenter une droite du plan
  • champs : trois réels a, b et c définissant les coefficients de la droite ax+by+c=0
  • constructeurs :
  • - un contructeur pour définir une droite à partir de ses coefficients a, b et c (on supposera que ces valeurs définissent bien une droite)

  • méthodes :
  • - une fonction d'accès pour chaque attribut
    - une fonction déterminant si la droite courante est sécante non perpendiculaire, perpendiculaire, parallèle ou confondue à une droite donnée en paramètre. Exemples :

    les droites [1, 2, 3] et [3, 6, 9] sont confondues ; 
    les droites [2, 0, 3] et [9, 0, 5] sont parallèles ;
    les droites [0, 2, 3] et [0, 9, 5] sont parallèles ;
    les droites [2, 2, 0] et [1, -1, 1] sont perpendiculaires ;
    les droites [1, -1, 1] et [2, 2, 0] sont perpendiculaires ;
    les droites [0, 1, 2] et [1, 2, 0] sont sécantes non perpendiculaires

    Afin de pouvoir utiliser l'outil de test automatique fourni, choisir comme en-tête de définition pour cette fonction : public String relativePosition(Line l), et un résultat à valeur dans {"IDENTICAL", "PARALLEL", "PERPENDICULAR", "SECANT, ""}.

    Pour tester cette fonction, téléchargez et utilisez la classe LineTest dédiée à cet usage.
    - Optionnel :
    une procédure d'affichage de la droite courante dans une fenêtre graphique. Pour cela on utilisera les utilitaires basiques suivants (cliquer sur le lien) : une méthode d'affichage dédiée : drawLine, et la classe graphique à laquelle elle fait appel : LineDrawer. Travail à réaliser :

    1)  étudier très sommairement le code source de ces utilitaires
    2)  intégrer aussi directement que possible ces utilitaires dans le projet straightLine et la classe Line, afin de pouvoir afficher la droite définie par l'objet courant. Pour cela : intégrer la classe LineDrawer dans le projet straightLine, insérer la méthode drawLine dans la classe Line, modifier la signature de cette méthode de façon que les coefficients a, b et c ne lui soient pas transmis en paramètre mais soient les attributs de l'objet courant, compiler et tester
    3)  modifier le constructeur de la classe LineDrawer afin qu'il prenne en paramètre non pas 3 réels mais un objet de type Line, modifier en conséquence la méthode drawLine de la classe Line, compiler et tester
    4) essai : créer et tracer la droite 0.5 x + y - 200 ; essai : créer et tracer la droite 0.1 x + 0.1 y - 100. Pourquoi celle-ci ne s'affiche-t-elle pas ? Pour répondre à cette question, analyser dans la classe LineDrawer le code de la méthode paintComponent (plus précisément l'instruction if qui suit le commentaire "// *** DRAW LINE *** ").
    5) modifier la méthode paintComponent de la classe LineDrawer de façon qu'elle trace toute droite traversant la zone de dessin
    6) modifier la méthode paintComponent de la classe LineDrawer afin que le repère soit tracé de façon traditionnelle :  origine (0,0) en bas à gauche, axe x en bas orienté gauche-droite, axe y à gauche orienté bas-haut) ; compiler et tester

     

     

    2.5- Terminer la séance

     

    Si pas fait antérieurement, sauvegarder les projets ouverts, puis fermer BlueJ [ menu Project, choix Quit ].

    Si besoin, envoyer par mél à votre binôme, en fichiers attachés, tous les programmes *.java développés sous IN3S02-tp2.

    Se déloger [ Ctrl-Alt-Suppr, Fermeture de session ]