Vous êtes sur la page 1sur 5

Atelier POO

Rappel
Dans une classe, l'accs aux membres hrits masqus peut se faire en utilisant le mot cl
super.
Une rfrence de type C peut contenir des instances de la classe C et de toute classe drivant
de C (sous-typage).
Le transtypage d'une rfrence permet d'accder la variable d'instance de la classe
"concerne".
Le transtypage d'une rfrence ne permet pas d'accder la mthode de la classe
"concerne".
Une variable d'instance masque utilise dans une classe est celle "connue" statiquement.
Une mthode masquable (ni final, ni private) utilise dans une classe n'est "connue" que
dynamiquement (comme les mthodes virtual de C++).
appel de mthodes : La recherche de mthode se dcompose en trois phases :
la compilation, le type dclar A de la rfrence sur laquelle est appele la mthode est
dtermin.
la compilation, dans la classe A la mthode accessible dont le profil (type des paramtres)
est le plus prcis compatible avec les arguments est dtermine (ambigut possible).
Dynamiquement, la mthode dtermine statiquement est recherche en fonction de la classe
relle de l'objet rfrenc.

Questions
1- Justifiez pourquoi la validit du polymorphisme n'est pas vrifie statiquement par le
compilateur.
Exercice 1
class A{
void m(A a){ System.out.println (m de A );}
void n(A a){ System.out.println (n de A );}
}
class B extends A{
void m(A a){ System.out.println (m de B );}
void n(B b){ System.out.println (n de B );}
public static void main( String [ ] argv ){

1
A a = new B( ) ;
B b = new B( ) ;
a.m(b ) ;
a.n(b ) ;
}}

Prciser et argumenter laffichage de ce programme.


Exercice 2
1- Le programme Java suivant est-il correct ?
class Truc {
public Truc() { System.out.println ( ++ normal ); }
public Truc(Truc t) { System.out.println ( ++ copie ); }
public static void main(String args[]) {
Truc x;
Truc y = x;
} }

2- Mme question en supprimant la ligne Truc y = x; Quelle est la sortie du programme ?


3- Donner la sortie du programme C++ suivant et commenter trs brivement.
#include <iostream.h>
class Truc { public :
Truc() { cout << ++ normal << endl ; }
Truc(Truc & t) { cout << ++ copie << endl ; }
} ;
void main() {
Truc x;
Truc y = x;
}

Exercice 3
Soient les classes suivantes:
class Personne {
public void parler() {
System.out.println("P");
}}
class Adulte extends Personne{
public void parler() {
System.out.println("Bonjour tout le monde!");
}}
class AdulteDistinguee extends Adulte {
public void parler() {
System.out.println("Mes chers amis, bonjour!");
}}
class Jeune extends Personne { }
class Adolescent extends Jeune {
public void parler() {
System.out.println("salut les mecs!");
}}
class Enfant extends Jeune { }
class Bebe extends Enfant {
public void parler() {
System.out.println("Je ne suis pas un bebe!");
}}
class BebePlus extends Bebe {

2
public void parler() {
System.out.println("Ahhaaa!");
}}

1- Donner ce qui est affich par le programme suivant:


public static void main(String [] args) {
Personne P1 = new Personne(); Personne P2 = new AdulteDistinguee();
Adulte P3 = new AdulteDistinguee(); Personne P4 = new Bebe();
Jeune P5 = new Ado(); Enfant P6 = new BebePlus();
BebePlus P7 = new BebePlus(); Enfant P8 = new Bebe();
P1.parler(); P2.parler(); P3.parler(); P4.parler(); P5.parler();
P6.parler(); P7.parler(); P8.parler();
}

2- On effectue les affectations suivantes (ces affectations sont indpendantes les unes des
autres, elles ne sont pas excutes en squence!). Pour chaque affectation, dites si elle
fonctionne sans erreur, si elle provoque une erreur la compilation ou si elle provoque
une erreur l'excution. Si il y a une erreur expliquez (rapidement) pourquoi.
P1 = P2; P4 = P1; P3 = P4; P3 = P1; P4 = P5; p7 = p6;
p7 = (BebePlus)p4;
p6 = (Bebe) p4;
p3 = (AdulteDistingue) p2;
p8 = (Bebe)p5;

3- On cre un tableau d'enfants de la manire suivante:


Jeune[] e = new Jeune[4];

Que faut il faire pour que les affectations suivantes soient toutes valides ( la compilation et
l'excution).

e[0] = p4; e[1] = p5; e[2] = p6; e[3] = p7; e[4] = p8;

Exercice 4
Lobjectif de cet exercice est dcrire une application qui gre le stock d'un magasin. La
description du problme en terme des classes et des interfaces est la suivante :
Trois interfaces
Vendable par kilogramme: l'interface pour les produits qui se vendent par kilogramme
Mthodes:
vendre: cette mthode reoit la quantit vendue du produit, retourne le revenu du magasin et
modifie le stock
Vendable par pice: l'interface pour les produits qui se vendent par pices
Mthodes:
vendre: cette mthode reoit la quantit vendue du produit, retourne le revenu du magasin et
modifie le stock
Susceptible d'tre vendu en solde
Mthodes:
lancer le solde: cette mthode baisse le prix du produit par le pourcentage donn
terminer le solde: cette mthode augmente le prix du produit par le pourcentage donn

3
On aura une classe gnrale des Articles.
Attributs:
prix d'achat: le prix pour lequel le supermarch achte le produit
prix de vente: le prix pour lequel le supermarch vend le produit
nom: le nom du produit
fournisseur: le nom du fournisseur du produit
Mthodes (autre que le constructeur):
calculateur du taux du rendement
description des caractristiques du produit sur l'cran (les prix, le nom, le fournisseur;
rendement)
Cette classe n'implmente aucune interface.
Deux classes drives des Articles
Chaque classe drive des article respecte la rgle suivante: au moment de la
construction de l'objet, le stock est vide.
La classe des artciles lcromnagers
Attributs suplmentaires:
nombre de pices en stock
Mthodes supplmentaires (autre que le constructeur):
remplir le stock
description des caractristiques du produit sur l'cran (les prix, le nom, le fournisseur;
rendement; stock)
Il faut implmenter les interfaces correspondantes cette classe.

La classe des primeurs


Attributs supplmentaires:
quantit en stock
Mthodes supplmentaires:
remplir le stock
description des caractristiques du produit sur l'cran (les prix, le nom, le
fournisseur; rendement; stock)
Il faut implmenter les interfaces correspondantes cette classe, sachant que les
primeurs ne peuvent pas tre vendu en solde.
Une classe pour les magasins
Attributs:
Dpenses: le cot d'achat des produits
Revenus: les revenus aprs la vente des produits
Produits: deux tableaux de deux articles (lctromnagers et primeurs)
Mthodes (autre que le constructeur):
description de l'tat du magasin
calculateur du taux de rendement

Travail demand
1- Coder les interfaces et les classes.
2- Crer une classe de test qui cre un magasin, dfinit les articles vendre, effectue le
remplissage du stock et effectue des achats.

4
Exercice 5
Pour la gestion dune bibliothque on nous demande dcrire une application traitant des
documents de natures diverses : des livres, qui peuvent tre des romans ou des manuels, des
revues et des dictionnaires. Tous les documents ont un numro denregistrement (un entier) et
un titre (une chane de caractres). Les livres ont, en plus, un auteur (une chane) et un
nombre de pages (un entier). Les romans ont ventuellement un prix littraire (un entier),
tandis que les manuels ont un niveau scolaire (un entier). Les revues ont un mois et une anne
(des entiers) et les dictionnaires ont une langue (une chane de caractres).
Dans chacune de ces classes dfinissez
le constructeur qui prend autant arguments quil y a de variables dinstance et qui se
limite initialiser ces dernires avec les valeurs des arguments,
dfinissez galement des accesseurs publics permettant de consulter les valeurs de
ces variables.
Une bibliothque sera reprsente par un tableau de documents. Dfinissez une classe
Bibliotheque, avec un tel tableau pour variable dinstance et les mthodes :
Bibliotheque(int capacit) - constructeur qui cre une bibliothque ayant la capacit
(nombre maximum de documents) indique,
void afficherDocuments() - affiche tous les ouvrages de la bibliothque,
Document document(int i) - renvoie le ime document,
boolean ajouter(Document doc) - ajoute le document indiqu et renvoie true (false en
cas dchec),
boolean supprimer(Document doc) - supprime le document indiqu et renvoie true
(false en cas dchec)
void afficherAuteurs() - affiche la liste des auteurs de tous les ouvrages qui ont un
auteur.

Vous aimerez peut-être aussi