Computers">
Nothing Special   »   [go: up one dir, main page]

TD POO v6 2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

Travaux Dirigés de Programmation b) Calcule et affiche la somme de tous les nombres compris

entre 95 et 116
Orientée Objet (v.6) c) Demande à l’utilisateur d’entrer une série de 5 notes
(compris entre 0 et 20) pour calculer et afficher leur
Une mise au point : La lecture des données au clavier moyenne
Les lectures au clavier en Java sont un peu plus complexes qu’en
1.2- Écrire un programme qui crée un tableau comportant les
langage C. Pour la rendre facile, nous vous conseillons d’utiliser les valeurs des carrés des n premiers nombres impairs, la valeur de n
méthodes de la classe Scanner se trouvant dans le package java.util. étant lue au clavier, et qui en affiche par la suite les valeurs sous
Ainsi, il faut : la forme:
Etape 1 : importation de la classe Scanner
On ajoute cette ligne d’instruction avant la définition de la classe : Combien de valeurs : 5
import java.util.Scanner ; 1 a pour carre 1
Etape 2 : Création d’un lecteur des données 3 a pour carre 9
Dans le programme, il faut créer un objet java de type Scanner pour lire 5 a pour carre 25
les données. On utilise pour cela la ligne d’instruction suivante : 7 a pour carre 49
Scanner lecteur = new Scanner(System.in) ; 9 a pour carre 81
Etape 3 : Lecture des données
1.3- a) Quels résultats fournit le programme suivant ?
Voici les méthodes utilisées. Chacune retourne la valeur entrée au
public class TestE2
clavier. Il faut donc la récupérer et l’affecter à une variable.
{ public static void main(String args[])
Tâche Syntaxe d’appel { int n, p ; n=p=0 ;
Lecture d’une chaine de caractères lecteur.nextLine()
while (n<5) n+=2 ; p++ ;
Lecture d’un nombre réel simple précision lecteur.nextFloat()
System.out.println ("A : n = " + n + ", p = " + p) ;
Lecture d’un nombre réel double précision lecteur.nextDouble()
n=p=0 ;
Lecture d’un nombre entier lecteur.nextInt()
while (n<5) { n+=2 ; p++ ; }
System.out.println ("B : n = " + n + ", p = " + p) ;
Exercice 1 (La programmation structurée en Java) }
}
1.1- Ecrire un programme Java qui :
a) Affiche le texte suivant : b) Écrire un programme réalisant la même chose en employant la
Voici la liste de vos exercices :
boucle for à la place de while.
Exercice 1
Exercice 2
… 1.4- Quels résultats fournit le programme suivant ?
Exercice 20

1 Par M NZEBOP NDENOKA Gérard


public class TestE5 5) Quand utilise-t-on le mot-clé extends ?
{ public static void main(String[] args) 6) Quand utilise-t-on le mot-clé implements ?
{ int n, p ; n = 0 ;
while (n<=5) n++ ; Exercice 3 : Ecriture et utilisation d’une classe Point
System.out.println ("A : n = " + n) ;
n=p=0; 1) Réaliser une classe Point permettant de représenter un point sur un
while (n<=8) n += p++ ; axe. Chaque point sera caractérisé par un nom (de type char) et une
System.out.println ("B : n = " + n) ; abscisse (de type double). On prévoira :
n=p=0;
while (n<=8) n += ++p ; - un constructeur recevant en arguments le nom et l’abscisse d’un
System.out.println ("C : n = " + n) ; point,
n=p=0; - une méthode affiche imprimant (en fenêtre console) le nom du
while (p<=5) n += p++ ; point et son abscisse,
System.out.println ("D : n = " + n) ; - une méthode translate effectuant une translation définie par la
n=p=0; valeur de son argument.
while (p<=5) n+= ++p ; 2) Écrire un petit programme utilisant cette classe pour créer un point, en
System.out.println ("E : n = " + n) ; afficher les caractéristiques, le déplacer et en afficher à nouveau les
}
caractéristiques.
}
Exercice 4 : Que fournit le programme suivant ?
Exercice 2: Concepts de base de POO
class A{
1) Définir les mot et expressions POO suivants : private int nbre = 20 ;
Classe, objet, attribut, méthode, constructeur, instanciation, private int decal ;
exactitude, portabilité, robustesse, instanciation, héritage, classe public A (int coeff)
fille, classe mère, héritage, méthode statique, méthode abstraite, { nbre *= coeff ;
classe abstraite, accesseur en lecture, accesseur en modification, nbre += decal ;
constructeur de recopie }
public void affiche ()
2) Quel est le rôle des commandes suivantes : java, javac
{ System.out.println ("nbre = " + nbre + " decal = " + decal) ;
3) Expliquez la signification du terme static lorsqu'il est placé devant: }
(a) une classe ; (b) une méthode d'une classe ; (c) un attribut d'une }
classe ? public class Execution
4) Que signifient les termes this et super utilisés lors de l’écriture d’une { public static void main (String args[]){
classe ? peuvent-ils être utilisés comme méthode ? Si oui dans quels A a = new A (5) ; a.affiche() ;
cas et où ? }
}

2 Par M NZEBOP NDENOKA Gérard


Exercice 5 : Que fournit le programme suivant ? relative a une origine d'abscisse 0
Point b - abscisse = 12
class Entier relative a une origine d'abscisse 0
{ public Entier (int nn) { n = nn ; } On place l'origine en 3
public void incr (int dn) { n += dn ; }
public void imprime () { System.out.println (n) ; } Exercice 7 : Quels résultats fournit ce programme ?
private int n ; class A
} {
public class TstEnt public A (int nn)
{ public static void main (String args[]){ { System.out.println ("Entree Constr A - n=" + n + " p=" + p) ;
Entier n1 = new Entier (2) ; System.out.print ("n1 = ") ; n1.imprime() ; n = nn ;
Entier n2 = new Entier (5) ; System.out.print ("n2 = ") ; n2.imprime() ; System.out.println ("Sortie Constr A - n=" + n + " p=" + p) ;
n1.incr(3) ; System.out.print ("n1 = ") ; n1.imprime() ; }
System.out.println ("n1 == n2 est " + (n1 == n2)) ; public int n ; // ici, exceptionnellement, pas d'encapsulation
n1 = n2 ; n2.incr(12) ; public int p=10 ;
System.out.print ("n2 = ") ; n2.imprime() ; }
System.out.print ("n1 = ") ; n1.imprime() ; class B extends A
System.out.println ("n1 == n2 est " + (n1 == n2)) ; { public B (int n, int pp)
} { super (n) ;
} System.out.println ("Entree Constr B - n=" + n + " p=" + p + " q=" + q);
p = pp ;
Exercice 6 : q = 2*n ;
Créer une classe permettant de manipuler un point d’un axe, repéré par System.out.println ("Sortie Constr B - n=" + n + " p=" + p + " q=" + q);
une abscisse (de type int). On devra pouvoir effectuer des changements }
d’origine, en conservant en permanence l’abscisse d’une origine public int q=25 ;
courante (initialement 0). On prévoira simplement les méthodes }
suivantes : public class TstInit
• constructeur, recevant en argument l’abscisse "absolue" du point (c’est- { public static void main (String args[])
à-dire repérée par rapport au point d’origine 0 et non par rapport à { A a = new A(5) ;
l’origine courante), B b = new B(5, 3) ;
• affiche qui imprime à la fois l’abscisse de l’origine courante et l’abscisse }
du point par rapport à cette origine, }
• setOrigine qui permet de définir une nouvelle abscisse pour l’origine
(exprimée de façon absolue et non par rapport à l’origine courante),
• getOrigine qui permet de connaître l’abscisse de l’origine courante.
Exercice 8 (l’héritage)
Ecrire un petit programme de test fournissant les résultats suivants :
Point a - abscisse = 3 On dispose de la classe suivante :

3 Par M NZEBOP NDENOKA Gérard


class Point Quelques problèmes
{ public void initialise (int x, int y) { this.x = x ; this.y = y ; }
public void deplace (int dx, int dy) { x += dx ; y += dy ; }
Problème 1: Soit le programme suivant comportant la définition
public int getX() { return x ; }
public int getY() { return y ; } d’une classe nommée Point et son utilisation avec la classe
private int x, y ; ExecPoint:
} class Point {
 Réaliser une classe PointA, dérivée de Point disposant d’une private int x, y ; // abscisse et ordonnée
méthode affiche affichant (en fenêtre console) les coordonnées d’un private char nom ;
point. Ecrire un petit programme utilisant les deux classes Point et public Point (int abs, int ord, char n) { x = abs ; y = ord ; nom=n ;
PointA. System.out.println ("Fin création de "+nom) ; }
 Que se passerait-il si la classe Point ne disposait pas des méthodes public void deplaceToi (int dx, int dy) { x += dx ; y += dy ; }
getX et getY ? public void afficheToi () { System.out.println ("C’est le Point "+ nom+"
de coordonnées ( " + x + ", " + y+ ") ") ; }
Exercice 9 (classes abstraites) }
On souhaite disposer d’une hiérarchie de classes permettant de public class ExecPoint {
manipuler des figures géométriques. On veut qu’il soit toujours possible public static void main (String args[]) {
d’étendre la hiérarchie en dérivant de nouvelles classes mais on souhaite
Point a ;
pouvoir imposer que ces dernières disposent toujours des méthodes
suivantes :
a = new Point(3, 5, 'A') ;
• void affiche () a.afficheToi() ;
• void homothetie (double coeff) a. deplaceToi (2, 0) ;
• void rotation (double angle) a.afficheToi() ;
Écrire la classe abstraite Figure qui pourra servir de classe de base à Point b = new Point(6, 8, 'B') ;
toutes ces classes. b.afficheToi() ;
}
Exercice 10 (les interfaces) }
On souhaite disposer de classes permettant de manipuler des figures 1) Donnez avec exactitude l’écran d’exécution de ce programme.
géométriques. On souhaite pouvoir caractériser celles qui possèdent 2) Supposez que la classe Point ne dispose pas de la méthode
certaines fonctionnalités en leur demandant d’implémenter des afficheToi.
interfaces, à savoir : a) Donnez le code de deux autres méthodes d’accès nommées
• Affichable pour celles qui disposeront d’une méthode void affiche (), getAbscisse et getOrdonnee fournissant respectivement l’abscisse et
• Tranformable pour celles qui disposeront des deux méthodes: l’ordonnée d’un Point.
void homothetie (double coeff) b) Adaptez la méthode main en conséquence pour afficher les
void rotation (double angle) mêmes informations sur les points a et b.
Écrire les deux interfaces Affichable et Transformable.

4 Par M NZEBOP NDENOKA Gérard


3) Redéfinir la classe Point en une autre classe Point2 en y ajoutant les }
éléments suivants : void afficheToi () { System.out.println ("Voiture "+
a) Une méthode distance pour calculer la distance du point courant nom.toUpperCase()+" de poids " + poids +" KG en position < " +
à un autre Point qui sera pris en paramètre de celle-ci (Utiliser la position + " Km > ") ; }
méthode Math.sqrt() qui permet de calculer la racine carrée d’un public static void ajouterCoutT (int val) { taxeT +=val ; }
nombre et qui retourne un autre nombre de type double ).
public static int getTaxe() {return taxeT; }
b) Une méthode distanceAOrigine qui utilise la méthode distance
écrite en a) pour retourne la distance à l’origine du point courant. }
c) Une méthode afficheToi qui redéfinit afficheToi en y ajouter public class TestVoiture {
l’affichage de la distance à l’origine. public static void main (String arguments[]) {
4) Donner les instructions à ajouter à la méthode main pour créer un Voiture p, s ;
tableau tabP de 100 points dont chaque point n° i a comme coordonnées p = new Voiture ("Renault 12", 1200, 16); p.afficheToi() ;
(i, i2) et pour nom 'C', avec i de 0 à 99 puis parcourez ce tableau pour s = new Voiture ("Spartan 6", 1350,-80) ; s.afficheToi() ;
demander à chaque point de s’afficher, en précisant sa distance à p. deplaceToi (9) ; p.afficheToi() ;
l’origine. System.out.println ("Taxe T Actuel = "+Voiture. getTaxe ()) ;
p. ajouterCoutT(20) ; s. ajouterCoutT(10) ;
Problème 2: Soit le programme suivant comportant la définition d’une System.out.println ("Taxe T Actuel = "+p.getTaxe()) ;
classe nommée Voiture et son utilisation avec la classe TestVoiture: System.out.println ("Taxe T Actuel = "+s.getTaxe()) ;
class Voiture { }
private int position ; }
public int poids ;
public String nom ; // Nom de la voiture Questions
private static int taxeT=0 ; 1) Donnez avec exactitude l’écran (ou trace) d’exécution de ce
public Voiture (String nom, int p) { programme.
this.nom= nom ; this.poids =p;
2) Ecrire une autre classe VoitureCouleur qui étend la classe Voiture en
System.out.println("DEBUT enregistrement de " + n) ;
y ajoutant :
}
public Voiture (String nom, int po , int pos) { - Un attribut privé couleur, lequel donne la couleur de cette
this(nom, po); voiture.
this. position = pos ; taxeT +=5 ; - Un constructeur pour initialiser toutes les informations d’une
System.out.println("FIN enregistrement de " + this.nom); voiture.
} - La méthode afficheToi redéfinie pour qu’elle affiche aussi sa
public void deplaceToi (int distance) { couleur.
position += distance ; NB : Ecrire cette classe de manière à compter le nombre de voitures
System.out.println (nom+" a BOUGÉ de <" + distance + " Km>") créées dans un programme.
; 3) Ecrire un petit programme de test de VoitureCouleur

5 Par M NZEBOP NDENOKA Gérard


Problème 3 : Comprendre la POO void afficherPerimetre(){
System.out.println("\t\tMon perimetre est "+ this.perimetre() +" m"); }
Soit le programme donné par : }
public class Rectangle {
private int numero; import java.util.Scanner;
private int longueur, largeur; import java.util.*;
int x,y; //Abscisses de l'origine public class RectangleMain{
public static int compteur = 1; public static void main(String args[]){
public Rectangle(){ Rectangle r1, r2;
this.numero = compteur; compteur++; r1 = new Rectangle(10, 8, -1, 9); r1.afficher();
} Scanner lecteur = new Scanner(System.in);
public Rectangle(int lon, int lar, int x, int y){ System.out.print("Entrer la longueur : ");
this(); int lon = lecteur.nextInt();
this.longueur = lon; this.largeur = lar; System.out.print("Entrer la largeur : ");
this.x = x; this.y = y; int lar= lecteur.nextInt();
}
public Rectangle(int lon, int lar){ this(lon, lar, 0, 0); } r2 = new Rectangle(lon, lar); r2.afficher();
public int surface(){ return this.longueur*this.largeur; }
public int perimetre(){ return 2*(this.longueur + this.largeur); } System.out.print("Entrer le deplacement en x : ");
public void deplace(int dx, int dy){ int dxx = lecteur.nextInt();
this.x += dx; this.y += dy; System.out.print("Entrer le deplacement en y : ");
} int dyy = lecteur.nextInt();
public void deplaceAbs(int dx){ this.x += dx; } r2.deplace(dxx, dyy);
private String toStringRec(){ r2.afficher();
return "Rectangle de dimensions " + this.longueur+"m X
"+this.largeur+"m \n\t placé en position ( "+this.x + " , " + this.y+" )"; r1 = r2; r1.afficher();
} }
public void afficher(){ }
System.out.println("---");
System.out.println(this.toStringRec()); Partie A
System.out.println("---"); 1. Les classes Rectangle et RectangleMain peuvent-elles se
} retrouver dans un même fichier java ?
void afficherSurface(){ 2. Donner le(s) nom(s) du(des) fichier(s) devant les contenir.
System.out.println("\t\tMa surface est "+ this.surface() +" m^2");
}

6 Par M NZEBOP NDENOKA Gérard


3. Les deux instructions d'importation du programme sont-elles d) Où est-t-il possible de l'utiliser dans une classe ?
indispensables ? Pourquoi ?
4. Quel est le nom du package importé ?
5. Comment appelle-t-on la classe RectangleMain dans ce Partie C
1. Que fait chacune des instructions:
programme ?
6. Donner la commande pour compiler ce programme a) Rectangle r1, r2;
7. Donner la commande pour l'exécuter. b) r1 = new Rectangle(10, 8, -1, 9);
c) Rectangle r1, r2;
Partie B d) lecteur.nextInt();
1. Dans la classe Rectangle: e) r2.afficher();
a) combien d'attributs trouve-t-on? Citez-les. 2. Qu'observe-t-on à l'écran lorsqu'on exécute la dernière
b) Parmi les attributs, quels ceux qui sont privés? instruction ci-après donnée alors que l'utilisateur avait entré 21
c) Quels sont les attributs rattachés aux objets de rectangle ?
pour x et -15 pour y ? r1.afficher();
d) Parmi les attributs, quel est celui qui est rattaché directement
3. Au cas où la méthode toStringRec() était privée dans Rectangle,
à la classe Rectangle?
avec quelles instructions peut-on remplacer l'instruction
e) Comment appelle-t-on ce type d'attribut ?
r1.afficher(); ?
2. Dans la classe Rectangle:
a) combien de méthodes trouve-t-on ? Citez-les. 4. Citer tous les messages envoyés dans ce programme en
b) Parmi les méthodes, quelles sont celles d'accès public? indiquant les objets qui les reçoivent.
c) Y a-t-il des méthodes rattachées directement à la classe 5. Soit dans la classe Rectangle, l'instruction: r2.x = 13;
Rectangle? a) Que fait cette instruction ?
3. Dans la classe Rectangle: b) A-t-on le doit de l'écrire ainsi ?
a) Quel est le rôle du mot clé this qui précède la sélection c) Citer les conditions à remplir pour qu'une telle écriture soit
d'attibut/de méthode ? possible.
6. Proposer une exécution de ce programme en expliquant ce qui
b) Citez trois usages de this pour la sélection d'attribut dans ce
se passe au niveau de la mémoire et en donnant ce qui s'affiche
programme.
à l'écran.
c) Citez trois usages de this pour la sélection de méthode.
7. Proposer un autre programme permettant de créer un tableau de
d) Est-on obligé d'utiliser this? Pourquoi ?
15 rectangles numérotés 0, 1, ... 14, tel que le rectangle n°i
4. Dans la classe Rectangle: possède pour longueur 2i+4, pour largeur i+3 et placé en position
a) combien de constructeurs trouve-t-on ? Donnez-leurs (15-i,i). Vous utiliserez le 3e constructeur pour instancier les
signatures ? objets.
b) expliquer ce que fait chaque constructeur.
c) Quel est le rôle de this() utilisé comme méthode ?

7 Par M NZEBOP NDENOKA Gérard

Vous aimerez peut-être aussi