16
ISTA HAY RYAD TDI 2012/2013 Formatrice : BOUROUS Imane Programmation Orientée Objet Série dexercices Exercice 1 : Ecrivez une classe Livre avec les attributs suivants: titre, auteur, prix, annee. La classe Livre doit disposer des constructeurs suivants : Livre(), Livre(titre), Livre(titre, auteur), Livre(titre, auteur, prix), Livre(titre, auteur, prix, annee), Livre(Livre). La classe Livre doit contenir des accesseurs et mutateurs pour les différents attributs. La classe livre doit aussi contenir une méthode afficher() pour afficher les attributs des livres. Une méthode compter() pour avoir le nombre des instances créées et une méthode type() qui va prendre 1 si le prix de livre <100 et la valeur 2 si le 100<=prix< =500 et 3 si 500<prix. Ecrivez aussi un formulaire pour tester cette classe. Exercice 2 : Réaliser une classe Cercle. Chaque Cercle sera caractérisé par un nom (de type chaine) , un centre de type chaine , une abscisse (de type double) et l’ordonnée (de type double) et un rayon On prévoira : 1. un constructeur recevant en arguments le nom , le centre et l’abscisse et l’ordonne du centre, et le rayon. 2. une méthode affiche imprimant le nom du cercle le centre et son abscisse et ordonnée et le rayon , 3. Une méthode translate(dx, dy) effectuant une translation du centre qui fait changer l'abscisse (x + dx) et l'ordonnée (y+dy). 4. Une méthode pour calculer le périmètre() 5. Une méthode pour calculer la surface() 6. Une méthode nbcercles() pour afficher le nombre des cercles ayant le rayon < 10cm et le nombre des cercles dont le rayon>10cm Écrire un programme utilisant cette classe pour créer un cercle, en afficher les caractéristiques, afficher le périmètre et la surface. le déplacer avec dx=2 et d y=4 et en afficher à nouveau les caractéristiques. 1. Créer un cercle C de nom C, de centre O (9,4) et de rayon 12. 2. Changer le rayon à 13cm et afficher le nouveau rayon.

serie_POO

Embed Size (px)

Citation preview

Page 1: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Programmation Orientée Objet

Série d’exercices

Exercice 1 :

Ecrivez une classe Livre avec les attributs suivants: titre, auteur, prix, annee.

La classe Livre doit disposer des constructeurs suivants : Livre(), Livre(titre),

Livre(titre, auteur), Livre(titre, auteur, prix), Livre(titre, auteur, prix, annee),

Livre(Livre).

La classe Livre doit contenir des accesseurs et mutateurs pour les différents attributs.

La classe livre doit aussi contenir une méthode afficher() pour afficher les attributs

des livres. Une méthode compter() pour avoir le nombre des instances créées et une

méthode type() qui va prendre 1 si le prix de livre <100 et la valeur 2 si le

100<=prix< =500 et 3 si 500<prix.

Ecrivez aussi un formulaire pour tester cette classe.

Exercice 2 :

Réaliser une classe Cercle. Chaque Cercle sera caractérisé par un nom (de type chaine) , un

centre de type chaine , une abscisse (de type double) et l’ordonnée (de type double) et un

rayon On prévoira :

1. un constructeur recevant en arguments le nom , le centre et l’abscisse et l’ordonne du

centre, et le rayon.

2. une méthode affiche imprimant le nom du cercle le centre et son abscisse et ordonnée

et le rayon ,

3. Une méthode translate(dx, dy) effectuant une translation du centre qui fait changer

l'abscisse (x + dx) et l'ordonnée (y+dy).

4. Une méthode pour calculer le périmètre()

5. Une méthode pour calculer la surface()

6. Une méthode nbcercles() pour afficher le nombre des cercles ayant le rayon < 10cm

et le nombre des cercles dont le rayon>10cm

Écrire un programme utilisant cette classe pour créer un cercle, en afficher les

caractéristiques, afficher le périmètre et la surface.

le déplacer avec dx=2 et d y=4 et en afficher à nouveau les caractéristiques.

1. Créer un cercle C de nom C, de centre O (9,4) et de rayon 12.

2. Changer le rayon à 13cm et afficher le nouveau rayon.

Page 2: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Exercice 3 :

Définir une classe ville, qui va contenir une variable dont le rôle sera de stocker le nom, une

autre stockera le nombre d'habitants et la dernière se chargera du pays.

Une méthode afficher() .

Une méthode comparer (ville) : pour comparer les nombres d'habitants des deux

villes.

C1() . Le nombre des villes qui ont un nombre d’habitant < 10000

C2() Le nombre des villes qui ont un nombre d’habitant entre 10000 et 1000000

C3() Le nombre des villes qui ont un nombre d’habitant > 1000000

La méthode catégorie () : dans quelle tranche se trouve la ville en question. Selon le

nombre d'habitants, le caractère renvoyé changera.

{0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};

{'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'} ;

Par exemple si le nombre d’habitants <= 1000 la méthode renvoie le char ‘A’.

si le nombre d’habitants =0 la méthode renvoie le char ‘?’.

Classe testville pour tester la classe ville

Changer le nombre d’habitants d’une ville V.

Affiche le pays de la Ville V

Exercice 4 :

1- Créez la classe Salarie.

Cette classe possédera 5 propriétés de visibilité publique :

matricule Matricule Integer

nom Nom String

Prénom Prénom String

salaire Salaire Double

Taux Charges Sociales TauxCS Double

Ces propriétés doivent seulement être accessibles par le biais des accesseurs en

lecture/écriture mis en œuvre par le biais de l’instruction Property.

2- Implémentez la méthode CalculerSalaireNet().

Elle doit calculer le salaire net d’un employé qui équivaut à :

Page 3: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Salaire – (salaire*TauxCS) et retournera la valeur calculée.

Et renvoyer la valeur ainsi calculée.

3- Pour tester la définition de votre classe et son bon fonctionnement :

Créez un module et une procédure principale Main.

Déclarez 2 variables de type Salarie et créez 2 instances de type Salarie.

Renseignez les propriétés de ces deux salariés. Choisissez des valeurs significatives

pour les salaires et le taux de charge sociale afin de tester correctement le calcul réalisé

par la méthode CalculerSalaireNet.

Pour des salaires respectifs de 5 000 et 10 000 dirhams un taux de charges sociales de

25 % , vous devez trouver 3 750 et 7 500.

4- Le taux de charges sociales est en fait commun à tous les salariés. Pour éviter toute

redondance de cette propriété, vous devriez donc la déclarer comme partagée au

niveau de la classe Salarie et non comme une propriété spécifique des objets

instanciés à partir de la classe.

Utilisez pour cela le mot clé Shared au niveau de la définition de la propriété TauxCS.

5- Testez de nouveau votre classe.

6- Implémentez deux nouveaux constructeurs d’initialisation :

Un qui permet de renseigner le matricule lors de l’instanciation

Un qui permet de renseigner le matricule et le nom

N’oubliez pas que le constructeur par défaut doit alors être défini explicitement.

7- Testez votre code : Instanciez deux nouveaux objets à l’aide de ces constructeurs.

8- Implémentez un constructeur de recopie pour faire un clone d’un objet de référence.

Exercice 5 :

Dans l'avion Paris-Rabat, on peut trouver les personnes suivantes :

Aymane : Pilote

Ismail : coPilote

Firdaous : Hôtesse n°1

Meriem : Hôtesse n°2

Khalid : passager siège n°1

Jamal : passager siège n°2 etc …

Chacune de ces personnes peut être représenté e sous la forme d'objet et on peut dire que

chacun de ces objets appartient à une de ces catégories : Pilote, Hôtesse ou Passager

Page 4: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

On peut construire le diagramme suivant :

CHotesse

Pré nom N° de tel Adresse Age Nbre de langues Salaire Date_embauche

les constructeurs les accesseurs ParlePlus3Langues() Sub Affichage() Prime_rendement() Année_expérience()

La prime de rendement sera calculée comme suit:

Si nombre d’année d’expérience 2 < NAE <=4 alors prime=salaire

Si nombre d’année d’expérience 4 < NAE <=6 alors prime=salaire* 1,5

Si nombre d’année d’expérience 6 < NAE <=8 alors prime=salaire *2

Si nombre d’année d’expérience NAE > 8 alors prime=salaire *4

La méthode estfatigué() sera calculé comme suit :

Si le nombre de vol assuré par le pilote est supérieur à 5 heures, alors il est fatigué sinon il ne

l’est pas encore.

La méthode chanceux() sera calculé comme suit :

Si le nombre de son siège est différent de 13 alors il est chanceux.

On vous demande dans l’exercice d’essayer d’optimiser les classes, on créant éventuellement

des classes héritées à partir d’autres classes.

Il est également demandé de :

- Créer les constructeurs d’initialisation pour chaque classe créée

- Créer une variable permettant de donner un nombre à chaque passager.

(et faire en sorte que ce compteur s’incrémente automatiquement à chaque

instanciation, passager Khalid aura le numéro 1, passager Jamal le numéro 2 ….)

- Ecrire un module principal permettant de tester le bon fonctionnement des classes et

leurs méthodes respectives.

Exercice 6 : Pokemons

CPilote Prénom N° de tel Adresse Age Nbre d'heures de vol Salaire Date_embauche

les constructeurs les accesseurs EstFatigue() Sub Affichage() Prime_rendement() Année_expérience()

CPassage

Prénom N° de tel Adresse Age N° de son siège

les constructeurs les accesseurs Chanceux() Affichage()

Page 5: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Les Pokémons sont des gentils animaux qui sont passionnés par la programmation objet en

général et par le polymorphisme en particulier.

Il existe quatre grandes catégories de pokémons :

- Les pokémons sportifs : Ces pokémons sont caractérisés par un nom, un poids (en kg), un

nombre de pattes, une taille (en mètres) et une fréquence cardiaque mesurée en nombre de

pulsations à la minute. Ces pokémons se déplacent sur la terre à une certaine vitesse que l’on

peut calculer grâce à la formule suivante : vitesse = nombre de pattes * taille * 3

- Les pokémons casaniers : Ces pokémons sont caractérisés par un nom, un poids (en kg),

un nombre de pattes, une taille (en mètres) et le nombre d’heures par jour où ils regardent la

télévision. Ces pokémons se déplacent également sur la terre à une certaine vitesse que l’on

peut calculer grâce à la formule suivante : vitesse = nombre de pattes * taille * 3

- Les pokémons des mers : Ces pokémons sont caractérisés par un nom, un poids (en kg) et

un nombre de nageoires. Ces pokémons ne se déplacent que dans la mer à une vitesse que

l’on peut calculer grâce à la formule suivante : vitesse = poids / 25 * nombre de nageoires

Pour chacune de ces trois catégories de pokémons, on désire disposer d’une méthode

toString qui retourne (dans une chaîne de caractères) les caractéristiques du pokémon.

Par exemple la méthode toString() appliquée sur un pokémon sportif retournerait :

"Je suis le pokémon Pikachu mon poids est de 18 kg, ma vitesse est de 5,1 km/h j'ai 2 pattes,

ma taille est de 0,85m ma fréquence cardiaque est de 120 pulsations à la minute"

Cette même méthode appliquée sur un pokémon casanier pourrait retourner :

"Je suis le pokémon Salameche mon poids est de 12 kg, ma vitesse est de 3,9 km/h j'ai 2

pattes, ma taille est de 0,65m je regarde la télé 8h par jour"

Sur un pokémon des mers :

"Je suis le pokémon Rondoudou mon poids est de 45 kg, ma vitesse est de 3,6 km/h j'ai 2

nageoires"

Question 1. Réaliser un diagramme de classes permettant de gérer la hiérarchie des

Pokémons.

Question 2. Programmer ces classes en VB.

Question 3. Programmer un module de test.

Exercice 3 :

Soit le diagramme de classe suivant :

Page 6: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Créer la classe abstraite Personne.

Créer la classe Ouvrier, la classe Cadre et la classe Patron qui héritent de la classe Personne.

et prévoir les constructeurs (à 3 et à 0 arguments) de chacune des 3 classes, ces trois classes

sont des classes finales.

Le patron a un salaire qui est égal à x% du chiffre d'affaire : salaire = cA*pourcentage/100

Le cadre a un salaire qui dépend de son indice :

E1 : salaire annuel brut 130.000,00 Dhs,

E2 : salaire annuel brut 150.000,00 Dhs,

E3 : salaire annuel brut 170.000,00 Dhs,

E4 : salaire annuel brut 200.000,00 Dhs,

L’ouvrier a un salaire qui est salaire = SMIG + ( dateCourante - dateEntree)*150. De plus, le

salaire ne doit pas dépasser SMIG*2.

Ecrire la méthode float getSalaire() qui permet de calculer le salaire pour chacune des classes.

Ecrire la méthode affichier_Info() qui affiche le nom, le prenom, la société , le salaire et le

poste occupé (On pourra utiliser la méthode afficher_Info() de classe mère et rajouter

l'information du poste occupé).

Le programme principal devra créer 1 patron et 2 cadres aux indice E1 et E3 et 5 ouvriers.

Tester les différentes fonctions.

Exercice 7 :

Page 7: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Partie I :

9- Créez la classe Salarie.

Cette classe possédera 5 propriétés de visibilité publique :

matricule Matricule Integer

nom Nom String

Prénom Prénom String

salaire Salaire Double

Taux Charges Sociales TauxCS Double

Ces propriétés doivent seulement être accessibles par le biais des accesseurs en

lecture/écriture mis en œuvre par le biais de l’instruction Property.

10- Implémentez la méthode CalculerSalaireNet().

Elle doit calculer le salaire net d’un employé qui équivaut à :

Salaire – (salaire*TauxCS) et retournera la valeur calculée.

Et renvoyer la valeur ainsi calculée.

11- Pour tester la définition de votre classe et son bon fonctionnement :

Créez un module et une procédure principale Main.

Déclarez 2 variables de type Salarie et créez 2 instances de type Salarie.

Renseignez les propriétés de ces deux salariés. Choisissez des valeurs significatives

pour les salaires et le taux de charge sociale afin de tester correctement le calcul réalisé

par la méthode CalculerSalaireNet.

Pour des salaires respectifs de 5 000 et 10 000 dirhams un taux de charges sociales de

25 % , vous devez trouver 3 750 et 7 500.

12- Le taux de charges sociales est en fait commun à tous les salariés. Pour éviter toute

redondance de cette propriété, vous devriez donc la déclarer comme partagée au

niveau de la classe Salarie et non comme une propriété spécifique des objets

instanciés à partir de la classe.

Utilisez pour cela le mot clé Shared au niveau de la définition de la propriété TauxCS.

13- Testez de nouveau votre classe.

14- Implémentez deux nouveaux constructeurs d’initialisation :

Un qui permet de renseigner le matricule lors de l’instanciation

Un qui permet de renseigner le matricule et le nom

N’oubliez pas que le constructeur par défaut doit alors être défini explicitement.

15- Testez votre code : Instanciez deux nouveaux objets à l’aide de ces constructeurs.

16- Implémentez un constructeur de recopie pour faire un clone d’un objet de référence.

Page 8: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

17- Implémentez la méthode ToString() qui renverra une chaîne constituée de la liste

des propriétés de votre objet, avec le séparateur « ; » entre 2 propriétés. Pour tester

le bon fonctionnement de la méthode, affichez la valeur retournée par celle-ci à la

console.

18- Implémentez la méthode Equals() qui renverra True si les deux objets sont égaux,

False sinon. Pour tester le bon fonctionnement de la méthode, affichez la valeur

retournée par celle-ci à la console.

Partie II :

Créez une classe Commercial en dérivant la classe Salarie. Cette classe aura 2

propriétés supplémentaires pour calculer la commission :

chiffre d'affaire chiffreAffaire Double

commission en % commission Integer

Créez les deux constructeurs standards de la classe

Commercial (par défaut et initialisation).

Ne pas oublier d'appeler les constructeurs équivalents de la classe de

base.

Créez les méthodes d'accès aux propriétés supplémentaires.

Surchargez la méthode CalculerSalaireNet pour calculer le salaire réel

(fixe + commission).

Surchargez les autres méthodes de la classe de base pour lesquelles on

jugera nécessaire de faire ainsi.

Testez la classe Commercial

Exercice 8 :

On veut construire un programme capable d’afficher les informations des figures

géométriques colorées ( surfaces, périmètre et volume)

segment : définit par un codeFigure, une couleur, un centre, et une distance

Carre : définit par un codeFigure ,une couleur, un centre, et le côté, on peut calculer son

périmètre, et sa surface .

Cercle : définit par un codeFigure, une couleur, un centre, et un rayon, on peut calculer son

périmètre et sa surface.

Cylindre : définit par un codeFigure, une couleur, un centre, un rayon et une hauteur, on peut

calculer sa surface et son volume

Cube : définit par un codeFigure, une couleur, un centre, et la valeur du côté, on peut calculer

sa surface et son volume

La classe Figure est la classe principale, elle permet aussi d’afficher les informations des

figures.

Page 9: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Le codefigure est un numéro qui s’incrémente automatiquement lors de la création de la

figure.

Comme nous pensons devoir ajouter ultérieurement de nouveaux types de figures

géométriques, nous décidons d’utiliser des interfaces pour décrire leurs comportements

communs.

1. Après avoir étudié les différences et les points communs entre les classes que nous

avons distinguées, décrivez la ou les interfaces utiles et précisez les classes qui les

implémenteront.

2. Créer les interfaces nécessaires

3. Créer la classe figure.

4. Créer les autres classes (constructeurs, propriétés, et les méthodes nécessaires)

5. Pour chacune de ces catégories de figures, on désire disposer d’une méthode toString

qui retourne (dans une chaîne de caractères) les caractéristiques de chaque figure.

6. Créer un module de tests.

Exercice 9

Un fan de Musique désire gérer ces CDs musicaux. Un CD est caractérisé par son numéro,

son titre, son genre (Rock, Pop, Metal, ..), sa date d’édition et son artiste.

On demande de gérer les CDs musicaux :

1. Ecrire la classe CD avec le constructeur d’initialisation

2. Ajouter les accesseurs et modificateurs

3. Ajouter la méthode toString qui retourne la description d’un CD sous forme de chaine de

caractères.

4. Ecrire la classe GestionCDs qui utilise un ArrayList et gère les CDs.

Ajouter les méthodes :

a. AjoutCD

b. RechercherCD : La recherche peut se faire par numéro de CD ou par titre (prévoir deux

méthodes pour la rechercher).

c. AfficherCDs

On souhaite gérer la répartition des modules entre les formateurs d’un institut de formation

professionnelle.

Exercice 10

I. Un étudiant est défini par son nom, son prénom, un ensemble de notes (un tableau de

double) et une moyenne (double). Ces caractéristiques constituent l’ensemble des données du

type Etudiant.

a. Créer la classe étudiant

b. Ajouter une méthode qui permet de calculer la moyenne des notes de l’étudiant

c. Ajouter la méthode toString qui permet d’afficher pour chaque etudiant, son nom, prénom,

ces notes et sa moyenne.

II. Afin de vérifier le bon fonctionnement de cette classe Etudiant, il est nécessaire de

construire un programme principal.

III. Une classe ClasseE est définie par un ensemble d’étudiants, c’est-à-dire un ArrayList

d’objets Etudiant.

a. Créer la classe ClasseE avec une méthode toString qui permet l’affichage des étudiants de

la classe.

Page 10: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

b. Ajouter une méthode classementEtudiants qui permet de classer les étudiants dans l’ordre

décroissant des moyennes. (On utilisera l’algorithme de tri par bulle).

IV. Afin de vérifier le bon fonctionnement des deux classes modifier le programme principal

pour qu’il offre un menu permettant de:

1. Ajouter un étudiant

2. Supprimer un étudiant

3. Modifier un étudiant

4. Afficher les étudiants

5. Afficher les informations d’un étudiant

6. Afficher le classement

Exercice 11

Reprendre la classe Etudiant de l’exercice 2.

On modifie la classe ClasseE afin de :

Créer un objet de type Hashtable

Stocker les étudiants dans cet objet en les associant à leur clé.

1. Dans la classe Etudiant, ajouter un numéro d’inscription.

2. Dans la classe ClasseE, créer un objet de type Hashtable appeler le liste.

3. Ajouter une méthode ajouterEtudiant qui ajoute un étudiant à la liste. La clé serait son

numéro d’inscription.

4. Ajouter une méthode supprimerEtudiant qui supprime un étudiant passé en paramètres.

5. Ajouter une méthode rechercherEtudiant qui cherche un étudiant dans la liste et l’affiche ou

affiche un message d’erreurs si l’étudiant n’existe pas.

6. Ajouter une méthode qui permet de parcourir la liste et afficher les étudiants.

Exercice 12

Soit la classe module qui modélise un module et qui comportera les attributs suivants :

- Reference

- intitule

Soit la classe Formateur qui modélise un Formateur et qui comportera les attributs suivants :

- matricule

- nom

- prenom

- echelle

- listeModule

1- Codage de la classe Module

a. Ecrire la classe Module avec un compteur des objets créés.

b. Ecrire un constructeur d’initialisations contenant tous les attributs de la classe et un

constructeur par défaut.

c. Ecrire la méthode tostring permettant l’affichage des attributs.

2- Codage de la classe Formateur

a. Ecrire la classe Formateur avec un compteur des objets créés.

b. Ecrire un constructeur d’initialisations contenant tous les attributs de la classe et un

constructeur par défaut.

c. Ecrire la méthode tostring permettant l’affichage des attributs.

Page 11: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

3- Ajouter la méthode compare qui teste l’égalité de 2 objets Formateur (2 objets Formateur

sont égaux s’ils ont le même matricule).

4- Ajouter une méthode ajouter_module() qui ajoute un module à la liste des modules pris en

charge par un formateur.

5- Ajouter une méthode supprimer_Module qui supprime un module de la liste des modules

d’un formateur.

6- ajouter une méthode afficher_module() qui affiche les modules affectés à un formateur.

7- ajouter une méthode vider_module() qui supprime tous les modules affectés à un

formateur.

8- Ecrire un programme de test qui crée 4 formateurs et 5 modules.

Exercice 13 : (Les comptes bancaires et les Clients -Personne) : Ecrire une classe Personne qui contient les éléments suivants : nom (une chaîne de

caractères), date de naissance (trois entiers pour le jour, le mois, l’année). On écrira également

un constructeur associé ainsi qu’une méthode d’affichage public String toString()

rudimentaire qui affiche les champs d’une personne. On n’affichera pas la date de naissance.

On se propose de décrire simplement les informations nécessaires à la création d’un compte

bancaire. On distinguera deux types de comptes, les comptes courants et les comptes

d’épargnes qui seront implémentés par deux classes distinctes CompteCourant et

CompteEpargne dérivant toutes les deux d’une même classe abstraite Compte. Les comptes

épargnes ont un montant minimal qui sera représenté par un champ depotMinimal.

Dans la classe abstraite Compte, les champs seront :

- Une personne p de type personne

- Un entier numéro représentant le numéro du compte.

- Un entier long montant représentant le montant du compte.

Chaque nouveau client devra avoir un numéro de compte différent et un même client peut

avoir plusieurs comptes. La classe abstraite Compte définira une méthode simulant le dépôt

d’une somme sur un compte. On disposera aussi d’une méthode simulant le retrait d’un

compte. Sur un compte courant, le retrait ne sera effectué que si le compte ne devient pas

négatif. Sur un compte épargne, le retrait ne sera effectué que si l’opération n’amène pas en

dessous de la valeur de dépôt minimal.

Question 1:

Ecrire la classe abstraite Compte avec les déclarations des méthodes abstraites et définitions

des méthodes concrètes.

Question 2 :

Ecrire les classes CompteCourant et ComptEpargne qui dérivent de Compte avec leurs

méthodes et leurs constructeurs. Pour les comptes courants, on écrira deux constructeurs, l’un

d’eux créant un compte de montant nul.

Question 3 :

Ajouter aux classes CompteCourant, CompteEpargne, Compte une méthode public String

toString( ) qui permet l’affichage d’un compte. On affichera pour chaque compte, la personne,

le numéro du compte et son type (courant ou épargne), puis le montant.

Question 4 :

On crée maintenant une classe Banque qui contient une collection représentant l’ensemble des

comptes. La classe Banque contiendra par exemple le champ Base de type Collection.

Ecrire dans la classe Banque une méthode

Void afficherComptesClient (Personne p)

Qui permet d’afficher tous les comptes d’une personne donnée.

Question 5 :

Page 12: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Le directeur de la Banque décide pour le nouvel an de créditer de 100 Dhs tous les comptes

épargne des personnes âgées de moins de 28 ans (On prendra ceux dont la date de naissance

est supérieur ou égale à 1985). Ecrire dans la classe Banque une méthode void

incrementerNouvelAn( ) qui réalise cette faveur. Des méthodes pourront être ajoutées dans les

autres classes.

Problème 1 EFM POO 2012 :(barême 20 pts)

On veut réaliser une application pour la gestion des formateurs, des classes et des stagiaires de

votre établissement.

On suppose qu’un formateur est responsable sur plusieurs classes, et chaque classe contient

plusieurs Stagiaires.

Un formateur est caractérisé par son matricule, nom, prénom, DateNaissance, SalairedeBase et

poste qui est par défaut « Permanent », et la liste des classes qui lui est affecté (en utilisant une

collection).

Pour une Classe, on trouve le code (auto), la filière, son responsable (qui est un stagiaire) et la

liste des stagiaires (en utilisant une collection)

Chaque Stagiaire est caractérisé par son numéro d’inscription, nom et dateNaissance.

Questions :

1) Classe Stagiaire (6 pts) a. Créer la classe Stagiaire, avec le constructeur qui initialise tous les paramètres et propriétés

nécessaires. (2 pts)

b. Créer la méthode toString qui retourne sous forme de chaine de caractères les informations

d’un employé. (1 pt)

c. Créer une méthode equals qui permet de comparer si deux stagiaires possèdent le même

nom. (1 pt)

d. Gérer par une exception, le cas ou la date de naissance est postérieure à la date

d’aujourd’hui. (2 pts)

2) Classe Classe (7 pts)

a. Créer la classe Classe, avec le constructeur d’initialisation et propriétés nécessaires. (2

pts)

b. Créer la méthode ajouterStagiaire(….) qui ajoute un stagiaire à la classe. (1 pt)

c. Créer la méthode supprimerStagiaire(….) qui supprime un stagiaire à la classe (1 pts)

d. En déduire la méthode déplacerStagiaire(….) qui déplace un stagiaire d’une classe à une

autre. (1 pts)

e. Créer la méthodeAfficherStagiaires(…) qui liste tous les Stagiaires de le classe. (2 pts)

3) Classe Formateur (7 pts) a. Créer la méthode ajouterClasse(….) qui affecte une classe à un formateur. (1 pt)

b. Créer la méthode afficherStagiaire(…) permettant de lister tous les stagiaires assignés au

formateur. (2 pts)

c. Créer la méthode afficherResponsableClasse(..) permettant d’afficher tous les

responsables des classes affectés au formateur. (2 pts)

d. Créer la méthoderechercherStagiaire(…) (1 pt)

e. Créer la méthode sauvegarderFormateur (..) qui permet de sérialiser la liste des classes

du formateur. (1 pt)

Problème 2: Examen de Passage 2012 (Variante 1)

Page 13: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

Dossier 2 : (15,25 pts)

L’objet de cette application est la gestion informatisée des voyages organisés par une société

possédant des bus. Chaque voyage est assuré par un seul chauffeur.

Recommandation : utiliser des listes génériques (List<T> : listes typées) de préférence. Mais vous

pouvez utiliser des ArrayList ou des Collections.

1- Classe Chauffeur.

a. Définir une classe Chauffeur dont les caractéristiques sont : CIN, Nom, Prénom. (0,5

pt) b. Écrire un constructeur avec tous les paramètres. (0,5 pt)

c. Écrire les accesseurs des champs et la méthode toString() qui renverra tous les

champs séparés par tabulation. (0,5 pt)

2- Classe Bus.

a. Définir une classe Bus dont les caractéristiques sont : Immatriculation, Marque, Type.

(0,5pt) b. Écrire un constructeur avec tous les paramètres. (0,5 pt)

c. Écrire les accesseurs des champs. (0,5 pt)

d. Écrire la méthode toString() qui renverra les informations du bus séparées par

tabulation. (0,5 pt)

3- Classe Voyage

a. Définir une classe Voyage dont les caractéristiques sont : (0,75 pt)

- Numéro voyage : le numéro du 1er voyage créé est 1 et à chaque création d’un

nouveau voyage, ce numéro doit être automatiquement incrémenté de 1. Faire le

nécessaire (données+ code) pour y arriver.

- Vchauffeur : c’est le chauffeur qui a assuré le voyage courant.

- Vbus : C’est le bus conduit par Vchauffeur au cours de ce voyage.

- Date Voyage : date où a eu lieu ce voyage.

- Ville de départ.

- Ville d’arrivée.

- Nombre de voyageurs : nombre des personnes qui ont effectué ce voyage.

- Prix du billet : prix payé par chaque voyageur de ce voyage (le même prix pour

tous).

b. Ecrire un constructeur sans aucun paramètre permettant de définir la valeur du numéro

du voyage et d’affecter la date système à Date voyage. (0,75 pt)

c. Ecrire un constructeur permettant de définir les valeurs des autres champs. Ce

constructeur doit faire d’abord appel au constructeur précédent. (0,75 pt)

d. Écrire les accesseurs des champs. (0,5 pt)

e. Ecrire la méthode toString() qui renverra le numéro du voyage, la date du voyage, le

nom et le prénom du chauffeur, l’immatriculation et la marque du bus, ville de départ,

ville d’arrivée et recette du voyage tous séparés par tabulation. (1 pt)

La recette du voyage = Nombre de voyageurs * Prix du billet du voyage en cours.

4- Programme principal

a. Déclarer une liste de chauffeurs, une liste de bus et une liste de voyages accessibles

par toutes les méthodes du programme principal. (0,5 pt)

b. Ajouter une méthode rechercherChauffeur() qui recherche un chauffeur par son

CIN. Si trouvé, elle retourne le chauffeur correspondant dans la liste des chauffeurs.

Sinon, elle retourne la valeur null. (0,5 pt)

Page 14: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

c. Ajouter une méthode rechercherBus() qui recherche un bus par son immatriculation.

Si trouvée, elle retourne le bus correspondant dans la liste des bus. Sinon, elle

retourne la valeur null. (0,5 pt)

d. Ajouter une méthode rechercherVoyage() qui recherche un voyage par son numéro.

Si trouvé, elle retourne l’indice correspondant dans la liste des voyages. Sinon, elle

retourne la valeur -1. (0,5 pt)

e. Ajouter par code (en mode conception) trois chauffeurs à la liste des chauffeurs. (0,5

pt) f. Ajouter par code trois bus à la liste des bus. (0,5 pt)

g. Ajouter par code deux voyages à la liste des voyages. Utiliser certains constructeurs et

certaines méthodes déjà conçus. (0,75 pt)

h. Concevoir le menu suivant : (en prenant en compte les indications ci-dessous)

1- Ajouter bus. (0,75 pt)

2- Ajouter voyage. (1 pt)

3- Lister tous les voyages. (0,75 pt)

4- Lister les voyages passés entre deux dates. (0,75 pt)

5- Nombre de voyageurs de l’année en cours. (0,75 pt)

6- Fin. (0,25 pt)

Indications concernant les traitements à réaliser dans le menu ci-dessus :

Ajouter bus :

Saisir les données nécessaires et faire le nécessaire pour que deux bus dans la liste

n’aient pas la même immatriculation.

Ajouter voyage :

- Le numéro du nouveau voyage est automatiquement affecté par programme et la

date voyage correspond à la date système.

- Saisir le CIN du chauffeur qui doit correspondre à un chauffeur de la liste des

chauffeurs et si trouvé, le chauffeur ainsi trouvé correspond à Vchauffeur du voyage à

ajouter, sinon le programme vous demandera de saisir un autre CIN.

- Saisir l’immatriculation du bus qui doit correspondre à un bus de la liste des bus et si

trouvée, le bus ainsi trouvé correspond à Vbus du voyage à ajouter, sinon le

programme vous demandera de saisir une autre immatriculation.

- Saisir les autres données restantes et chaque fois qu’une donnée saisie n’est pas

valide, le programme vous demandera de la saisir de nouveau.

Lister tous les voyages : Imprimer la liste de tous les voyages de la manière suivante :

Date :

../../….

N° Date voyage Nom Prénom Immatric. Marque Ville départ Ville arrivée

Recette

… ../../…. ……. …..….. ……….. ……… ..…….. ……….

……...

Indication : la date en haut à droite correspond à la date système.

Lister les voyages passés entre deux dates : Imprimer une liste des voyages semblable

au niveau de la présentation à celle de la question précédente mais contenant

uniquement les voyages qui se sont déroulés entre deux dates que l’utilisateur de

Page 15: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

l’application devra saisir. En bas de la liste ainsi imprimée, indiquer le nombre des

voyages listés.

Nombre de voyageurs de l’année en cours :

Le programme va calculer et afficher le nombre de voyageurs de l’année en cours

(utiliser la date système pour récupérer l’année en cours). Ce nombre correspond au

nombre total des voyageurs ayant utilisé les bus de la société pendant l’année en

cours.

Problème 3 : Examen de Passage théorique 2011 :

Dans une application Windows tous les contrôles (fenêtres, boutons, zones de texte, cases à cocher …)

sont caractérisés par un nom (de type chaines de caractères), une position haut et une position gauche

(de type entier) de l’objet sur l’écran. Une fenêtre est un contrôle comme les autres, caractérisée en

plus d’un titre et d’une couleur d’arrière-plan (de type entier).

1- Ecrire les classes Controle et Fenetre avec un constructeur d’initiation, un constructeur de copie,

sachant que la classe Fenetre hérite de la classe Controle.

2- Doter la classe Controle par la méthode Display qui permet d’afficher la mention suivante :

« Le contrôle Texte1 est situé à la position 12x25 » Texte1 représente le nom du contrôle et 12,25

représentent respectivement la position gauche, haut du contrôle dans l’écran.

3- Redéfinir la méthode DISPLAY pour la classe Fenetre pour afficher la mention suivante :

« Le contrôle Texte1 est situé à la position 12,25, ayant comme titre « titre1 » et une couleur d’arrière-

plan de 20 ». On souhaite ajouter à la classe Fenetre une propriété type collection qui permet de gérer

une liste de contrôles que l’utilisateur peut ajouter sur une fenêtre (zones de texte, liste déroulante,…).

4- Donner les modifications à apporter à la classe Fenetre et la méthode AjoutControle qui permet

d’ajouter un contrôle à la collection.

5- Implémenter pour la classe Fenetre la méthode RetireControle qui permet de supprimer un contrôle

de la collection connaissant son nom.

6- Implémenter pour la classe Fenetre la méthode DisplayTout qui permet d’afficher tous les contrôles

ajoutés à la fenêtre.

Problème 4 : Examen de Passage Pratique 2011 (v1)

L’objet de cette application est la gestion informatisée du cabinet médical. Elle doit procéder à la

gestion informatisée des dossiers médicaux des patients et elle s’occupe également de la gestion des

rendez-vous et des visites.

1- Classe Patient.

a. Définir une classe clsPatient dont les caractéristiques sont : Code Patient (affecté de façon

incrémentale par rapport au nombre de patients), Nom, Prénom, Date de naissance, Adresse, Tél, E-

mail.

b. Ecrire un constructeur à deux paramétres : Nom et Prénom.

c. Ecrire un deuxième constructeur avec tous les paramètres.

d. Ecrire les accesseurs des champs et la méthode ToString() qui renverra les informations d’un

patient.

2- Classe Visites.

a. Définir une classe clsVistes dont les caractéristiques sont : Date visite, Heure visite, Code patient,

Montant payé.

b. Ecrire un constructeur à deux paramètres : Date visite et Heure visite.

c. Ecrire un deuxième constructeur sans paramètres qui appelle le premier avec la date et l’heure

actuelle.

Page 16: serie_POO

ISTA HAY RYAD TDI 2012/2013

Formatrice : BOUROUS Imane

d. Ecrire les accesseurs des champs et la méthode ToString() qui renverra les informations de cette

visite.

3- Classe RendezVous.

a. Définir une classe clsRendezVous dont les caractéristiques sont : Date Rendez-Vous, Heure

Rendez-Vous, Code patient, Observation.

b. Ecrire un constructeur à trois paramètres : Date Rendez-Vous, Heure Rendez-Vous, Code patient.

c. Ecrire les accesseurs des champs et la méthode ToString() qui renverra les informations de ce

rendez-vous.

4- Classe CabinetMedical.

a. Définir une classe CabinetMedical dont les caractéristiques sont : une liste des patients, une liste des

visites et une liste des rendez-vous (Collections ou tableaux).

b. Ajouter une méthode AjouterPatient qui ajoute un patient à l’ensemble des patients du cabinet.

c. Ajouter une méthode PatientExistant ayant comme paramétre le nom et le prénom et qui retourne le

code du patient s’il existe ou le chiffre -1 sinon.

d. Définir une classe ExceptionMedecinOccupe.

e. Ajouter une méthode AjouterRDV qui ajoute un rendez-vous, et lève l’exception définie en d) s’il

coïncide avec un redez-vous.

f. Ajouter une méthode AfficherRDVduJour qui va, pour une date donnée comme paramètre, affiche la

liste des rendez-vous de ce jour.

g. Ajouter une méthode PatientAyantDesVisites qui affiche la liste des patients (code, nom et prènom)

ayant visité le cabinet pendant la dernière semaine.

h. Ajouter une méthode SupprimerPatient qui permet de supprimer un patient ainsi que ses visites et

rendez-vous.

i. Ajouter une méthode EnregistrerPatients qui permet d’enregistrer la liste des patients dans un

fichier.