Vous êtes sur la page 1sur 9

PROGRAMMATION ORIENTEE OBJETS

Un recueil d’exercices sous forme


de travaux dirigés

Martial NGONO
ASSISTANT aux Départements de GET – GIM / ENSP Yaoundé

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 1|Page


TRAVAUX DIRIGES N°1

Exercice 1.1:
Voici la source de la classe Livre :

public class Livre {


// Variables
private String titre, auteur; private int nbPages

// Constructeur
public Livre(String unAuteur, String unTitre) { auteur = unAuteur; titre = unTitre;
}
// Accesseur
public String getAuteur() {

return auteur;

// Modificateur
void setNbPages(int n) {
nbPages = nb;

a- Corrigez quelques petites erreurs


b- ajoutez une méthode main() pour Créer 2 livres, Faire afficher les auteurs de ces 2 livres.

Exercice 1.2:

Accesseurs et modificateurs

1) Modifiez la classe Livre :

- Ajoutez un accesseur pour la variable titre et la variable nbPages.


- Ajoutez un modificateur pour les variables auteur et titre.
- Changez le modificateur de nbPages : il ne devra changer le nombre de pages que si
on lui passe en paramètre un nombre positif, et ne rien faire sinon, en affichant un
message d'erreur.

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 2|Page


2) Dans la méthode main(),

a) indiquez le nombre de pages de chacun des 2 livres,


b) faites afficher ces nombres de pages,

c) calculez le nombre de pages total de ces 2 livres et affichez-le.

Exercice 1.3:

1) Dans La classe Livre, ajoutez une méthode afficheToi() qui affiche une description du livre

(auteur, titre et nombre de pages).

2) Ajoutez une méthode toString() qui renvoie une chaîne de caractères qui décrit le livre.

Modifiez la méthode afficheToi() pour utiliser toString(). Voyez ce qui est affiché

maintenant par l'instruction System.out.println(livre).

3) Ajoutez 2 constructeurs pour avoir 3 constructeurs dans la classe :


- Un constructeur qui n'a pas de paramètre

- Un qui prend en paramètre l'auteur et le titre du livre,

- et l'autre qui prend en plus le nombre de pages.

Utilisez les 3 constructeurs (et éventuellement d'autres méthodes) pour créer 3 livres de 300 pages

dans la méthode main() de la classe TestLivre.

Exercice 1.4 :
1) Contrôle des variables private par les modificateurs

a) Ajoutez un prix aux livres (nombre qui peut avoir 2 décimales ; type Java float ou double)

avec 2 méthodes getPrix et setPrix pour obtenir le prix et le modifier.

b) Ajoutez au moins un constructeur qui prend le prix en paramètre.

c) Testez. Si le prix d'un livre n'a pas été fixé, la description du livre (toString()) devra

indiquer "Prix pas encore fixé".

d) On bloque complètement les prix : un prix ne peut être saisi qu'une seule fois et ne peut

être modifié ensuite (une tentative pour changer le prix ne fait qu'afficher un message

d'erreur). Réécrivez la méthode setPrix (et autre chose si besoin est). Vous ajouterez une

variable booléenne prixFixe (pour "prix fixé") pour savoir si le prix a déjà été fixé.

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 3|Page


e) Réécrire la méthode main () et prévoir le deux cas (prix non fixé ou bien prix fixé plusieurs

fois) afficher le résultat de l’exécution.

Exercice 1.5 :

Réalisez un programme contenant une classe Point, avec ses trois coordonnées dans l’espace (x,y,z),

et que l’on peut initialiser de trois manières différentes (on connaît soit x ; soit x et y ; soit x et y et

z). Ensuite, intégrez dans la classe une méthode translate() qui est surchargée trois fois, dépendant

également de celles des trois valeurs des translations qui sont connues.

Créez deux objets de la classe Point et testez le bon fonctionnement du programme quand vous

translatez ces points.

Exercice 1.6 :

Considérez les deux classes suivantes : Interrupteur et Lampe, telles que, quand l’interrupteur

est allumé, la lampe s’allume aussitôt. Réalisez dans un pseudo-code objet le petit programme

permettant cette interaction.

Exercice 1.7 :

Réalisez un petit programme exécutant l’envoi de message entre deux objets, et ce lorsque les
deux classes dont ils sont issus entretiennent entre elles une relation de type « association », dans
le premier cas, et de « dépendance », dans le second.

Exercice 1.8 :

Écrivez un squelette de code réalisant un envoi de messages en cascade entre deux objets.

Exercice 1.9 :

Écrivez le code d’une classe s’envoyant un message à elle-même, d’abord lorsque ce message

n’implique qu’un seul objet, ensuite lorsque ce message en implique deux.

Exercice 1.10 :

Écrivez le code d’une classe A qui, lors de l’exécution de sa méthode jeTravaillePourA(), envoie le

message jeTravaillePourB() à une classe B.

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 4|Page


TRAVAUX DIRIGES N°2

Exercice 2.1: Gestion de comptes en banque

Une banque gère un ensemble de comptes de différents types : comptes courant, comptes

d’épargne… Les comportements et les caractéristiques liés à un compte sont à un niveau abstrait

fort similaires : chacun possède un propriétaire, un solde, un numéro, un taux d’intérêt : on y peut

déposer de l’argent, retirer de l’argent (s’il en reste suffisamment).

La banque propose également un système d’emprunts. Chaque emprunt est caractérisé par le

montant total à rembourser, la valeur des mensualités et le compte duquel les mensualités doivent

être débitées.

Le but de cet exercice consiste à créer une banque et à tenir à jour l’état des comptes en fonction des

retraits, des intérêts et des remboursements d’emprunts sur chaque compte.

Exercice 2.2

Réalisez un petit code qui stocke un attribut datecomme un entier et autorise sa lecture par les

autres classes uniquement comme un String.

Exercice 2.3

Si une classe contient 10 attributs, combien de méthodes d’accès à ses attributs vous

paraissent-elles nécessaires ?

Exercice 2.4

Réalisez une classe de type compte en banque, en y intégrant deux méthodes, l’une déposant

de l’argent, l’autre en retirant, et dont vous vous assurerez que l’attribut solde ne puisse jamais

être négatif.

Exercice 2.5

Dans la même classe que celle de l’exercice précédent, écrivez une méthode d’accès au solde,

qui retourne ce dernier comme un entier, alors qu’il est stocké comme un réel.

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 5|Page


TRAVAUX DIRIGES N°3
Exercice 3.1

Décrivez les différents modes d’encapsulation existant dans les langages POO et ordonnez-les, des

plus sévères au moins sévères.

Exercice 3.2

Voici quelques méthodes constitutives de la classe Voiture ; séparez les méthodes faisant partie de

l’interface de la classe de celles faisant partie de son implémentation : tourne, accélère, allumeBougie,

sortPiston, coinceRoue, changeVitesse, injecteEssenceDansCylindre.

Exercice 3.3

Comment une méthode déclarée private dans une classe sera-t-elle indirectement déclenchée par

une autre classe ?

Exercice 3.4

En quoi l’existence d’assemblage de classes peut-il compenser l’absence des relations d’amitié ?

Exercice 3.5

Pourquoi l’interface est-il tout ce qu’une classe B doit connaître d’une classe A, si elle désire

communiquer avec cette dernière ?

Exercice 3.6

L’organisateur du Paris-Dakar doit planifier à l’avance la consommation du carburant de tout le

convoi des véhicules qui participent à cette course: motos, camions, buggies, voitures, hélicoptères…

Tous ces véhicules consomment, mais différemment en fonction des kilomètres parcourus. Il est

capital de comprendre ici que c’est la manière de calculer la consommation qui diffère d’un véhicule

à l’autre. Si la seule différence se ramenait à une valeur, par exemple simplement la consommation

par kilomètre multipliée par la distance parcourue.

Réalisez un petit code qui stocke un attribut consommation du carburant.

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 6|Page


TRAVAUX DIRIGES N°4
Exercice 4.1

Écrivez le squelette de code dans le langage Java, correspondant au diagramme de classes dérivées

à partir de la classe Super suivant.

Exercice 4.2

Supprimez dans le code qui suit les lignes qui provoquent une erreur et indiquez si l’erreur se
produit à la compilation ou à l’exécution. Quel est le résultat de l’exécution qui s’affiche à
l’écran après suppression des instructions à problème ?
class A {
public void a() {
System.out.println("a de A")
;
}
public void b() {
System.out.println("b de A") ;
}
}
class B extends A
{ public void
b() {
System.out.println("b de B") ;
}
public void c() {
System.out.println("c de
B") ;
}

}
public class Correction2 {
public static void
main(String[]args) {
A a1=new A() ;

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 7|Page


A b1=new B();
B a2=new A();
B b2=new B();
a1.a() ;
b1.a() ;
a2.a() ;
b2.a() ;
a1.b() ;
b1.b() ;
a2.b() ;
b2.b() ;
a1.c() ;
b1.c() ;
a2.c() ;
b2.c() ;
((B)a1).c() ;
((B)b1).c() ;
((B)a2).c() ;
((B)b2).c() ;
}
}

Exercice 4.3

Que donne l’exécution du programme Java suivant ?


// fichier A.java
public class A {
public A() {}
}
// fichier B.java
public class B extends A {
public B() {
super();
}
public String toString() {
return(" Hello " + super.toString());
}
}
// fichier
testAB.java
public class
TestAB {
public
TestAB() {
A a = new
B();
System.out.println(a);
}
public static void main(String[]
args) { TestAB tAB = new
TestAB();
}
}

Exercice 4.4

Ci-après, vous trouverez en Java, un code d’une superclasse abstraite parce qu’elle contient une

méthode abstraite, ainsi que de deux sous-classes concrétisant cette méthode de deux manières

différentes. Quel résultat aurons-nous après l’exécution du programme?

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 8|Page


Exercice 4.5

Réalisez un code dans lequel une superclasse MoyenDeTransport contiendrait une méthode

consomme() abstraite, qu’il faudrait redéfinir dans les trois sous-classes Voiture, Moto, Camion.

Martial NGONO, ASSISTANT Département de GET –GIM / ENSP Yaoundé 9|Page