A3P(AL) : TD1

Denis BUREAU, septembre 2013 v1

 

Créer une nouvelle classe Rationnel destiné à représenter un élément de l'ensemble Q.

1.      Chaque objet possèdera donc un numérateur et un dénominateur.

2.      Écrire le constructeur "naturel" (c’est-à-dire celui qui a autant de paramètres qu’il y a d’attributs), et un constructeur à un seul paramètre (dans le cas où le Rationnel que l'on veut créer est un simple entier).
Peut-on éviter de répéter les instructions déjà écrites dans le premier constructeur ?
Aide : La première instruction d'un constructeur peut être      
 this(param1, param2); 
ce qui appelle un autre constructeur de la même classe qui attend ces paramètres.

3.      Écrire une méthode toString sans paramètre qui retourne une String représentant au mieux le Rationnel. Une première version naïve donnerait 
"-1/-4" ou "2/-3" ou "5/1".
Une deuxième version donnerait "1/4" ou "-2/3" ou "5".
Aide : On peut concaténer des String et des nombres avec un + à condition que le premier morceau soit une String.
Exemple : maString = ""+5+"! ="+factorielle(5);  \equiv     
maString = "5! = 120";

4.      Écrire une méthode add avec un paramètre Rationnel qui retourne le Rationnel égal à la somme du Rationnel courant et du Rationnel passé en paramètre (sans simplification). Exemple : 1/3 + 1/6 -> 9/18, et pas 1/2.

5.      OPTIONNELLEMENT : Écrire une méthode de simplification du Rationnel et l'appeler à la fin du constructeur et de la méthode d'addition.

6.      Dans une autre classe (Utilisation), écrire une méthode essai sans paramètre qui déclarera 2 Rationnels, les additionnera, puis affichera le résultat sous la forme donnée dans l'exemple du point 4 ci-dessus.
Aide : System.out.println( uneString ); affiche uneString à l'écran (dans le Terminal de BlueJ).

Rappels : Les noms des classes commencent toujours par une Majuscule, les noms d'attributs par un a, les noms de paramètres par un p., et les noms de variables locales (à une méthode) par un v.

Pour mémoire au verso, une classe vue au TP1.2 : MaPremiereClasse.java

Après ce TD, vous devriez être capable d’expliquer les 15 notions listées ci-dessous (le vérifier plus tard en travail personnel) ; apportez-les au cours de mercredi.

1. expliquer le concept de compilation d'un projet Java
2. expliquer ce qu'est une classe Java (notamment par rapport à la notion d'objet)
3. expliquer ce qu'est un objet d'une classe Java (notamment par rapport à la notion de classe)
4. expliquer ce qu'est une méthode Java
5. expliquer ce qu'est un attribut d'une classe
6. expliquer le type int et String
7. expliquer la différence entre une méthode (resp. attribut) publique et une méthode (resp. attribut) privée
8. expliquer la syntaxe Java pour affecter la valeur d'un calcul à une variable
9. expliquer le rôle du constructeur d'une classe, et à quel moment il est appelé
10. expliquer la syntaxe Java pour créer un objet
11. expliquer ce qu'est la signature d'une méthode et sa syntaxe
12. expliquer la syntaxe Java pour déclarer un attribut
- - - Si vous avez été au bout du TP1.2 : - - -
13. expliquer ce qu'est une méthode récursive et comment a! et ab peuvent être calculés récursivement
14. expliquer ce qu'est la valeur de retour d'une méthode
15. expliquer la syntaxe Java pour effectuer un test et donner un exemple de lignes d'instruction pour tester l'égalité et l'inégalité de variables.

 

/**

 * MaPremiereClasse pour experimenter les erreurs de compilation.

 *

 * @author Denis BUREAU

 * @version 2010.02.1

 */

public class MaPremiereClasse

{

 

  // ### Attributs ###

  private int     aPremierAttribut;

  private boolean aDeuxiemeAttribut;

  private String  aTroisiemeAttribut;

 

  // ### Constructeurs ###

 

  /**

   * Construit toujours le meme objet : 2, true, "exemple"

   */

  public MaPremiereClasse()

  {

      this.aPremierAttribut   = 2;

      this.aDeuxiemeAttribut  = true;

      this.aTroisiemeAttribut = "exemple";

  } // MaPremiereClasse()

 

  /**

   * Constructeur naturel

   * @param pI entier  pour initialiser aPremierAttribut

   * @param pB booleen pour initialiser aDeuxiemeAttribut

   * @param pS chaine  pour initialiser aTroisiemeAttribut

   */

  public MaPremiereClasse( final int pI, final boolean pB, final String pS )

  {

      this.aPremierAttribut   = pI;

      this.aDeuxiemeAttribut  = pB;

      this.aTroisiemeAttribut = pS;

  } // MaPremiereClasse(...)

 

  // ### Accesseurs ###

 

  public int     getPremierAttribut()   { return this.aPremierAttribut;   }

  public boolean getDeuxiemeAttribut()  { return this.aDeuxiemeAttribut;  }

  public String  getTroisiemeAttribut() { return this.aTroisiemeAttribut; }

 

  // ### Modificateurs ###

 

  public void setPremierAttribut(   final int     pPremierAttribut   )

      { this.aPremierAttribut   = pPremierAttribut;   }

  public void setDeuxiemeAttribut(  final boolean pDeuxiemeAttribut  )

      { this.aDeuxiemeAttribut  = pDeuxiemeAttribut;  }

  public void setTroisiemeAttribut( final String  pTroisiemeAttribut )

      { this.aTroisiemeAttribut = pTroisiemeAttribut; }

 

  // ### Autres methodes ###

 

  /**

   * Un exemple de procedure qui provoque une erreur de compilation

   */

  public void procedure()

  {

    System.out.println( "La procedure s'est bien executee." );

    return 1; // ERREUR

  } // procedure()

 

  /**

   * Un exemple de fonction booleenne qui provoque une erreur de compilation

   * @return toujours true

   */

  public boolean fonction()

  {

    return 1; // ERREUR

  } // fonction()

 

} // MaPremiereClasse