Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TD+TP Programmation Orientee Objet Fiche de TD Programmation Orienté Objet

Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

TD+TP PROGRAMMATION ORIENTEE OBJET

Fiche de TD Programmation Orienté Objet {


double x1 = 1e200,
x2 = 1e210 ;
1. Que fait le programme suivant ? double y, z ;
public class OpIncr y = x1*x2 ;
{ System.out.println ("valeur de y " + y) ;
x2 = x1 ;
public static void main(String[] args) z = y/(x2-x1) ;
{ System.out.println (y + " divise par " + (x2-x1) + " = " + z) ;
int i, j, n ; y = 15 ;
z = y/(x2-x1) ; ;
i = 0 ; n = i++ ; System.out.println (y + " divise par " + (x2-x1) + " = " +
System.out.println ("A : i = " + i + " n = " + n ) ; z) ;
i = 10 ; n = ++ i ; z = (x2-x1)/(x2-x1) ;
System.out.println ("B : i = " + i + " n = " + n ) ; System.out.println ((x2-x1) + " divise par " + (x2-x1) + " = " +
i = 20 ; j = 5 ; n = i++ * ++ j ; z) ;
System.out.println ("C : i = " + i + " j = " + j + " n = " + n ) ; System.out.println (z + "+1 = " + (z+1)) ;
i = 15 ; n = i += 3 ; System.out.println (x1 + "/" + x2 + " = " + z) ;
System.out.println ("D : i = " + i + " n = " + n) ; }
i = 3 ; j = 5 ; n = i *= --j ; }
System.out.println ("E : i = " + i + " j = " + j + " n = " + n) ;
} 3. Afficher les résultats des programmes suivant
}
public class CourCir
2. Résultat du programme {
public static void main (String args[])
public class Excep {
{ int i=10,
public static void main (String args[]) j=5 ;
Page 1 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET

if(i<5 && j++<10) System.out.println ("&&1 vrai") ; }


else System.out.println ("&&1 faux") ; }
System.out.println ("i = " + i + " j = " + j) ;
if (i<5 & j++<10)
System.out.println ("& vrai") ;
Écrire un programme réalisant la même chose en employant à la place
else System.out.println ("& faux") ;
de l’instruction for :
System.out.println ("i = " + i + " j = " + j) ;
1. Une instruction while,
if (i<15 && j++<10) System.out.println ("&&2 vrai") ;
2. Une instruction do... while.
else System.out.println ("&&2 faux") ;
System.out.println ("i = " + i + " j = " + j) ;
if (i<15 || j++<10) System.out.println ("|| vrai") ;
else System.out.println ("|| faux") ;
System.out.println ("i = " + i + " j = " + j) ;
}
} 5.
Quels résultats fournit le programme suivant ?
4.
public class ExoII6
{ public static void main(String[] args)
public class ExoII4a { int n, p ;
{ public static void main(String[] args) n=0;
{ int i, n, som ; while (n<=5) n++ ;
som = 0 ; System.out.println ("A : n = " + n) ;
for (i=0 ; i<4 ; i++) n=p=0;
{ System.out.println ("donnez un entier ") ; while (n<=8) n += p++ ;
n = Clavier.lireInt() ; System.out.println ("B : n = " + n) ;
som += n ; n=p=0;
} while (n<=8) n += ++p ;
System.out.println ("Somme : " + som) ; System.out.println ("C : n = " + n) ;

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

donnez un nombre positif : 5


sa racine carree est : 2.23606797749979
donnez un nombre positif : 0 11.

9. Que fournit le programme suivant ?


class A
Écrire un programme calculant la somme des n premiers termes de la { public A (int coeff)
"série harmonique", { nbre *= coeff ;
c’est-à-dire la somme : nbre += decal ;
1 + 1/2 + 1/3 + 1/4 + ..... + 1/n }
La valeur de n sera lue en donnée. public void affiche ()
{ System.out.println ("nbre = " + nbre + " decal = " + decal) ;
10. }
private int nbre = 20 ;
private int decal ;
Réaliser une classe Point permettant de représenter un point sur un axe.
}
Chaque point
public class InitChmp
sera caractérisé par un nom (de type char) et une abscisse (de type
{ public static void main (String args[])
double). On prévoira :
{ A a = new A (5) ; a.affiche() ;
• un constructeur recevant en arguments le nom et l’abscisse d’un point,
}
• une méthode affiche imprimant (en fenêtre console) le nom du point et
}
son abscisse,
• une méthode translate effectuant une translation définie par la valeur
de son argument. 12.
Écrire un petit programme utilisant cette classe pour créer un point, en
afficher les caractéristiques, le déplacer et en afficher à nouveau les Quelle erreur a été commise dans cette définition de classe ?
caractéristiques. class ChCt
{ public ChCt (float r)

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

deux méthodes d’accès nommées abscisse et ordonnee fournissant }


respectivement l’abscisse et l’ordonnée d’un point. Adapter la méthode }
main en conséquence.

15. L
16.

Quelles erreurs ont été commises dans la définition de classe suivante et


dans son Créer une classe permettant de manipuler un point d’un axe, repéré par
utilisation ? une abscisse (de
class A type int). On devra pouvoir effectuer des changements d’origine, en
{ static int f (int n) conservant en permanence l’abscisse d’une origine courante
{q=n; (initialement 0). On prévoira simplement les
} méthodes suivantes :
void g (int n) • constructeur, recevant en argument l’abscisse "absolue" du point
{q=n; (c’est-à-dire repérée
p=n; par rapport au point d’origine 0 et non par rapport à l’origine courante),
} • affiche qui imprime à la fois l’abscisse de l’origine courante et
static private final int p = 20 ; l’abscisse du point par
private int q ; rapport à cette origine,
} • setOrigine qui permet de définir une nouvelle abscisse pour l’origine
public class EssaiA (exprimée de
{ public static void main (String args[]) façon absolue et non par rapport à l’origine courante),
{ A a = new A() ; int n = 5 ; • getOrigine qui permet de connaître l’abscisse de l’origine courante.
a.g(n) ; Ecrire un petit programme de test fournissant les résultats suivants :
Point a - abscisse = 3
relative a une origine d'abscisse 0
a.f(n) ;
Point b - abscisse = 12
f(n) ;

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

f(n, y) ; private double x ; // abscisse


} private double y ; // ordonnee
} }

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

{ a.setn (a.getn()+p); private double x, y ;


} }
public static void incre (int n, int p) En ajoutant les fonctionnalités nécessaires à la classe Point, réaliser une
{ n += p ; classe Segment
} permettant de manipuler des segments d’un plan et disposant des méthodes
public class Trans suivantes :
{ public static void main (String args[]) segment (Point origine, Point extremite)
{ A a = new A(2) ; segment (double xOr, double yOr, double xExt, double yExt)
int n = 2 ; double longueur() ;
System.out.println ("valeur de a avant : " + a.getn()) ; void deplaceOrigine (double dx, double dy)
Util.incre (a, 5) ; void deplaceExtremite (double dx, double dy)
System.out.println ("valeur de a apres : " + a.getn()) ; void affiche().
System.out.println ("valeur de n avant : " + n) ;
Util.incre (n, 5) ; 24.
System.out.println ("valeur de n apres : " + n) ;
}}
Écrire un programme qui crée un tableau comportant les valeurs des
carrés des n premiers
nombres impairs, la valeur de n étant lue au claviera et qui en affiche les
23.
valeurs sous la
forme suivante :
On dispose de la classe Point suivante permettant de manipuler des points combien de valeurs : 5
d’un plan. 1 a pour carre 1
class Point 3 a pour carre 9
{ public Point (double x, double y) { this.x = x ; this.y = y ; } 5 a pour carre 25
public void deplace (double dx, double dy) { x += dx ; y += dy ; } 7 a pour carre 49
public void affiche () 9 a pour carre 81
{ System.out.println ("coordonnees = " + x + " " + y ) ;
} 25.
Page 9 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.

System.out.print ("t1 = ") ;


for (int i=0 ; i<t1.length ; i++) System.out.print (t1[i]) ; Quels résultats fournit le programme suivant ?
System.out.println () ; public class Tab2Ind1
System.out.print ("t2 = ") ; { public static void main (String args[])
for (int i=0 ; i<t2.length ; i++) System.out.print (t2[i]) ; { int [] [] t = new int [3][] ;
System.out.println () ; for (int i=0 ; i<3 ; i++)
System.out.print ("t3 = ") ; { t[i] = new int [i+1] ;
for (int i=0 ; i<t3.length ; i++) System.out.print (t3[i]) ;
for (int j=0 ; j<t[i].length ; j++)
System.out.println () ;
t[i][j] = i+j ;
}
}
}
for (int i=0 ; i<3 ; i++)
{ System.out.print ("tableau numero " + i + " = ") ;
29.
for (int j=0 ; j<t[i].length ; j++)
System.out.print (t[i][j] + " ") ;
Écrire une classe utilitaire UtilTab disposant des méthodes statiques System.out.println () ;
suivantes : }
• genere qui fournit en retour un tableau des n premiers nombres
}
impairs, la valeur de n
}
étant fournie en argument
• somme qui reçoit en argument deux vecteurs d’entiers de même taille
et qui fournit en 31.

retour un tableau représentant la somme de ces deux vecteurs.


Écrire un petit programme d’essai. Pour faciliter les choses, on pourra Réaliser une classe Vecteur permettant de manipuler des vecteurs
également doter la ayant un nombre quelconque de composantes de type double. On y
classe UtilTab d’une méthode d’affichage des valeurs d’un tableau de prévoira :
réels. • un constructeur Vecteur (int n), n représentant le nombre de
composantes qui seront
Page 11 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET

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

type PointNom. On dispose de la classe suivante :


Écrire un petit programme utilisant la classe PointNom. class Point
{ public Point (int x, int y) { this.x = x ; this.y = y ; }
34. public void affiche()
{ System.out.println ("Coordonnees : " + x + " " + y) ;
}
On dispose de la classe suivante (disposant cette fois d’un constructeur)
private int x, y ;
:
}
class Point
Réaliser une classe PointNom, dérivée de Point permettant de manipuler
{ public Point (int x, int y) { this.x = x ; this.y = y ; }
des points définis
public void affCoord()
par leurs coordonnées et un nom (caractère). On y prévoira les méthodes
{ System.out.println ("Coordonnees : " + x + " " + y) ;
suivantes :
}
• constructeur pour définir les coordonnées et le nom d’un objet de type
private int x, y ;
PointNom,
}
• affiche pour afficher les coordonnées et le nom d’un objet de type
Réaliser une classe PointNom, dérivée de Point permettant de manipuler
PointNom.
des points définis
par leurs coordonnées (entières) et un nom (caractère). On y prévoira les
36.
méthodes
suivantes :
• constructeur pour définir les coordonnées et le nom d’un objet de type Quels résultats fournit ce programme ?
PointNom, class A
• affCoordNom pour afficher les coordonnées et le nom d’un objet de {
type PointNom. public A (int nn)
Écrire un petit programme utilisant la classe PointNom. { System.out.println ("Entree Constr A - n=" + n + " p=" + p) ;
n = nn ;
35. System.out.println ("Sortie Constr A - n=" + n + " p=" + p) ;
}
public int n ; // ici, exceptionnellement, pas d'encapsulation
Page 13 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET

public int p=10 ; }


} class B extends A { }
class B extends A class C extends A
{ public B (int n, int pp) { public void affiche()
{ super (n) ; { System.out.println ("Je suis un C") ;
System.out.println ("Entree Constr B - n=" + n + " p=" + p + " q=" }
+ q) ; }
p = pp ; class D extends C
q = 2*n ; { public void affiche()
System.out.println ("Sortie Constr B - n=" + n + " p=" + p + " q=" { System.out.println ("Je suis un D") ;
+ q) ; }
} }
public int q=25 ; class E extends B {}
} class F extends C {}
public class TstInit public class DiagHeri
{ public static void main (String args[]) { public static void main (String arg[])
{ A a = new A(5) ; { A a = new A() ; a.affiche() ;
B b = new B(5, 3) ; B b = new B() ; b.affiche() ;
} C c = new C() ; c.affiche() ;
} D d = new D() ; d.affiche() ;
E e = new E() ; e.affiche() ;
37. F f = new F() ; f.affiche() ;
}
Quels résultats fournit le programme suivant ? }
class A
{ public void affiche() 38.
{ System.out.println ("Je suis un A") ;
}

Page 14 sur 17
TD+TP PROGRAMMATION ORIENTEE OBJET

Quels résultats fournit le programme suivant ? }


class A }
{ public void f(double x) { System.out.print ("A.f(double=" + x +")
") ; } 39.
}
class B extends A {}
Quels résultats fournit le programme suivant ?
class C extends A
class A
{ public void f(long q) { System.out.print ("C.f(long=" + q + ") ") ; }
{ public void affiche() { System.out.print ("Je suis un A ") ; }
}
}
class D extends C
class B extends A {}
{ public void f(int n) { System.out.print ("D.f(int=" + n + ") ") ; }
class C extends A
}
{ public void affiche() { System.out.print ("Je suis un C ") ; }
class E extends B {}
}
class F extends C
class D extends C
{ public void f(float x) { System.out.print ("F.f(float=" + x + ") ") ; }
{ public void affiche() { System.out.print ("Je suis un D ") ; }
public void f(int n) { System.out.print ("F.f(int=" + n + ") ") ; }
}
}

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

a = d ; a.affiche() ; { public void f(float x) { System.out.print ("F.f(float=" + x + ") ") ; }


c = d ; c.affiche() ; System.out.println() ; public void f(int n) { System.out.print ("F.f(int=" + n + ") ") ; }
E e = new E() ; e.affiche() ; }
a = e ; a.affiche() ; public class PolySur
b = e ; b.affiche() ; System.out.println() ; { public static void main (String arg[])
F f = new F() ; f.affiche() ; { byte bb=1 ; short p=2 ; int n=3 ; long q=4 ;
a = f ; a.affiche() ; float x=5.f ; double y=6. ;
c = f ; c.affiche() ; System.out.println ("** A ** ") ;
} A a = new A() ; a.f(bb) ; a.f(x) ; System.out.println() ;
} System.out.println ("** B ** ") ;
Certaines possibilités d’affectation entre objets des types classes A, B, B b = new B() ; b.f(bb) ; b.f(x) ; System.out.println() ;
C, D, E et F ne figurent pas dans le programme ci-dessus. Pourquoi ? a = b ; a.f(bb) ; a.f(x) ; System.out.println() ;
System.out.println ("** C ** ") ;
40. C c = new C() ; c.f(bb) ; c.f(q) ; c.f(x) ; System.out.println() ;
a = c ; a.f(bb) ; a.f(q) ; a.f(x) ; System.out.println() ;
System.out.println ("** D ** ") ;
Quels résultats fournit le programme suivant ?
D d = new D() ; d.f(bb) ; c.f(q) ; c.f(y) ; System.out.println() ;
class A
a = c ; a.f(bb) ; a.f(q) ; a.f(y) ; System.out.println() ;
{ public void f(double x) { System.out.print ("A.f(double=" + x +")
System.out.println ("** F ** ") ;
") ; }
F f = new F() ; f.f(bb) ; f.f(n) ; f.f(x) ; f.f(y) ;
}
System.out.println() ;
class B extends A {}
a = f ; a.f(bb) ; a.f(n) ; a.f(x) ; a.f(y) ; System.out.println() ;
class C extends A
c = f ; c.f(bb) ; c.f(n) ; c.f(x) ; c.f(y) ;
{ public void f(long q) { System.out.print ("C.f(long=" + q + ") ") ; }
}
}
}
class D extends C
{ public void f(int n) { System.out.print ("D.f(int=" + n + ") ") ; }
41.
}
class F extends C
Page 16 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

You might also like