TD+TP Programmation Orientee Objet Fiche de TD Programmation Orienté Objet
TD+TP Programmation Orientee Objet Fiche de TD Programmation Orienté Objet
TD+TP Programmation Orientee Objet Fiche de TD Programmation Orienté Objet
Page 2 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
n=p=0; { int i, n ;
while (p<=5) n += p++ ; for (i=0, n=0 ; i<5 ; i++) n++ ;
System.out.println ("D : n = " + n) ; System.out.println ("A : i = " + i + ", n = " + n) ;
n=p=0; for (i=0, n=0 ; i<5 ; i++, n++) {}
while (p<=5) n+= ++p ; System.out.println ("B : i = " + i + ", n = " + n) ;
System.out.println ("D : n = " + n) ;
}
for (i=0, n=50 ; n>10 ; i++, n-= i ) {}
}
6. System.out.println ("C : i = " + i + ", n = " + n) ;
for (i=0, n=0 ;
i<3 ; i++, n+=i, System.out.println ("D : i = " + i + ", n = " + n)) ;
Quels résultats fournit le programme suivant ?
System.out.println ("E : i = " + i + ", n = " + n) ;
public class ExoII7
}
{ public static void main(String[] args)
}
{ int n, p ;
n=p=0 ;
while (n<5) n+=2 ; p++ ;
System.out.println ("A : n = " + n + ", p = " + p) ;
n=p=0 ; 8.
while (n<5) { n+=2 ; p++ ; }
System.out.println ("B : n = " + n + ", p = " + p) ; Écrire un programme qui calcule les racines carrées de nombres fournis
} en donnée. Il
} s’arrêtera lorsqu’on lui fournira la valeur 0a. Il refusera les valeurs
négatives. Son exécution
7. se présentera ainsi :
donnez un nombre positif : 2
sa racine carree est : 1.4142135623730951
Quels résultats fournit le programme suivant ?
donnez un nombre positif : -3
public class ExoII8
svp positif
{ public static void main (String[] args)
Page 3 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
Page 4 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
{x=r; }
} }
.....
private final float x ; 14.
private final int n = 10 ;
private final int p ;
Soit le programme suivant comportant la définition d’une classe
}
nommée Point et son
utilisation :
13. class Point
{ public Point (int abs, int ord) { x = abs ; y = ord ; }
Que fournit le programme suivant ? public void deplace (int dx, int dy) { x += dx ; y += dy ; }
class Entier public void affiche ()
{ public Entier (int nn) { n = nn ; } { System.out.println ("Je suis un point de coordonnees " + x + " " +
public void incr (int dn) { n += dn ; } y) ;
public void imprime () { System.out.println (n) ; } }
private int n ; private double x ; // abscisse
} private double y ; // ordonnee
public class TstEnt }
{ public static void main (String args[]) public class TstPnt
{ Entier n1 = new Entier (2) ; System.out.print ("n1 = ") ; { public static void main (String args[])
n1.imprime() ; { Point a ;
Entier n2 = new Entier (5) ; System.out.print ("n1 = ") ; a = new Point(3, 5) ; a.affiche() ;
n2.imprime() ; a.deplace(2, 0) ; a.affiche() ;
n1.incr(3) ; System.out.print ("n1 = ") ; n1.imprime() ; Point b = new Point(6, 8) ; b.affiche() ;
System.out.println ("n1 == n2 est " + (n1 == n2)) ; }
n1 = n2 ; n2.incr(12) ; System.out.print ("n2 = ") ; n2.imprime() ; }
System.out.print ("n1 = ") ; n1.imprime() ; Modifier la définition de la classe Point en supprimant la méthode
System.out.println ("n1 == n2 est " + (n1 == n2)) ; affiche et en introduisant
Page 5 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
15. L
16.
Page 6 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
relative a une origine d'abscisse 0 Quelles sont les instructions correctes et, dans ce cas, quelles sont les
On place l'origine en 3 méthodes appelées
et les éventuelles conversions mises en jeu ?
17. H a.f(n1, x) ;
a.f(x, n1) ;
a.f(p, x) ;
Réaliser une classe qui permet d’attribuer un numéro unique à chaque
a.f(n1, n2) ;
nouvel objet créé
(1 au premier, 2 au suivant...). On ne cherchera pas à réutiliser les
19. H
numéros d’objets éventuellement détruits. On dotera la classe
uniquement d’un constructeur, d’une méthode getIdent fournissant le
numéro attribué à l’objet et d’une méthode getIdentMax fournissant le Quels résultats fournit ce programme ?
numéro du dernier objet créé. class A
Écrire un petit programme d’essai. { public void f(int n, float x)
{ System.out.println ("f(int n, float x) n = " + n + " x = " + x) ;
18. }
private void f(long q, double y)
{ System.out.println ("f(long q, double y) q = " + q + " y = " + y) ;
Soit la définition de classe suivante :
}
class A
public void f(double y1, double y2)
{ public void f (int n, float x)
{ System.out.println ("f(double y1, double y2) y1 = " + y1 + " y2 = "
{ ..... }
+ y2) ;
public void f (float x1, float x2)
}
{ ..... }
public void g()
public void f (float x, int n)
{ int n=1 ; long q=12 ; float x=1.5f ; double y = 2.5 ;
{ ..... }
System.out.println ("--- dans g ") ;
}
f(n, q) ;
Avec ces déclarations :
f(q, n) ;
A a ; short p ; int n1, n2 ; float x ;
f(n, x) ;
Page 7 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
20. V Lui ajouter une méthode maxNorme déterminant parmi deux points lequel
est le plus éloigné de l’origine et le fournissant en valeur de retour. On
public class SurdfAcc donnera deux solutions :
{ public static void main (String args[]) • maxNorme est une méthode statique de Point,
{ A a = new A() ; • maxNorme est une méthode usuelle de Point.
a.g() ;
System.out.println ("--- dans main") ; 22.
int n=1 ; long q=12 ; float x=1.5f ; double y = 2.5 ;
a.f(n, q) ;
Quels résultats fournit ce programme ?
a.f(q, n) ;
class A
a.f(n, x) ;
{ public A (int nn)
a.f(n, y) ;
{n = nn ;
}
}
}
public int getn ()
{ return n ;
21. }
public void setn (int nn)
Soit la classe Point ainsi définie : { n = nn ;
class Point }
{ public Point (int abs, int ord) { x = abs ; y = ord ; } private int n ;
public void affiche () }
{ System.out.println ("Coordonnees " + x + " " + y) ; class Util
} { public static void incre (A a, int p)
Page 8 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
Écrire un programme qui : for (int i=0 ; i<N ; i++) t2[i] = 2*i+1 ;
• lit dans un tableau 5 valeurs flottantes fournies au claviera, // affichage des valeurs de t1 et de t2
• en calcule et en affiche la moyenne, la plus grande et la plus petite System.out.print ("t1 = ") ;
valeur for (int i=0 ; i<N ; i++) System.out.print (t1[i] + " ") ;
System.out.println () ;
26. K System.out.print ("t2 = ") ;
for (int i=0 ; i<N ; i++) System.out.print (t2[i] + " ") ;
System.out.println () ;
Que se passera-t-il si l’on exécute le programme suivant ?
t1 = t2 ;
public class Affec1
t1[0] = 10 ; t2[1] = 20 ; t1[2] = 30 ; t2[3] = 40 ;
{ public static void main (String args[])
// affichage des valeurs de t1 et de t2
{ int t1[] = {1, 2, 3} ;
System.out.print ("t1 = ") ;
int t2[] = new int[4] ;
for (int i=0 ; i<N ; i++) System.out.print (t1[i] + " ") ;
for (int i=0 ; i<4 ; i++ ) t2[i] = 2*i ;
System.out.println () ;
t2 = t1 ;
System.out.print ("t2 = ") ;
for (int i=0 ; i<4 ; i++) System.out.println (t2[i]) ;
for (int i=0 ; i<N ; i++) System.out.print (t2[i] + " ") ;
}
System.out.println () ;
}
}
}
27.
28.
Quels résultats fournit le programme suivant ?
public class Affec
Quels résultats fournit le programme suivant ?
{ public static void main (String args[])
public class Affec2
{ final int N = 4 ;
{ public static void main (String args[])
int t1[] = new int [N] ;
{ char t1[] = {'b', 'o', 'n', 'j', 'o', 'u', 'r'} ;
int t2[] = new int [N] ;
char t2[] = {'h', 'e', 'l', 'l', 'o'} ;
for (int i=0 ; i<N ; i++) t1[i] = i+1 ;
char t3[] = {'x', 'x', 'x', 'x'} ;
Page 10 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
t3 = t1 ; t1 = t2 ; t2 = t3 ; 30.
alors initialisées à zéro, Réaliser une classe PointA, dérivée de Point disposant d’une méthode
• un constructeur Vecteur (int n, double x), n représentant le nombre affiche affichant (en
de composantes qui fenêtre console) les coordonnées d’un point. Ecrire un petit programme
seront alors toutes initialisées à la valeur x, utilisant les deux
• un constructeur Vecteur (double [ ] v) qui créera un vecteur par classes Point et PointA.
recopie du tableau v, Que se passerait-il si la classe Point ne disposait pas des méthodes getX
et getY ?
• une méthode (non statique) prod_scal fournissant le produit scalaire
de deux
vecteurs (ici, si les deux vecteurs ne sont pas de même taille, on se 33.
contentera de
fournir la valeur zéro), On dispose de la classe suivante :
• une méthode (statique) somme fournissant la somme de deux class Point
vecteurs ; s’ils n’ont pas { public void setPoint (int x, int y) { this.x = x ; this.y = y ; }
la même taille, on renverra une référence "nulle", public void deplace (int dx, int dy) { x += dx ; y += dy ; }
• une méthode affiche affichant les composantes d’un vecteur. public void affCoord ()
{ System.out.println ("Coordonnees : " + x + " " + y) ;
Écrire un petit programme d’utilisation.
}
private int x, y ;
32.
}
Réaliser une classe PointNom, dérivée de Point permettant de manipuler
On dispose de la classe suivante : des points définis
class Point par deux coordonnées (int) et un nom (caractère). On y prévoira les
{ public void initialise (int x, int y) { this.x = x ; this.y = y ; } méthodes suivantes :
public void deplace (int dx, int dy) { x += dx ; y += dy ; } • setPointNom pour définir les coordonnées et le nom d’un objet de type
public int getX() { return x ; } PointNom,
public int getY() { return y ; } • setNom pour définir seulement le nom d’un tel objet,
private int x, y ; • affCoordNom pour afficher les coordonnées et le nom d’un objet de
}
Page 12 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
Page 14 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
class E extends B {}
public class Surdf
class F extends C {}
{ public static void main (String arg[])
public class Poly
{ byte bb=1 ; short p=2 ; int n=3 ; long q=4 ;
{ public static void main (String arg[])
float x=5.f ; double y=6. ;
{ A a = new A() ; a.affiche() ; System.out.println() ;
A a = new A() ; a.f(bb) ; a.f(x) ; System.out.println() ;
B b = new B() ; b.affiche() ;
B b = new B() ; b.f(bb) ; a.f(x) ; System.out.println() ;
a = b ; a.affiche() ; System.out.println() ;
C c = new C() ; c.f(bb) ; c.f(q) ; c.f(x) ; System.out.println() ;
C c = new C() ; c.affiche() ;
D d = new D() ; d.f(bb) ; c.f(q) ; c.f(y) ; System.out.println() ;
a = c ; a.affiche() ; System.out.println() ;
E e = new E() ; e.f(bb) ; e.f(q) ; e.f(y) ; System.out.println() ;
D d = new D() ; d.affiche() ;
F f = new F() ; f.f(bb) ; f.f(n) ; f.f(x) ; f.f(y) ; f.f(p) ;
Page 15 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET
Soit les classes Point et PointNom ainsi définies : méthode identique fournisant toutes les deux la valeur true lorsque les
class Point deux points concernés ont à
{ public Point (int x, int y) { this.x = x ; this.y = y ; } la fois mêmes coordonnées et même nom. Quels résultats fournira alors
public static boolean identiques (Point a, Point b) le programme
{ return ( (a.x==b.x) && (a.y==b.y) ) ; } précédent ? Quelles seront les conversions mises en jeu et les règles
public boolean identique (Point a) utilisées ?
{ return ( (a.x==x) && (a.y==y) ) ; }
private int x, y ;
}
class PointNom extends Point
{ PointNom (int x, int y, char nom)
{ super (x, y) ; this.nom = nom ; }
private char nom ;
}
1. Quels résultats fournit ce programme ? Expliciter les conversions
mises en jeu et les
règles utilisées pour traiter les différents appels de méthodes :
public class LimPoly
{ public static void main (String args[])
{ Point p = new Point (2, 4) ;
PointNom pn1 = new PointNom (2, 4, 'A') ;
PointNom pn2 = new PointNom (2, 4, 'B') ;
System.out.println (pn1.identique(pn2)) ;
System.out.println (p.identique(pn1)) ;
System.out.println (pn1.identique(p)) ;
System.out.println (Point.identiques(pn1, pn2)) ;
}
}
2. Doter la classe PointNom d’une méthode statique identiques et d’une
Page 17 sur 17