Vous êtes sur la page 1sur 4

ère

École Nationale Supérieure 2 Année CPI- Programmation


d'Informatique de Sidi Bel Abbes Orientée Objet

Fiche de TD/TP N°2- Classes et objets :


Constructeur, Encapsulation, Surdéfinition, Modélisation

Exercice 1 : Ecrivez une classe Point qui permet de représenter un point sur un plan. Chaque point est
caractérisé par un nom (String), une abscisse x (float) et une ordonnée y (float). Tous les champs de la classe
sont publics.
1. Ajouter un constructeur permettant d’initialiser tous les champs d’un objet Point (constructeur
exhaustif).
2. Ajouter une méthode String toString() retournant la description d’un point.
3. Ajouter une méthode double distance(Point p) calculant la distance du point “this” au point p.
4. Ajouter une méthode boolean equals(Point p) qui permet de comparer le point “this” avec autre point p.
5. Ajouter une méthode void deplacer(double dx, double dy) qui translate le point de dx sur les abscisses et
de dy sur les ordonnées.
6. Créer une classe exécutable TestePoint implémentant la méthode main().
7. Utiliser la classe Point en créant deux objets, et en afficher les caractéristiques. Les valeurs des champs
sont entrées par l’utilisateur
8. Déplacer ces deux points dans le plan, calculer leur distance, et en afficher à nouveau.
9. Maintenant, supposons que les champs de la classe Point sont privés. Ajouter l’ensemble des méthodes
(Accesseurs et Modificateurs) qui constituent l’interface d’encapsulation de la classe Point.
10. Changer le modificateur du champ nom : il ne devra changer le nom d’un point que si on lui passe en
paramètre une chaine de caractère commençant par une lettre.
11. Reprogrammer la classe Point en surchargeant :
 Le constructeur : ajouter deux autres constructeurs (sans arguments et un constructeur recevant en
arguments uniquement les coordonnées d'un point).
 La méthode deplacer : ajouter quatre autres méthodes en modifiant le type, et le nombre des
paramètres, ainsi que le type de retour.
12. Ajouter un champ int Ident qui permet d’attribuer un numéro unique à chaque nouvel objet créé (1 au
premier, 2 au suivant...). On ne cherchera pas à réutiliser les numéros d’objets éventuellement détruits.
13. Ajouter une méthode getIdent fournissant le numéro attribué à l’objet
14. Ajouter une méthode getIdentMax fournissant le numéro du dernier objet créé.
15. Dans la classe exécutable TestePoint, ajouter un tableau pour enregistrer l’ensemble des objets crées.

Exercice 2 : Un cercle est défini par un point (Point) correspondant à son centre, et un rayon.
1. Reprendre la classe Point de l’exercice précédent.
2. Écrire la classe Cercle ainsi que son constructeur.
3. Ajouter la méthode toString qui affiche le centre et le rayon.
4. Ajouter la méthode equals(Cercle c) qui renvoie vrai si deux cercles ont le même centre et le même rayon.
6. Ajouter la méthode contains(Point p) qui renvoie vrai si un point p est contenu dans un cercle.
7. Qu'affiche le code suivant, expliquez.
Point p=new Point(1,2); Cercle c=new Cercle(p,1); Cercle c2=new Cercle(p,2);

Dr. MALKI Abdelhamid 2ème Année CPI- POO


a.malki@esi-sba.dz
c2.centre.deplace(1,1); System.out.println(c+' '+c2);
8. Ecrire une classe Test permettant de tester tous les comportements du cercle et du point.

Exercice 3 :
Que fournit le programme suivant ? Quels résultats fournit ce programme ?
class Entier{ class A{
private int n ; private int n ;
public Entier (int nn) { n = nn ; } public A (int nn){n = nn ;}
public void incr (int dn) { n += dn ; } public int getn (){ return n ;}
public void imprime () { System.out.println (n) ; } public void setn (int nn){ n = nn ;}
} }
public class TstEnt{ class Util{
public static void main (String args[]){ public static void incre (A a, int p)
Entier n1 = new Entier (2); { a.setn(a.getn()+p);}
System.out.print ("n1 = ") ; n1.imprime() ; public static void incre (int n, int p)
{ n += p ;}
Entier n2 = new Entier (5) ; }
System.out.print ("n2 = ") ; n2.imprime() ; public class Trans{
n1.incr(3) ; public static void main (String args[]){
System.out.print ("n1 = ") ; n1.imprime() ; A a = new A(2) ; int n = 2 ;
System.out.println ("n1 == n2 est " + (n1 == n2)) ; System.out.println ("valeur de a avant:"+a.getn());
n1 = n2 ; n2.incr(12) ; Util.incre (a, 5) ;
System.out.print ("n2 = ") ; n2.imprime() ; System.out.println ("valeur de a apres:"+a.getn()) ;
System.out.print ("n1 = ") ; n1.imprime() ; System.out.println ("valeur de n avant:" +n) ;
System.out.println ("n1 == n2 est " + (n1 == n2)) ; Util.incre (n, 5) ;
}} System.out.println ("valeur de n apres : " + n) ;
}}

Exercice 4 : On s’intéresse à la gestion des notes des étudiants inscrits dans une formation. Une formation est
caractérisée par son code, son nom, ses étudiants (200 étudiants au maximum), et le nombre des étudiants
inscrits. Un étudiant est caractérisé par les informations suivantes : un numéro, un nom, un prénom, et un
ensemble de 4 notes que vous pouvez mettre sous forme de tableau. Chaque note correspond à un module qui a
un nom, la note qui a eu l’étudiant dans ce module, et un coefficient
1. Proposer une modélisation orientée objet à ce problème (Donner les classes, leurs attributs et leurs
méthodes) sous forme d’un schéma, en précisant les relations entre les classes.
2. Définissez le code des classes Formation, Etudiant, et Module en les dotant des propriétés
précédentes.
3. Ajouter deux constructeurs pour chaque classe (sans argument et constructeur avec arguments).
4. Pour la classe Etudiant, les numéros sont attribués lors de la création de l’objet.
5. Tous les champs sont privés, par conséquent il faut mettre en place l’interface d’encapsulation de
chaque classe (les getters et les setters)
6. Dans la classe Etudiant :
 Ajouter une méthode qui calcule la moyenne d’un étudiant.

Dr. MALKI Abdelhamid 2ème Année CPI- POO


a.malki@esi-sba.dz
 Une méthode qui affiche les données suivantes : nom, liste des notes avec les intitulés des
modules correspondant, et enfin la moyenne des notes. Voici un exemple d’édition à obtenir :
 Numéro d’inscription :150
 Nom et Prénom de l’étudiant : Ali Djamel
 notes : [Algorithme :11.0] [Architecture :13.0] [Analyse:14.0] [Logique :7.0]
 moyenne générale : 12.25

7. Dans la classe Formation:


 Ajouter une méthode void ajouter(Etudiant e) permettant d’ajouter un étudiant dans la
formation.
 Ajouter les différentes méthodes permettant de retrouver un étudiant soit à partir de son
numéro, soit à partir de son nom et prénom.
 Ajouter une méthode retournant l’ensemble des étudiants admis. Un étudiant est admis si sa
moyenne générale est >=10, et n’a pas de notes éliminatoires (note<5)
 Ajouter une méthode retournant l’ensemble des étudiants exclus (non admis).
 Ajouter une méthode retournant le major de promo
 void affiche() : pour afficher tous les étudiant inscrits dans la formation

8. Vous ferez une classe exécutable TesteFormation qui testera les trois classes et les différentes
méthodes. Voici le squelette de cette classe.

public class TesteFormation {

public static void main(String args[]) {

Formation f=new Formation(“CPI2_2016”,”classe préparatoire intégrée d’informatique ”);

Module m1=new Module(“Algorithme”,11.0,5); Module m2=new Module(“Architecture”,13.0,4);


Module m3=new Module(“Analyse”,14.0,5); Module m4=new Module(“Logique”,7.0,4);

Module[] notes={m1,m2,m3,m4};

Etudiant E=new Etudiant(“Ali”,”Djamel”,notes);

f.ajouter(E);

Module[] notes2={new Module(“Algorithme”,12.0,5), new Module(“Architecture”,19.0,4), new


Module(“Analyse”,4.0,5), new Module(“Logique”,12.0,4)};

f.ajouter(new Etudiant(“Karim”,”Rachid”,notes2));

…}}

Exercice 5 – Listes chaînées

Une liste chaînée est une suite d’éléments. Chaque élément est connecté à l’élément qui le précède
dans la liste (s’il existe) ainsi qu’à l’élément qui le suit dans la liste (s’il existe). Ici, chaque élément va
également contenir un entier.
1. Écrivez une classe Element représentant un élément d’une liste chaînée.
2. Ajouter un constructeur qui permet de connecter l’élément et d’initialiser la valeur qu’il contient.

Dr. MALKI Abdelhamid 2ème Année CPI- POO


a.malki@esi-sba.dz
3. Écrivez une classe List qui possède un attribut contenant la tête de la liste ou null si la liste ne
possède pas d’élément.
4. Ajouter une méthode void addFirst(int value) qui ajoute un élément contenant la valeur value en
tête de liste.
5. Ajouter une méthode void addLast(int value) qui ajoute un élément contenant la valeur value en
queue de liste.
6. Ajouter une méthode boolean contains(int value) qui retourne true si la liste contient la valeur
value et false dans le cas contraire.
7. Ajouter une méthode void remove(int value) qui permet de supprimer le premier élément de la liste
qui contient la valeur value.

Exercice 6 :
1. Reprendre l’exercice 4 en stockant les étudiants dans une liste chaînée, ce qui va nous
permettre de gérer un nombre illimité d’étudiants.
2. Modifier la modélisation en créant un lien entre la classe Formation et la classe Module, c-à-d
une formation propose des modules d’enseignement.

Dr. MALKI Abdelhamid 2ème Année CPI- POO


a.malki@esi-sba.dz

Vous aimerez peut-être aussi