Mise en route

De $1

Version de 04:17, 18 Aoû 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Support de cours 

Avant de commencer les TPs vous devez avoir installer votre environnement de travail.

Organisation du travail

Vous enregistrerez les différents fichiers que vous créerez pour résoudre les exercices, dans un répertoire java/tp (ou poo/tp).
L'emplacement exact du répertoire java est à votre convenance. Le plus simple serait de le mettre directement sous votre répertoire HOME.

Chaque TP aura son propre répertoire et, sauf exceptions, chaque exercice aura aussi son propre répertoire, ce qui vous permettra de conserver différentes versions d'une même classe. Les exceptions sont les cas où, par exemple, on ajoute des méthodes ou des variables à une classe sans toucher ce qui a déjà été écrit dans les exercices précédents (mais même dans ces cas, il est conseillé d'avoir des répertoires différents).

Vous aurez ainsi à créer, par exemple, un fichier java/tp/tp1/exo1/Hello.java.

Si vous n'avez pas terminé un TP, vous devez le terminer seul (ou avec l'aide de vos camarades) pour le prochain TP. Vous pouvez demander de l'aide en envoyant un message électronique à un de vos enseignants si un point précis n'est trouvé par aucun étudiant.

Application Hello, World!

 Voici le code source de l'application HelloWorld:

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}

Compilez cette classe à l'aide de la commande : javac HelloWorld.java

Exécuter la classe HelloWorld à l'aide de la commande : java HelloWorld

Applet Hello, World!

Voici le code source de l'applet HelloWorldApplet:

import java.awt.Graphics;
import java.applet.Applet;

public class HelloWorldApplet extends Applet {
  public void paint(Graphics g) {
    g.drawString("Hello world!", 50, 25);
  }
}

Compilez cette classe à l'aide de la commande : javac HelloWorldApplet.java

Une applet doit s'exécuter dans un fichier html (ex. HelloWorld.html):

<object width="200" height="100">
  <param name="code" value="HelloWorldApplet.class">
</object>

Testez avec l'appletviewer : appletviewer HelloWorld.html.

La classe Moyenne

Créer un fichier Moyenne.java qui contient la classe Moyenne vue en cours.

class Moyenne {
  int notes = 0 ;
  int nombreDeNotes = 0 ;

  void ajouteNote (int note) {
    notes += note;
    nombreDeNotes += 1;
  }

  double calculMoyenne() {
    return ((double)notes) / nombreDeNotes ;
  }
}

  1. Comment faire pour tester cette classe ?
  2. Que se passe-t-il si on calcule la moyenne sans avoir saisi de notes ?
  3. Que se passe-t-il si on enlève le (double) ligne 11 ? Que se passe-t-il dans ce cas si on calcule la moyenne sans avoir saisi de notes ?
  4. Peut-on mettre la méthode main directement dans la classe Moyenne ou faut-il nécessairement créer une classe TestMoyenne ?

Une calculatriceCalculatrice.PNG

On veut créer une classe qui représente une calculatrice (cf. figure ci-contre).

  1. Quels sont les champs nécessaires pour cette classe ? Quel est leur type ?
  2. Quelles sont les méthodes qu'il faut créer ? Quelle est leur signature ? On veut réaliser toutes les opérations de cette calculatrice, y compris la flèche à gauche qui enlève le chiffre unité dans le nombre présent dans l'accumulateur.
  3. Pour les touches chiffre (0, 1, ..., 9), on proposera deux façons de faire. La première façon consiste à définir une méthode par chiffre (zero(), un(), ...). La deuxième façon consiste à avoir une méthode chiffre avec un paramètre (le chiffre à entrer, pas un nombre!)
  4. Ecrire le code Java qui correspond et le tester.

Note: Si x est une variable numérique, l'instruction Java Math.sqrt(x) calcule la racine carrée de x.

Exercices supplémentaires

Le temps qui passe

On veut écrire un programme qui permet de convertir des secondes, en minutes et en heures.

  1. Proposer une classe Temps avec une méthode String convertir(int secondes); qui prend en paramètre un nombre de secondes et renvoie une chaîne de caractères qui donne le nombre d'heures et de minutes représentés par ce nombre de secondes. Par exemple, t.convertir(4567)doit renvoyer la chaîne "1h 16mn 7s".
  2. Comment faire pour tester cette méthode ?
  3. Y a-t-il un intérêt à avoir plusieurs instances de la classe Temps ?

Les nombres complexes et les références

Implanter les deux classes ComplexeCartesien et ComplexePolaire vues en cours. Ceux qui veulent (et qui savent) pourront ajouter un constructeur. Les autres attendront le prochain cours pour savoir de quoi l'on parle et utiliseront simplement la notation pointée pour choisir les valeurs des champs.

  1. Sachant que la norme d'un nombre complexe est le carré du module sauriez vous ajouter une méthode module() dans ces deux classes ?

Créer deux objets c1 et c2 de type ComplexeCartesien qui représentent la même valeur, par exemple le nombre complexe i.

  1. Que se passe-t-il si l'on compare c1 et c2 avec l'opérateur de comparaison == ? Proposer un programme Java qui (dé)montre vos affirmations.
  2. Que se passe-t-il si au lieu de travailler avec deux objets on travaille avec un seul objet et (toujours) deux références ? Proposer un (autre) programme Java qui illustre cette situation. Si vous ne connaissez pas la différence entre référence et objet il faut relire le cours, faire la distinction est essentiel pour pouvoir programmer en Java !
  3. Ajouter une méthode boolean egalA(ComplexeCartesien c) qui permet de comparer la valeur d'un nombre complexe avec un autre. Testez-la!