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);
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