Université de Dschang: Fiche de TD N°1
INF 04 (Initiation à la POO) Année académique 07-08
Enseignant: Maurice Tchoupé T.
Exercice I:
Ecrivez la (ou les) bonne(s) réponse(s) pour les questions suivantes.
Répondez sur le modèle suivant :
(a) A1 et B1
(b) B2
(c) ne sais pas
(d) B4 et D4
Vous pouvez ne pas répondre à une des questions (vous écrivez "ne sais pas").
(a)
public class Entier {
private int i;
public Entier(int i) {
this.i = i;
}
public void setVal(int i) {
this.i = i;
}
public int getVal() {
return i;
}
public String toString() {
return i + "";
}
}
public class Main {
public static void main(String[] args) {
Entier i = new Entier(1);
Entier j = i;
j.setVal(2);
System.out.println(getVal());
}
}
Réponses possibles :
--------------------------------- 2/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji
(a)
public class Entier {
private int i;
public Entier(int i) {
this.i = i;
}
public void setVal(int i) {
this.i = i;
}
public int getVal() {
return i;
}
public String toString() {
return i + "";
}
}
public class Main {
public static void main(String[] args) {
Entier i = new Entier(1);
Entier j = i;
j.setVal(2);
System.out.println(getVal());
}
}
Réponses possibles :
A1. L'exécution de Main affiche 1
B1. L'exécution de Main affiche 2
C1. L'exécution de Main affiche autre chose que 1 ou 2.
(b)
public class A {
public void m() {
System.out.println("A");
}
}
public class B extends A {
public void m() {
System.out.println("B");
--------------------------------- 3/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji
}
}
public class Main {
public static void main(String[] args) {
A b = new B();
((A)b).m();
}
}
Réponses possibles :
A2. L'exécution de Main affiche A.
B2. L'exécution de Main affiche B.
C2. Ce code ne compile pas (indiquez la ligne en cause).
D2. Ce code compile mais provoque une erreur à l'exécution (indiquez la ligne
en cause).
(c)
public abstract class A {
public abstract int m();
public int n() {
return 2 * m();
}
}
Réponses possibles :
A3. La méthode n doit être déclarée abstraite.
B3. La méthode n ne doit pas être déclarée abstraite.
C3. On peut choisir de déclarer la méthode n abstraite ou pas abstraite.
Les 2 solutions sont bonnes.
Exercice II:
Le but de cet exercice est de proposer une modélisation orientée objets (Java)
d'un jeu de dames. Ne paniquez pas ! Il n'y a aucun piège. La solution que vous allez
développer sera forcément incomplète et imparfaite parce qu'il ne s'agit que de la
première phase de réflexion. Mais vous devez être capable de proposer rapidement
une modélisation raisonnable et cohérente. Il y a de nombreuses solutions
différentes possibles. . .
Les éléments que vous devez obligatoirement modéliser sont :
• Le damier : le plateau avec ses cases.
--------------------------------- 4/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji
• Les acteurs : joueurs et arbitres. Les arbitres vérifient que les déplacements
demandés par les joueurs respectent les règles et signalent les fins de
partie. Chaque acteur peut être humain ou automatique. Les joueurs
automatiques n'ont pas forcément tous la même stratégie.
• Les pièces : pions et dames.
• Le jeu lui-même : gestion des parties. Dans chaque partie, il y a deux joueurs
et un arbitre.
(a) Les classes
Proposer une liste de classes pertinentes pour ce jeu. Ne donnez pas la liste des
membres. Précisez pour chaque classe si elle est concrète, abstraite ou interface.
Précisez également toutes les relations d'héritage.
(b) Le code
Donnez le code complet de toutes les classes qui représentent les pièces.
Si vous n'avez pas plusieurs classes pour gérer les pièces, revenez un peu en arrière
pour corriger cela. . .
En donnant ce code, vous allez forcément être amené à appeler des membres de
classes de l'application dont vous n'avez pas fait le détail. Dans ces cas, ajoutez un
commentaire Java qui indique rapidement ce que représentent et réalisent ces
membres.
N'oubliez pas la JavaDoc des attributs et méthodes que vous écrivez.
(c) Les classifieurs de Java
En technologie orientée objets, on donne le nom de classifieurs aux différentes
sortes de classes. Par exemple, en Java, il y a de nombreuses sortes de classifieurs
dont les classes concrètes, les classes abstraites et les interfaces.
Citez d'autres sortes de classifieurs de Java.
Dans votre modélisation du jeu de dames, vous avez sans doute utilisé plusieurs
sortes de classifieurs. Expliquez quelles sont les différences entre les classes
concrètes, les classes abstraites et les interfaces et donnez les limitations
techniques de chacune (exemple : les classes concrètes ne peuvent pas contenir de
méthode abstraite). Utilisez, à chaque fois que possible, les
classifieurs de votre modélisation pour illustrer vos arguments et exemples.
Exercice III:
Définir une méthode principale qui construit un tableau d'objets T de quatre lignes
dont la ième ligne a i*i colonnes et T[i][j] contienne l'objet entier de valeur i+j*j. On
rappelle que la numérotation des lignes et colonnes commencent à partir de zero (0).
On utilisera la classe enveloppe Integer (Une classe enveloppe est une classe
--------------------------------- 5/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji
permettant d'encapsuler la valeur d'un type de base dans un objet. Ex: Interger,
Double, Short, Long, Byte ;..).
Exercice IV:
Déclarer une classe Etudiant, une classe Filiere, une classe Faculte, et une
classe Universite.
Pour chaque étudiant, on stocke son nom, son matricule, son niveau et sa
filière.
Pour chaque filière, on stocke son intitulé et la faculté qui la domicilie.
Pour chaque faculté, on stocke son intitulé et l'université qui la domicilie.
Pour chaque université on stocke son intitulé et le nombre d'étudiants.
1) Proposer une méthode de la classe Etudiant qui donne le nombre d'étudiants
de l'université d'un étudiant
2) Proposer une méthode de la classe Etudiant qui permet de dupliquer en
profondeur un objet de la classe Etudiant.
Exercice V:
Dire comment saisir compiler et exécuter le programme dont le code est donné ci-
dessous puis, donnez la sortie écran de son exécution:
public class MoyenDeTransport {
private String name;
private String type;
// "Le" constructeur vide, implicite en JAVA.
public MoyenDeTransport() {
/* this(0...N paramètres) , permet d'invoquer le constructeur selon son nombre
de paramètres */
this("default");
System.out.println("Constructeur avec 0 paramètres");
}
// Un 2nd constructeur avec 1 paramètre
public MoyenDeTransport(String pname) {
this(pname, "default");
--------------------------------- 6/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji
System.out.println("Constructeur avec 1 paramètres");
}
// Un 3nd constructeur avec 2 paramètres
public MoyenDeTransport(String pname, String ptype) {
// this : une référence sur l'objet courant
this.name = pname;
this.type = ptype;
System.out.println("Constructeur avec 2 paramètres");
/* Les accesseurs (getter ou setter ) permettent de modifier ou récupérer les
attributs d'une classe */
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class Test {
// La méthode Main :
// C'est une méthode spéciale, elle est utilisée lors de
// l'execution de la classe par la commande : java Test
public static void main(String[] args) {
--------------------------------- 7/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji
// On crée ici 3 instances de la classe MoyenDeTransport
MoyenDeTransport vehicule1 = new MoyenDeTransport();
MoyenDeTransport vehicule2 = new MoyenDeTransport("MERCEDES");
MoyenDeTransport vehicule3 = new MoyenDeTransport("CESNA","Avion");
// On affecte ici "RENAULT" à la propriété name de l'instance vehicule1
vehicule1.setName("RENAULT");
System.out.println(vehicule1.getName());
System.out.println(vehicule2.getName());
System.out.println(vehicule3.getType());
}
}
--------------------------------- 8/12
TDs INFO4, Année Académique 2007-2008
Responsable de l'UV: Maurice T. Tchendji