Accéder au contenu principal

POO




SECTEUR NTIC
Filières : TDI / TDM
Niveau Technicien spécialisé
Manuel de TP
Module 11 : Programmation Orientée Objet




Conception et rédaction

NOM et PRENOM AFFECTATION
GHAIBI Imad-Eddine ISTA Ouazzane





Liste des équipements:

Equipements Quantité
Poste informatique 15
Imprimante 1
Visual Studio 2010 .NET 15


Liste de matière d’œuvre et outillage : Néant



Nous tenons à remercier les formateurs concepteurs des Manuels de TP et nous invitons les utilisateurs de ce manuel à communiquer, par email, à la direction du CDC TIC toutes les remarques et suggestions afin de les prendre en considération pour l’enrichissement et l’amélioration de ce document.

MODULE 11 : PROGRAMMATION ORIETÉE OBJET
Code : TDI-11                                                    Durée : 120 h
PRECISIONS ELEMENTS DU CONTENU

A. Programmer des classes dans un langage de P.O.O.



Introduire la notion de la classe en mettant en œuvre la différence entre une structure et une classe.
Introduire la notion des propriétés et méthodes.
Créer des instances d’une classe
Protéger des données à l'aide d’encapsulation.
Construire des méthodes pour initialiser des propriétés d’un objet et récupérer les valeurs.
Initialiser les propriétés d’un objet en utilisant un constructeur.
Sur définition d’un constructeur.
B. Programmer des classes en utilisant le principe de l’héritage. Construction d’une super classe.
Construction d’une classe dérivée.
Surcharge des méthodes.
Polymorphisme et surcharge.
C. Exploiter les classes de collections. La classe String.
La classe Array.
La classe ArrayList.
Les classes HashTable et Sortedlist
La classe Regex.
Vérifier qu’une chaîne correspond à un modèle donné.
Trouver tous les éléments d’une chaîne correspondant à un modèle.
Récupérer des parties d’un modèle.
La méthode Split.
D. Programmer les exceptions. Expliquer ce qu’est une exception.
Schéma de gestion d’une exception.
La classe Exception.
Les clauses try et catch.
La clause finally.
La propriété Message et la méthode ToString de la classe exception.

E. Assurer la persistance des objets. Appliquer la sérialisation de propriétés simples (et l’opération inverse de dé-sérialisation)
Appliquer la sérialisation de collections d’objets (et dé-sérialisation)
Réaliser ces opérations dans un format propriétaire (binaire) et format d’échange universel (Xml).






Activité d’apprentissage 1
Module 11 Programmation orientée objet
Précision A Programmer des classes dans un langage de P.O.O.
Code Activité A001
Activité Écriture d’une première classe avec ses propriétés, ses constructeurs et ses méthodes.
Durée  

Phase d’apprentissage 2 heures

BASE
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer une classe.
Déclarer des variables d’instance et des variables de classe.
Créer des méthodes.
Mettre en œuvre le principe de l’encapsulation.
Utiliser les modificateurs d’accès.
Créer des accesseurs pour les variables d’instance et les variables de classe.
Créer des constructeurs.
Sur-définir les constructeurs.
Utiliser le mot clé "this".
Redéfinir la méthode "ToString()".
Générer une solution et tester un programme orientée objet.

Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.

DESCRIPTION DE L’ACTIVITÉ
  APPLICATION DE GÉOMÉTRIE « PARTIE 1 »
On veut réaliser une petite application orientée objet pour paramétrer des cercles. Pour cela on implémente une classe appelée Cercle qui contient :
  2 variables d’instance publiques : rayon (de type double) et couleur (de type string), ayant les valeurs par défaut 1.0 et "rouge" respectivement;
  1 variable de classe publique : nombre_de_cercles (de type int) qui va contenir le nombre de cercles créés.
  2 constructeurs : 1 sans arguments Cercle() et 1 qui initialise le rayon Cercle(double r);
  2 méthodes publiques getRayon() et getSurface().

Rappel : Surface d’un disque = π x rayon².

Travail à réaliser :

a. Écrire la classe Cercle, puis tester le programme sur les 2 instances de la classe Cercle suivantes :
Cercle c1 = new Cercle();
Cercle c2 = new Cercle(2.0);

Afficher les informations sur chaque instance comme indiqué dans cet exemple :
« Le cercle a un rayon de 1 et une surface de 3,14. »
Afficher le nombre de cercles créés comme indiqué dans cet exemple :
« Le nombre de cercles créés est 2. »

b. Modifier la classe Cercle pour inclure un 3ème constructeur avec tous les arguments Cercle(double r, string c), puis tester le programme sur l’instance suivante de la classe Cercle:
Cercle c3 = new Cercle(3.0,"orange");

c. Tester les instructions suivantes :
c1.rayon = 2.5;
Console.WriteLine(c1.rayon);
c1.couleur = "vert";
Console.WriteLine(c1.couleur);
Changer l’accès aux variables d’instance et de classe en privé, tester le programme une 2ème fois, analyser les nouveaux résultats et proposer des solutions.

d. Renommer les arguments des constructeurs avec le même nom que celui des variables d’instance (c.-à-d. Cercle(double rayon) et  Cercle(double rayon, string couleur)). Proposer des solutions pour les messages d’erreurs.

e. Ajouter une méthode publique string ToString() qui permet de retourner les informations sur une instance (sous la forme d’un message de type string) comme indiqué dans cet exemple : « Le cercle a un rayon de 1 et une surface de 3,14. ».

f. Tester le programme pour afficher les informations sur toutes les instances par appel de la méthode ToString().

Activité d’apprentissage 2
Module 11 Programmation orientée objet
Précision A Programmer des classes dans un langage de P.O.O.
Code Activité A002
Activité Création d’une application orientée objet multi-classes.
Durée  

Phase d’apprentissage 2 heures

BASE
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Intégrer plusieurs classes dans un seul projet.
Surcharger la méthode "Equals()".
Déclarer une propriété de type tableau.
Instancier une propriété de type tableau dans un constructeur.
Faire appel aux objets d’une classe à partir d’une autre classe.
Utiliser un tableau d’objets.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.




DESCRIPTION DE L’ACTIVITÉ
  GESTION D’UNE LIBRAIRIE « PARTIE 1 »
En vue de la gestion d’une librairie, on veut écrire une application orientée objet pour organiser des livres. L’application sera basée sur 2 classes :
Une classe appelée Auteur contient :
  3 variables d’instance privées : nom (de type string), email (de type string), et sexe (de type char soit ‘m’ ou ‘f’) ;
  1 constructeur qui initialise tous les arguments Auteur(string nom,string email,char sexe);
  2 accesseurs de lecture seule pour nom et sexe, et 1 accesseur de lecture et modification pour email;
  1 méthode bool Equals(Auteur auteur) qui teste l’égalité de 2 auteurs en se basant sur leurs e-mails;
  1 méthode ToString()qui retourne les informations sur chaque instance sous la forme :« nom (sexe) à email », comme indiqué dans cet exemple : « ALAOUI Mohamed (m) à alaoui-med@mail.ma ».

Une classe appelée Livre contient :
  4 variables d’instance privées : titre (de type string), nomAuteur (de type string[] en considérant un ou plusieurs auteurs par livre), prix (de type double), et quantité_en_stock (de type int);
  2 constructeurs : Livre(string titre, Auteur[] auteur, double prix) et Livre(string titre, Auteur[] auteur, double prix, int quantité_en_stock);
  2 accesseurs de lecture seule pour titre et nomAuteur, et 2 accesseurs de lecture et modification pour prix et quantité_en_stock;
  1 méthode bool Equals(Livre livre) qui teste l’égalité de 2 livres en se basant sur leurs titres et leurs auteurs;
  1 méthode ToString()qui retourne les informations sur chaque instance sous la forme :
« titre  de nomAuteur et …, coûte prix DH avec quantité_en_stock exemplaires en stock. »,
comme indiqué dans cet exemple :
« Exercices en C# de ALAOUI Mohamed et ALAMI Meryem, coûte 200.00 DH avec 64 exemplaires en stock.»,
Travail à réaliser :

a. Écrire les 2 classes Auteur et Livre.
b. Tester le programme en utilisant les informations de l’exemple cité dans l’énoncé de l’activité.







Activité d’apprentissage 3
Module 11 Programmation orientée objet
Précision A Programmer des classes dans un langage de P.O.O.
Code Activité A003
Activité Mise en œuvre de la composition entre les classes.
Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Sur-définir les méthodes d’une classe.
Déclarer des propriétés avec le type des classes composantes.
Réutiliser les méthodes des classes composantes.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.

DESCRIPTION DE L’ACTIVITÉ
  APPLICATION DE GÉOMÉTRIE « PARTIE 2 »
On désire réaliser une application orientée objet permettant de créer des formes géométriques à partir de points.
Une classe appelée Point permet de manipuler les points d’un plan, et contient :
  2 variables d’instance privées : abscisse et ordonnée (de type int) qui doivent être comprises entre –999 et 999;
  4 constructeurs : 1 constructeur par défaut sans argument, 1 constructeur à 1 argument, 1 constructeur à 2 arguments et le constructeur de recopie Point(Point p).
  2 accesseurs pour abscisse et ordonnée;
  1 méthode ToString()qui retourne les coordonnées d’un point;
  1 méthode float Norme(Point p) qui permet de calculer la norme du vecteur constitué du point courant et du point passé en argument.
Rappel : Si A représente le point courant, B représente le point passé en argument, x représente l’abscisse et y représente l’ordonnée :

  1 méthode bool Equals(Point p) qui permet de tester la coïncidence du point courant avec le point passé en argument;
  1 méthode void Translater(int dx, int dy) qui permet de translater un point en ajoutant à l’abscisse la valeur dx et à l’ordonnée la valeur dy;
  3 méthodes :
void setCoordonnées(double abscisse, double ordonnée),
void setCoordonnées(Point p),
et void setCoordonnées(int abscisse, int ordonnée).
(Penser à utiliser la fonction Math.Round(double argument) pour arrondir les valeurs à l’entier);
  2 méthodes : double Distance(int abscisse, int ordonnée) et double Distance(Point p), permettant de calculer la distance entre le point courant et les coordonnées passées en arguments.
Rappel : Dans un espace de dimension n, pour 2 points ayant respectivement les coordonnées (x1, x2, ...,xn) et (y1, y2, ...,yn), la distance entre les 2 points est :

Une classe appelée Triangle contient :
  3 variables d’instance privées : A, B et C (de type Point) ;
  2 constructeurs :
Triangle(int xA, int yA, int xB, int yB, int xC, int yC)
et Triangle(Point A, Point B, Point C);
  1 méthode double getPérimètre() qui retourne le périmètre d’un triangle ( utiliser la méthode Distance(Point p) de la classe Point;
  1 méthode string getTriangleType() qui retourne le type du triangle : "équilatéral" si ses 3 côtes sont égaux, "isocèle" si 2 de ses 3 côtes sont égaux, ou "scalène" dans le cas échéant.
  1 méthode ToString().
Travail à réaliser :

a. Écrire les 2 classes  Point et Triangle.

b. Modifier la classe Cercle (réalisée précédemment) en ajoutant :

  1 variable d’instance privée : centre (de type Point) qui représente le centre d’un cercle;
  3 constructeurs : 1 constructeur à 3 arguments, le constructeur de recopie Cercle(Cercle c) et un constructeur Cercle(double rayon, string couleur, int abscisse, int ordonnée);
  1 accesseur pour centre.
c. Mettre à jour la méthode ToString() de la classe Cercle pour retourner les informations sur une instance de la classe Cercle comme indiqué dans cet exemple :
« Le cercle de centre (5 ,7) a un rayon de 1 et une surface de 3,14. »
d. Écrire une classe Cylindre qui contient :
  2 variables d’instance privées : base_cylindre (de type Cercle) qui représente la base du cylindre, et hauteur (de type double) avec valeur par défaut de 1.0;
  4 constructeurs : 1 constructeur à 2 arguments, le constructeur de recopie Cylindre (Cylindre c), 1 constructeur sans arguments Cylindre(), et 1 constructeur Cylindre (double rayon, double hauteur);
  1 accesseur pour hauteur.
  1 méthode double getVolume() qui retourne le volume d’un cylindre (Utiliser la méthode getSurface() de la classe Cercle).
  1 méthode ToString().
e. Créer un jeu de tests.


Activité d’apprentissage 4
Module 11 Programmation orientée objet
Précision A Programmer des classes dans un langage de P.O.O.
Code Activité A004
Activité Création d’un nouveau type de données avec ses propriétés et ses méthodes.

Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Concevoir de nouveaux types d’objets.
Réutiliser et combiner les classes prédéfinies d’un langage orienté objet pour créer un nouveau type d’objets.
Exploiter la classe "Math".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.






DESCRIPTION DE L’ACTIVITÉ
  CALCUL DES NOMBRES COMPLEXES
On voudrait réaliser une application orientée objet permettant de manipuler des nombres complexes.
Une classe appelée Complexe modélise des nombres complexes « x+yi », et contient :
  2 variables d’instance privées : réel et imaginaire (de type double) qui contiennent respectivement les parties réel et imaginaire du nombre complexe;
  1 constructeur à 2 arguments, et le constructeur de recopie Complexe (Complexe c);
  2 accesseurs pour réel et imaginaire;
  1 méthode ToString() pour retourner « (x+yi) ».
  2 méthodes : void setComplexe(double réel, double imaginaire) et void setComplexe(Complexe c) qui modifient la valeur d’un nombre complexe ;
  2 méthodes : bool isRéel() et  bool isImaginaire() qui retournent true respectivement si le nombre complexe est un réel ou un imaginaire pur;
  2 méthodes : bool Equals(double réel, double imaginaire) et bool Equals(Complexe c) qui permettent de tester l’égalité de 2 nombres complexes;
  2 méthodes : double Module() et  Complexe Conjugué() qui retournent respectivement le module et le conjugué d’un nombre complexe.
Rappel : Le module et le conjugué d’un nombre complexe sont :


  2 méthodes : double argRad()et double argDeg() qui retourne l’argument d’un nombre complexe respectivement en radians et en degrés.
Rappel 1 : L’argument d’un nombre complexe est :

si   n'est pas un réel négatif,   sinon.
Rappel 2 : La formule de conversion entre les degrés et les radians :

(La bibliothèque Math contient 2 méthodes qui retournent l’arc-tangente en radians, Math.atan(double d) et Math.atan2(double x, double y). Il est conseillé d’utiliser Math.atan2(x,y) au lieu de Math.atan(x/y) pour éviter la division par zéro.)
  4 méthodes de classe qui retournent un résultat complexe :
Complexe Addition(Complexe c1, Complexe c2),
Complexe Soustraction(Complexe c1, Complexe c2),
Complexe Multiplication(Complexe c1, Complexe c2),
Complexe Division(Complexe c1, Complexe c2).
Rappel : Les règles de calcul pour l’addition, la multiplication et la division (en déduire pour la soustraction) :




Travail à réaliser :

a. Écrire la classe  Complexe.

b. Créer un jeu de tests.
Activité d’apprentissage 5
Module 11 Programmation orientée objet
Précision A Programmer des classes dans un langage de P.O.O.
Code Activité A005
Activité Introduction à la conception orientée objet.
Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Déterminer les exigences de l’application.
Définir les classes.
Définir les relations entre les classes.
Tester l’application et assurer le respect du cahier des charges.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.






DESCRIPTION DE L’ACTIVITÉ
  GESTION DES COMPTES BANCAIRES
Il s'agit de définir une classe permettant de modéliser des comptes bancaires. Un compte bancaire est identifié par un numéro de compte unique, qui est attribué à l'ouverture du compte et ne peut être modifié par la suite. Les comptes sont numérotés à partir de 1. Lorsqu’un nouveau compte est créé, le numéro s’incrémente de 1.
Un compte est associé à une personne titulaire du compte, décrite par son N° CIN et son nom. Le titulaire du compte ne peut plus être modifié.
Le solde du compte peut être positif, nul ou négatif (si le solde est négatif on dit que le compte est à découvert). Le découvert d'un compte est nul si le solde du compte est positif ou nul, et il est égal à la valeur absolue du solde si ce dernier est négatif.
Le solde d'un compte ne peut être inférieur à une valeur fixée pour ce compte (avec :   valeur =  - découvert maximal autorisée). Par exemple pour un compte dont le découvert maximal autorisé est 2000 Dh, le solde ne pourra pas être inférieur à -2000 Dh. Le découvert maximal autorisé peut varier d'un compte à un autre, il est fixé arbitrairement par la banque à la création du compte et peut être ensuite révisé selon les modifications des revenus du titulaire du compte.
Créditer un compte consiste à ajouter un montant positif au solde du compte. Débiter un compte consiste à retirer un montant positif au solde du compte. Effectuer un virement consiste à débiter un compte au profit d'un autre compte qui sera crédité du montant du débit. Le solde résultant ne doit en aucun cas être inférieur au découvert maximal autorisé pour ce compte.
Lors d'une opération de retrait, un compte ne peut être débité d'un montant supérieur à une valeur désignée sous le terme de débit maximal autorisé. Comme le découvert maximal autorisé, le débit maximal autorisé peut varier d'un compte à un autre et est fixé arbitrairement par la banque à la création du compte. Il peut être ensuite révisé selon les modifications des revenus du titulaire du compte.
Lors de la création d'un compte seul le nom du titulaire du compte est indispensable. En l'absence de dépôt initial le solde est fixé à 0. Les valeurs par défaut pour le découvert maximal autorisé et le débit maximal autorisé sont respectivement de 800  et 1000. Il est éventuellement possible d'attribuer d'autres valeurs à ces caractéristiques du compte lors de sa création. Toutes les informations concernant un compte peuvent être consultées.
Travail à réaliser :
a. Ecrire la classe Personne.
b. Ecrire la classe Compte qui contient:
  Les variables d’instance et de classe avec leurs accesseurs (en respectant le cahier de charges de l’activité);
  3 constructeurs :
Compte(Personne titulaire), Compte(Personne titulaire, double solde), et Compte(Personne titulaire, double solde, double déb_max, double déc_max).
  3 méthodes :
void Créditer(double montant), void Débiter(double montant), void Virer (double montant, Compte c).
  La méthode ToString() (si le compte est à découvert, un message le signale explicitement).
c. Ecrire un programme de test permettant de :
  Créer un compte c1 avec un solde initial de 1 000, et un compte c2 avec un solde initial de 50 000, un débit maximal autorisé de 6000 et un découvert maximal autorisé de 5000.
  Afficher les caractéristiques des comptes c1 et c2.
  Retirer 300 du compte c1 et 600 du compte c2.
  Déposer 500 sur le compte c1 et virer 1000 du compte c2 vers c1.
  Afficher les nouvelles caractéristiques des comptes c1 et c2.
Activité d’apprentissage 6
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B001
Activité Création d’une classe dérivée.
Durée  

Phase d’apprentissage 2 heures

BASE
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Hériter les propriétés.
Hériter les constructeurs.
Redéfinir et surcharger les méthodes.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.






DESCRIPTION DE L’ACTIVITÉ
  APPLICATION DE GÉOMÉTRIE « PARTIE 3 »
On désire améliorer notre application de géométrie pour pouvoir travailler non seulement sur un plan, mais aussi sur un espace 3 dimensions.
Une classe appelée Point3D qui hérite de la classe Point (réalisée précédemment) permet de manipuler les points dans un espace, et contient :
  1 variables d’instance privée : cote (de type int) qui doit être comprise entre –999 et 999;
  7 constructeurs : 1 constructeur sans argument Point3D(), 1 constructeur à 1 argument Point3D(int abscisse), 1 constructeur à 2 arguments Point3D(int abscisse, int ordonnée), , 1 constructeur Point3D(Point p), 1 constructeur à 3 arguments Point3D(int abscisse, int ordonnée, int cote), 1 constructeur Point3D(Point p, int cote),  et le constructeur de recopie Point3D(Point3D p).
  1 accesseurs pour cote;
  1 méthode ToString()qui retourne les coordonnées d’un point;
  1 méthode float Norme(Point3D p) qui permet de calculer la norme du vecteur constitué du point courant et du point passé en argument.
Rappel : Si A représente le point courant, B représente le point passé en argument, x représente l’abscisse, y représente l’ordonnée et z représente la cote :

  1 méthode bool Equals(Point3D p) qui permet de tester la coïncidence du point courant avec le point passé en argument en utilisant la méthode Equals(Point p);
  1 méthode void Translater(int dx, int dy, int dz) qui permet de translater un point en ajoutant à l’abscisse la valeur dx, à l’ordonnée la valeur dy, et à la cote la valeur dz en utilisant la méthode void Translater(int dx, int dy);
  3 méthodes :
void setCoordonnées(double abscisse, double ordonnée, double cote), void setCoordonnées(Point p, double cote), et void setCoordonnées(Point3D p);
  2 méthodes : double Distance(int abscisse, int ordonnée, int cote) et double Distance(Point3D p), permettant de calculer la distance entre le point courant et les coordonnées passées en arguments.
Rappel : Dans un espace de dimension n, pour 2 points ayant respectivement les coordonnées (x1, x2, ...,xn) et (y1, y2, ...,yn), la distance entre les 2 points est :

Travail à réaliser :
a. Écrire la classe Point3D.
b. Créer un jeu de tests.




Activité d’apprentissage 7
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B002
Activité Création d’une super classe et de ses classes dérivées.
Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer plusieurs classes qui héritent d’une super classe.
Différencier entre l’héritage et l’association de classes.
Créer tous les constructeurs possibles en exploitant la notion de signature.
Utiliser la classe "Random".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.





DESCRIPTION DE L’ACTIVITÉ
  GESTION D’UN ÉTABLISSEMENT SCOLAIRE « PARTIE 1 »
On voudrait réaliser une application orientée objet permettant de gérer les affectations des cours aux enseignants et aux étudiants d’un établissement scolaire, à l’aide des classes suivantes :
Une classe appelée Personne  contient :
  3 variables d’instance privées : nom, date_naissance (de type DateTime) et adresse (de type string), ayant les valeurs par défaut "inconnu", la date d’aujourd’hui moins 18 ans, et "inconnue" respectivement;
  4 constructeurs : 1 constructeur sans arguments Personne(), 1 constructeur qui initialise le nom Personne(string nom) , 1 constructeur à 3 arguments Personne(string nom, DateTime date_naissance, string adresse) , et le constructeur de recopie Personne(Personne p);
  3 accesseurs;
  1 méthode ToString() qui retourne les informations sur une personne. Exemple :
« Nom : AYADI Ali.  Né le : 10/10/1995. Adresse : 64, Rue Ain Boufares, Ouazzane.».
Une classe appelée Cours contient :
  3 variables d’instance privées : code_cours, intitulé_cours (de type string) et coefficient (de type int), ayant les valeurs par défaut "C00", "sans intitulé" et 1 respectivement;
  2 constructeurs : 1 constructeur sans arguments Cours(), et 1 constructeur à 3 arguments Cours(string code_cours, string intitulé_cours, int coefficient);
  3 accesseurs;
  1 méthode ToString() qui retourne le code et l’intitulé du cours uniquement. Exemple : « C11 : Programmation orientée objet. ».
Une classe appelée Enseignant hérite de la classe Personne, et contient :
  2 variables d’instance privées : Matricule (de type string), et cours (de type Cours[]) contenant la liste des cours enseignés par l’enseignant. Le matricule est généré automatiquement en commençant par 1. Toutefois le matricule doit toujours avoir 5 caractères, par exemple «00001»;
  7 constructeurs :
1 constructeur sans arguments Enseignant();
1 constructeur qui initialise le nom Enseignant(string nom);
2 constructeurs qui initialisent les informations sur la personne : Enseignant(string nom, DateTime date_naissance, string adresse) et Enseignant(Personne p);
3 constructeurs d’initialisation :
Enseignant(Cours[] cours), Enseignant(Personne p, Cours[] cours) et Enseignant(string nom, DateTime date_naissance, string adresse, Cours[] cours);
  1 accesseur pour cours et 1 accesseur en lecture seule pour matricule;
  1 méthode ToString() qui retourne les informations sur un enseignant, en respectant la forme donnée par l’exemple suivant :
« Matricule : 00001. Nom : MOULAHI Ahmed.  Cours enseignés : C01 : ….».
Une classe appelée Etudiant hérite de la classe Personne, et contient :
  3 variables d’instance privées : code_étudiant (de type string), cours (de type Cours[]) contenant la liste des cours suivis par l’étudiant, et notes (de type double[])  contenant la liste des notes obtenues dans les différents cours. Le code de l’étudiant est généré automatiquement par concaténation de la date de naissance avec un numéro aléatoire entre 1 et 9999. Toutefois le code de l’étudiant doit toujours avoir 12 caractères. Exemple : l’étudiant né le : 25/10/1995, peut avoir comme code «199510250001»;
Rappel : Pour générer des nombres aléatoires compris dans un intervalle donné, on utilise la classe Random. Exemple :
Random aléatoire = new Random();
int nombre, min, max;
nombre = aléatoire.Next(min, max); /*Génère un nombre aléatoire entre min et max.*/
  9 constructeurs :
1 constructeur sans arguments Etudiant();
1 constructeur qui initialise le nom Etudiant(string nom);
2 constructeurs qui initialisent les informations sur la personne : Etudiant(string nom, DateTime date_naissance, string adresse) et Etudiant(Personne p);
3 constructeurs qui initialisent la liste des cours :
Etudiant(Cours[] cours), Etudiant(Personne p, Cours[] cours)
et Etudiant(string nom, DateTime date_naissance, string adresse, Cours[] cours);
2 constructeurs d’initialisation :
Etudiant(Personne p, Cours[] cours, double[] notes)
et Etudiant(string nom, DateTime date_naissance, string adresse, Cours[] cours, double[] notes);
  2 accesseurs pour cours et notes, et 1 accesseur en lecture seule pour code_étudiant;
  1 méthode Moyenne() pour calculer la moyenne des notes de l’étudiant.
  1 méthode ToString() qui retourne les informations sur un étudiant, en respectant la forme donnée par l’exemple suivant :
« Code : 199510250001. Nom : AYADI Ali.  Moyenne : 14,26.».
Travail à réaliser :
a. Écrire les quatre classes Personne, Cours, Enseignant et Etudiant.
b. Créer un jeu de tests.







Activité d’apprentissage 8
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B003
Activité Exploitation du polymorphisme.
Durée  

Phase d’apprentissage 4 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Définir le polymorphisme des méthodes.
Stocker des objets de différentes classes dans un tableau d’objets unique.
Appliquer l’édition des liens dynamiques lors de l’appel des objets polymorphes.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  GESTION DES INFORMATIONS DES PERSONNES ACTIVES
Dans cette activité, nous allons développer une application orientée objet capable de gérer les informations sur les personnes par rapport à leurs milieux de travail. Pour cela, on va suivre une démarche pour créer les classes suivantes :
Une classe appelée Particulier contient :
  3 variables d’instance privées : numéro_CIN, nom et adresse (de type string);
  3 constructeurs : 1 constructeur à 1 argument Particulier(string numéro_CIN), 1 constructeur à 2 arguments Particulier(string numéro_CIN, string nom), et 1 constructeur à 3 arguments Particulier(string numéro_CIN, string nom, string adresse);
  2 accesseurs pour nom et adresse, et 1 accesseur en lecture seul pour numéro_CIN;
  1 méthode ToString().
Une classe appelée Entreprise contient :
  3 variables d’instance privées : raison_sociale (de type string),  capital (de type double) et nombre_actions (de type int);
  3 constructeurs : 1 constructeur à 1 argument Entreprise(string raison_sociale), 1 constructeur à 2 arguments Entreprise(string raison_sociale, double capital) , et 1 constructeur à 3 arguments Entreprise(string raison_sociale, double capital, int nombre_actions);
  3 accesseurs;
  1 méthode Prix_Action() qui retourne la valeur d’une action d’une entreprise suivant la relation : Valeur d’une action = Capital / Nombre d’actions.
  1 méthode ToString().
Un actionnaire est un particulier titulaire d’un nombre d’actions dans une entreprise. Une classe Actionnaire représente les actionnaires, et contient :
  2 variables d’instance privées : entreprise (de type Entreprise), et nombre_actions_achetées (de type int);
  4 constructeurs : 1 constructeur à 3 arguments :
Actionnaire(string numéro_CIN, Entreprise entreprise, int nombre_actions_achetées),
1 constructeur à 4 arguments :
Actionnaire(string numéro_CIN, string nom, Entreprise entreprise, int nombre_actions_achetées),
1 constructeur à 5 arguments :
Actionnaire(string numéro_CIN, string nom, string adresse, Entreprise entreprise, int nombre_actions_achetées) ,
et 1 constructeur à 3 arguments :
Actionnaire (Particulier p, Entreprise entreprise, int nombre_actions_achetées);
  2 accesseurs;
  1 méthode Total_Actions() qui retourne le coût total des actions achetées par un actionnaire;
  1 méthode Pourcentage_Actions() qui retourne le pourcentage de la part des actions détenues par un actionnaire dans une entreprise;
  1 méthode ToString()qui retourne en plus le total et le pourcentage (en %) des actions d’un actionnaire.
Un employé est un particulier qui travaille dans une entreprise. Une classe Employé représente les employés, et contient :
  2 variables d’instance privées : matricule (de type string) qui s’incrémente automatiquement à partir de A0001 (jusqu’à Z9999) pour chaque nouvelle instance de la classe Employé, et entreprise (de type Entreprise);
  4 constructeurs : 1 constructeur à 2 arguments :
Employé(string numéro_CIN, Entreprise entreprise),
1 constructeur à 3 arguments :
Employé(string numéro_CIN, string nom, Entreprise entreprise),
1 constructeur à 4 arguments :
Employé(string numéro_CIN, string nom, string adresse, Entreprise entreprise),
et 1 constructeur à 2 arguments :
Employé(Particulier p, Entreprise entreprise);
  1 accesseur pour entreprise, et 1 accesseur en lecture seul pour matricule;
  1 méthode ToString().
Un cadre est un employé qui travaille dans une entreprise. Une classe Cadre représente les cadres, et contient :
  1 variable d’instance privée : grade (de type char) qui représente le grade d’un cadre codé sur une lettre de ‘A’ à ‘E’;
  5 constructeurs : 1 constructeur à 3 arguments :
Cadre(string numéro_CIN, Entreprise entreprise, char grade), 1 constructeur à 4 arguments :
Cadre(string numéro_CIN, string nom, Entreprise entreprise, char grade),
1 constructeur à 5 arguments :
Cadre(string numéro_CIN, string nom, string adresse, Entreprise entreprise, char grade),
1 constructeur à 3 arguments:
Cadre(Particulier p, Entreprise entreprise, char grade),
et 1 constructeur à 2 arguments : Cadre(Employé e, char grade);
  1 accesseur pour grade;
  1 méthode float getSalaire() qui calcule le salaire mensuel d’un cadre, sachant qu’ un cadre intègre l’entreprise avec le grade ’E’ qui correspond à un salaire annuel de 60000 Dh, et avec chaque promotion de grade, le salaire annuel augmente de 50%. Par exemple : les salaires annuels de 2 cadres en grade ‘D’ et ‘C’ sont respectivement 90000DH et 135000DH.
  1 méthode ToString() qui retourne en plus le salaire.
Un ouvrier est un employé qui travaille dans une entreprise. Une classe Ouvrier représente les ouvriers, et contient :
  1 variable d’instance privée : date_affectation (de type DateTime) qui représente le date d’affectation  d’un ouvrier à l’entreprise;
  1 variable de classe privée : smig (de type float) qui correspond au SMIG (Salaire Minimum Interprofessionnel Garantie).
  5 constructeurs : 1 constructeur à 3 arguments :
Ouvrier (string numéro_CIN, Entreprise entreprise, DateTime date_affectation),
1 constructeur à 4 arguments :
Ouvrier (string numéro_CIN, string nom, Entreprise entreprise, DateTime date_affectation),
1 constructeur à 5 arguments :
Ouvrier (string numéro_CIN, string nom, string adresse, Entreprise entreprise, DateTime date_affectation),
1 constructeur à 3 arguments :
Ouvrier (Particulier p, Entreprise entreprise, DateTime date_affectation),
et 1 constructeur à 2 arguments : Ouvrier(Employé e, DateTime date_affectation);
  1 accesseur pour smig et 1 accesseur en lecture seule pour date_affectation;
  1 méthode float getSalaire() qui calcule le salaire mensuel d’un ouvrier, sachant qu’ un ouvrier a un salaire mensuel = SMIG + le nombre d’années de travail x 150 Dh. Le salaire mensuel ne doit pas dépasser SMIG x 3.
  1 méthode ToString() qui retourne en plus le salaire.
Travail à réaliser :
a. Écrire les six classes Particulier, Entreprise, Actionnaire, Employé, Ouvrier et  Cadre.
b. Créer 3 instances de chacune des classes Actionnaire, Ouvrier et  Cadre, qui seront enregistrées dans un seul tableau. Quel sera le type du tableau ? Justifier.
c. Tester les différentes méthodes de calcul (pour getSalaire() de la classe Ouvrier, définir le SMIG à une valeur de 2 333,76 Dh).
d. Afficher le contenu du tableau en se basant sur les différentes méthodes ToString() créées. Quelles sont les modifications que vous devriez apporter aux déclarations des méthodes ToString() ? Justifier.


Activité d’apprentissage 9
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B004
Activité Création et héritage des classes abstraites.
Durée  

Phase d’apprentissage 2 heures

BASE
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer une classe abstraite.
Appliquer le polymorphisme.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.





DESCRIPTION DE L’ACTIVITÉ
  TRAITEMENT D’OBJETS POSTAUX
On souhaite concevoir des classes et un programme qui pourront être utiles à un employé de poste pour traiter des objets à expédier.
On définit une classe abstraite appelée ObjetPostal qui contient :
  5 variables d’instances : nom_destinataire, adresse_destinataire et ville_destination (de type string), code postal (de type int),  et un booléen qui indique si l'objet doit être expédié en recommandé ou pas;
  1 constructeur;
  5 accesseurs;
  1 méthode abstraite Frais_Envoi() correspondant au frais d'envoi d’un objet postal;
  1 méthode ToString().
On définit une classe Lettre, sous-classe d’ObjetPostal, et qui possède :
  1 variable d’instance (de type bool) qui indique si la lettre doit être expédiée en urgence ou pas;
  1 constructeur;
  1accesseur;
  1 méthode Frais_Envoi() qui calcule les frais d'envoi d’une lettre, qui correspondent au prix d’un timbre normal de 3 Dh 20 centimes, ou à 10 Dh si la lettre doit être expédiée en recommandé. Si la lettre doit être expédiée en urgence, il y a également un surcoût de 5 Dh.
  1 méthode ToString().
On définit une classe Colis, sous-classe d’ObjetPostal, et qui possède :
  1 variable d’instance poids_colis qui donne le poids du colis, exprimé en grammes.
  1 constructeur;
  1 accesseur;
  1 méthode Frais_Envoi() qui calcule les frais d'envoi d’un colis, qui correspondent à  la base de 8 Dh par unité de poids de 100 grammes, et si le colis doit être expédié en recommandé, il y a un surcoût de 20 Dh.
  1 méthode ToString().
Travail à réaliser :
a. Écrire les 3 classes  ObjetPostal, Lettre, et Colis.
b. Créer 2 instances de chacune des classes, qui seront enregistrées dans un seul tableau. Quel sera le type du tableau ? Quelles sont les classes à instancier ? Justifier. Afficher le contenu du tableau en déterminant les frais d’envoi de tous les objets postaux qu’il contient.



Activité d’apprentissage 10
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B005
Activité Hiérarchiser l’héritage entre les classes.
Durée  

Phase d’apprentissage 4 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Détecter les classes abstraites.
Construire une arborescence d’héritage.
Appliquer le polymorphisme.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  GESTION D’UNE LIBRAIRIE « PARTIE 2 »
Dans cette activité nous allons réutiliser les classe Auteur et Livre (réalisées précédemment).
En vue d’une gestion améliorée de la librairie, on veut écrire une application pour organiser des documents de nature diverse : documents sur papier, ou documents numériques.
Les documents proposés à la vente par la librairie sont soit des livres présents dans le local de la librairie, ou des livres électroniques (e-book) téléchargeables à partir du portail web de la librairie.
Les livres peuvent être des livres de fictions (comme des romans, des nouvelles ou des bandes dessinés), ou des livres de référence (comme des livres scientifiques ou des encyclopédies).
Les livres électroniques sont catégorisés suivant leur format : e-book en format texte encodés en UTF-8 (Unicode Transformation Formats où chaque caractère est codé sur 8 bits) compatible avec n’importe quelle plateforme logicielle, ou e-book en format spécifique qui demande l’utilisation d’un logiciel de lecture de fichiers (par exemple les e-book en format PDF demandent un lecteur de fichiers PDF).
Parmi les documents il y a aussi des manuels scolaires, des revues et des dictionnaires.
Tous les documents ont un numéro d’enregistrement (entier qui s’incrémente automatiquement), un titre (chaîne de caractères), un ou plusieurs auteurs, un prix et leurs quantités en stock.
Les livres ont en plus un nombre de pages (entier) et les livres électroniques ont une taille en octets.
Un e-book en format texte est caractérisé par le nombre de ses caractères (entier calculé automatiquement à partir de sa taille). Un e-book en format spécifique est caractérisé par son format (chaîne de caractères), et le nom du logiciel permettant de le lire (chaîne de caractères).
Les livres de fiction sont classifiés par catégorie de lecteur (enfant, jeune, ou adulte), et les livres de référence par domaine (général, recherche, technologie…).
Les livres scientifiques sont caractérisés par leur champ d’étude (mathématiques, physique, chimie…). Les encyclopédies ont un nombre de tomes (entier).
Les romans ont éventuellement un genre (réaliste, moderne, etc.), les nouvelles ont un thème (fantastique, policière, science-fiction., etc.), tandis que les bandes dessinés ont un éditeur (Marvel, Disney…).
Les manuels scolaires ont un niveau scolaire et une filière (2ème année BAC Sc. Math. …). Les revues ont une date et les dictionnaires ont une langue (Anglais, Allemand, etc.).
Dans sa politique commerciale, la librairie propose au début de chaque saison (1ère semaine des saisons automne, hiver, printemps, ou été) une réduction sur certains documents qu’elle vent. Cette réduction est comme suit :
  Romans -25%.
  Nouvelles -30%.
  Bandes dessinés -10%.
  Livres scientifiques -35%.
  Encyclopédies -40%.
  Dictionnaires -15%.
  e-books de type texte -50%.
Travail à réaliser :
a. Parmi les classes Document, Livre, ebook, ebookTexte, ebookSpécifique, LivreFiction, LivreRéférence, Roman, Nouvelle, BD, LivreScientifique, Encyclopédie, ManuelScolaire, Revue  et Dictionnaire, indiquer celles qui doivent être abstraites.
b. Écrire les classes Document, ebook, ebookTexte, ebookSpécifique,  LivreFiction, LivreRéférence, Roman, Nouvelle, BD, LivreScientifique, Encyclopédie, ManuelScolaire, Revue  et Dictionnaire; en introduisant un constructeur par classe, les accesseurs et des méthodes getPrix() (en comptabilisant la réduction saisonnière) et ToString(), et modifier la classe Livre de façon à ce qu’elle s’intègre dans le schéma d’héritage de l’application.

c. Créer 2 instances de chacune des classes, qui seront enregistrés dans un seul tableau. Quel sera le type du tableau ? Quelles sont les classes à instancier ? Justifier. Afficher le contenu du tableau.




Activité d’apprentissage 11
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B006
Activité Factorisation du code via les classes abstraites.
Durée  

Phase d’apprentissage 4 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Factoriser le code par abstraction.
Créer des classes modèles (abstraites).
Donner la possibilité d’insérer de nouvelles classes dans un projet par héritage des classes modèles (abstraites).
Réutiliser des classes existantes.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  APPLICATION DE GÉOMÉTRIE « PARTIE 4 »
On voudrait améliorer de nouveau notre application de géométrie, afin de pouvoir introduire des nouvelles formes géométriques.
Dans cette activité nous allons réutiliser la classe Point, Cercle et Triangle (réalisées précédemment).
Une classe abstraite appelée Forme contient :
  1 variable d’instance privée : couleur (de type string) ayant la valeur par défaut "blanche";
  1 variable de classe privée : nombre_de_formes (de type int) qui va contenir le nombre de formes créées.
  2 constructeurs : 1 constructeur sans arguments Forme(), et 1 constructeur à 1 argument Forme(string couleur);
  2 accesseurs;
  2 méthodes abstraites : double getPérimètre() et double getSurface();
  1 méthode ToString().
Une classe abstraite appelée Parallélogramme hérite de la classe Forme, et contient :
  4 variables d’instance privées : a, b, c et d (de type Point), avec : la distance ab = cd et ad = bc (penser à utiliser la méthode Distance(Point p) de la classe Point);

  2 constructeurs :
Parallélogramme(Point a, Point b, Point c, Point d)
et Parallélogramme(Point a, Point b, Point c, Point d, string couleur);
  4 accesseurs;
  1 méthode double getPérimètre() qui retourne le périmètre d’un parallélogramme (utiliser la méthode Distance(Point p) de la classe Point);
  1 méthode abstraite : double getSurface();
  1 méthode bool isRectangle() qui détermine si un parallélogramme est un rectangle, si le théorème de Pythagore est applicable sur le triangle constitué des points a, b et c;
  1 méthode ToString().
Une classe appelée Rectangle hérite de la classe Parallélogramme, et contient :
  2 constructeurs :
Rectangle(Point a, Point b, Point c, Point d)
et Rectangle(Point a, Point b, Point c, Point d, string couleur) dans lesquels la méthode isRectangle() de la classe Parallélogramme sera utilisée pour confirmer qu’il s’agit bien d’un rectangle (sinon tous les points seront initialisés à l’origine du plan).
  1 méthode double getSurface() qui retourne la surface d’un rectangle (utiliser la méthode Distance(Point p) de la classe Point);
  1 méthode bool isCarré() qui détermine si un rectangle est un carré;
  1 méthode ToString().
Une classe appelée Carré hérite de la classe Rectangle, et contient :
  2 constructeurs :
Carré(Point a, Point b, Point c, Point d)
et Carré(Point a, Point b, Point c, Point d, string couleur) dans lesquels la méthode isCarré() de la classe Rectangle sera utilisée pour confirmer qu’il s’agit bien d’un carré (sinon tous les points seront initialisés à l’origine du plan).
  1 méthode ToString().
Travail à réaliser :
a. Écrire les 4 classes  Forme, Parallélogramme, Rectangle et Carré.
b. Modifier la classe Cercle (réalisée précédemment) pour qu’elle hérite de la classe Forme :
  Supprimer la variable d’instance couleur et son accesseur;
  Modifier les constructeurs pour s’adapter à l’héritage et à la suppression de la variable d’instance;
  1 accesseur pour centre;
  Ajouter une méthode getPérimètre().

Rappel : Périmètre d’un disque = 2π x rayon.
  Modifier la méthode ToString().
c. Modifier la classe Triangle (réalisée précédemment) pour qu’elle hérite de la classe Forme :
  Modifier les constructeurs pour s’adapter à l’héritage;
  Ajouter 1 méthode abstraite : double getSurface();
  Ajouter 1 méthode bool isTriangleRectangle() qui détermine si un triangle est un triangle rectangle, si le théorème de Pythagore est applicable sur ce triangle;
d. Écrire une classe appelée TriangleRectangle hérite de la classe Triangle, et contient :
  2 constructeurs :
TriangleRectangle(Point a, Point b, Point c)
et TriangleRectangle(Point a, Point b, Point c, string couleur) dans lesquels la méthode isTriangleRectangle() de la classe Triangle sera utilisée pour confirmer qu’il s’agit bien d’un triangle rectangle (sinon tous les points seront initialisées à l’origine du plan).
  1 méthode double getSurface() qui retourne la surface d’un triangle rectangle (utiliser la méthode Distance(Point p) de la classe Point).
Rappel : Surface d’un triangle rectangle = hauteur x base / 2.
Indice : Suivant théorème de Pythagore, la hauteur et la base seront les 2 côtes du triangle rectangle ayant les plus courtes distances.
  1 méthode ToString().
e. Créer 2 instances de chacune des classes, qui seront enregistrées dans un seul tableau. Quel sera le type du tableau ? Quelles sont les classes à instancier ? Justifier. Afficher le contenu du tableau en déterminant le périmètre et la surface de tous les formes qu’il contient.

Activité d’apprentissage 12
Module 11 Programmation orientée objet
Précision B Programmer des classes en utilisant le principe de l’héritage.
Code Activité B007
Activité Implémentation des interfaces.
Durée  

Phase d’apprentissage 5 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer des interfaces.
Créer des classes qui implémentent une ou plusieurs interfaces.
Différencier entre classe abstraite et interface.
Créer des classes qui appliquent un héritage simple et une implémentation multiple d’interfaces.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.





DESCRIPTION DE L’ACTIVITÉ
  GESTION DES MÉMOIRES
On voudrait réaliser une application orientée objet qui permet de déterminer les caractéristiques des mémoires informatiques les plus sollicités actuellement dans le marché des matériels informatiques, à savoir les mémoires vives (RAM), les mémoires Flash des clés USB, les disques durs, et les disques optiques (spécialement les DVD inscriptibles une seule fois de type DVD-R).
On définit une interface appelée IMesurerMémoire qui spécifie les méthodes suivantes :
  Capacité_en_Octets(char multiplicateur) qui convertit la capacité d’une mémoire en octets, ko, Mo, Go ou To, respectivement si la valeur du multiplicateur en argument est o, k, M, G ou T;
  Capacité_en_bits() qui convertit la capacité d’une mémoire en bits;
  1 méthode Débit(char multiplicateur) correspondant au débit théorique d’une mémoire en bits/s, kb/s, Mb/s, Gb/s ou Tb/s, respectivement si la valeur du multiplicateur en argument est b, k, M, G ou T ;
  1 méthode Débit_en_Octets(char multiplicateur) correspondant au débit théorique d’une mémoire en octets/s, ko/s, Mo/s, Go/s ou To/s, respectivement si la valeur du multiplicateur en argument est o, k, M, G ou T;
Rappel : 1 To = 1024 Go = 1024² Mo = 1024³ ko = 1024⁴ octets.
On définit une interface appelée IViderMémoire qui spécifie les méthodes suivantes permettant la préparation des mémoires pour accueillir des données:
  Formater(string système_Fichiers) qui permet de vider le contenu d’une mémoire et la formater à un système passé en argument de la méthode;
  isRAW() qui indique si une mémoire n’est pas formatée;
  Nettoyer() permettant de diminuer l’espace occupé par les données de 10% si l’espace occupé dépasse 95% de la capacité de la mémoire.
On définit une interface appelée IContrôlerMémoire qui spécifie les méthodes suivantes permettant la gestion de l’utilisation des espaces mémoires :
  EspaceLibre() qui calcule l’espace vide de données d’une mémoire (en bits);
  EspaceLibre_en_Octets() qui calcule l’espace vide de données d’une mémoire (en octets);
  PourcentageUtilisation() qui détermine le pourcentage de l’espace occupé d’une mémoire;
On définit une classe abstraite Mémoire, qui possède :
  2 variables d’instance : référence (de type string), capacité (exprimée en Go);
  1 constructeur d’initialisation;
  2 accesseurs : Référence { set; get; } qui permet de retourner ou modifier la référence d’une mémoire, et Capacité { get; } qui permet de retourner la capacité d’une mémoire (en Go);
  1 méthode abstraite isVolatile() qui indique si une mémoire est volatile;
  1 méthode ToString().
On définit une classe abstraite MémoireMasse, représentant les mémoires de masse, qui hérite de la classe Mémoire et qui possède :
  2 variables d’instance : système_Fichiers (de type string) avec valeur par défaut "RAW", et espaceOccupé (exprimé en Go) avec valeur par défaut 0;
  2 constructeurs d’initialisation;
  2 accesseurs : Système_Fichiers { get; } qui permet de retourner le système de fichiers utilisé dans une mémoire de masse, et EspaceOccupé { get; set; } qui permet de retourner ou modifier la taille de l’espace utilisé dans une mémoire de masse);
  1 méthode abstraite isRéinscriptible() qui indique si les données d’une mémoire peuvent être effacées à volonté;
  1 méthode ToString().
On définit une classe MémoireVive,  représentant les mémoires vives, qui hérite de la classe Mémoire et qui implémente l’interface IMesurerMémoire, et qui possède en plus :
  2 variables d’instance : fréquence qui indique la fréquence de fonctionnement d’une mémoire (en Hz), et largeur_Bus qui indique la largeur du bus mémoire (en bits);
  1 constructeur d’initialisation;
  2 accesseurs pour fréquence et largeur_Bus.
  1 méthode ToString().
On définit une classe Flash_USB,  représentant les mémoires Flash des clés USB, qui hérite de la classe MémoireMasse et qui implémente les interfaces IMesurerMémoire, IViderMémoire et IContrôlerMémoire, et qui possède en plus :
  1 variable d’instance : version (de type double) qui est soit 1.0, 1.1, 2.0, ou 3.0 (avec un débit de transfert de données maximal respectivement de 1,5 Mb/s, 12 Mb/s, 480 Mb/s et 5 Gb/s),
  2 constructeurs d’initialisation;
  1 accesseur;
  1 méthode ToString().
On définit une classe DisqueDur, représentant les disques durs, qui hérite de la classe MémoireMasse et qui implémente l’interface IMesurerMémoire, IViderMémoire et IContrôlerMémoire, et qui possède en plus :
  3 variables d’instance :
capacité_constructeur (déterminée par le fabriquant du disque dur en Go, avec 1 Go = 1,000,000,000 octets),
bus (de type string) qui est soit "IDE" ou "SATA" (avec un débit de transfert de données maximal de 133Mo/s pour IDE et 600 Mo/s pour SATA),
nombrePartitions avec 1 comme valeur par défaut, qui permet de déterminer le nombre de partitions dans un disque dur;
  3 constructeurs d’initialisation (la capacité est calculé automatiquement par conversion de la capacité déterminée par le fabriquant vers l’unité de mémoire normalisée en Go),
  2 accesseurs pour capacité_constructeur et bus, et 1 accesseur NombrePartitions { get; };
  1 méthode Partitionner(int nombre) qui permet de partitionner un disque dur selon le nombre passé en argument, le nombre doit être > 1;
  1 méthode SupprimerPartitions() qui supprime toutes les partitions d’un disque dur;
  1 méthode ToString().
Un DVD a une capacité d 4,7Go et son système de fichiers s’appelle UDF (Universal Disk Format). On définit une classe DVD_R, représentant les DVD-R, qui hérite de la classe MémoireMasse et qui implémente l’interface IParamètrerMémoire et IGérerMémoire, (l’interface IViderMémoire est totalement inutile pour la classe DVD_R, car on ne peut pas formater un DVD-R ni supprimer ses données), et qui possède en plus :
  3 variables d’instance : Vitesse_lecture, Vitesse_gravure (de type int) et multisession (de type bool) qui indique si on peut graver le disque sur plusieurs sessions ou non. La vitesse d’un DVD notée 1x correspond à un débit de 1385 ko/s. Par exemple, si la vitesse de lecture d’un DVD est 8x, son débit sera 8 * 1385 ko/s.
  3 constructeurs d’initialisation,
  1 accesseur pour multisession, et 2 accesseurs en lecture seule pour Vitesse_lecture et Vitesse_gravure;
  1 méthode isVierge() qui permet de déterminer si un DVD-R est vierge;
  1 méthode ToString().
Travail à réaliser :
a. Écrire les différentes interfaces et classes.
b. Créer un jeu de tests avec 2 instances pour chacune des classes.


Activité d’apprentissage 13
Module 11 Programmation orientée objet
Précision C Exploiter les classes de collections.
Code Activité C001
Activité Exploiter la classe "String".
Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Réutiliser la plupart des propriétés et des méthodes de la classe "String".
Mettre le point sur l’utilisation des méthodes "Join" et "Split".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  ADRESSAGE IPV4 PAR CLASSES
Une adresse IP est utilisée pour identifier une machine sur un réseau. Une adresse IPv4 est définie par quatre nombres compris entre 0 et 255, séparés par des points. Par exemple : 212.85.150.134. L'objectif de cette activité est de vérifier si une chaîne de caractères donnée définie bien une adresse IPv4. Pour cela il faut vérifier que : l’adresse IPv4 comporte 4 segments numériques séparés par 3 points qui sont des chiffres compris entre 0 et 255.
Une adresse IPv4 se compose de 2 parties : Identificateur réseau et Identificateur hôte. Les classes d'adresses IPv4 permettent d'affecter des identificateurs de réseau aux entreprises pour que les machines connectées à leurs réseaux puissent communiquer. Les classes d'adresses IPv4 permettent également de définir le point de séparation entre l'identificateur de réseau et l'identificateur d'hôte.
Classe Identificateur réseau Plage de début Plage de fin
A w.0.0.0 1.0.0.0 126.0.0.0
B w.x.0.0 128.0.0.0 191.255.0.0
C w.x.y.0 192.0.0.0 223.255.255.0
D (Réservé) Non disponible 224.0.0.0 239.255.255.255
E (Réservé) Non disponible 240.0.0.0 255.255.255.255
L'identificateur de réseau 127.0.0.0 est réservé au test des connexions.
Classe Plage de début Plage de fin Nombre d’hôtes
A w.0.0.1 w.255.255.254 224 – 2 = 16 777 214
B w.x.0.1 w.x.255.254 216 – 2 = 65534
C w.x.y.1 w.x.y.254 28 – 2 = 254
Le dernier identificateur d’hôte dans un réseau (uniquement des 255) est réservé à la diffusion.
Par exemple, l'adresse IP 172.16.53.46 est une adresse de classe B car 172 est entre 128 et 191. L'identificateur de réseau correspond donc à 172.16.0.0 et l'identificateur d'hôte à 53.46.
On définit une classe appelée IPv4 qui contient :
  1 variable d’instance ip (de type String) qui va contenir l’adresse IPv4;
  1 méthode bool Equals(IPv4 ip) qui teste l’égalité de deux adresses IPv4;
  1 méthode de classe privée String CompacterIP(String chaîne) qui permet de compacter une adresse IPv4 en enlevant les espaces au début et à la fin de la chaîne. Par exemple : " 181.23.4.55  " devient "181.23.4.55";
  1 méthode de classe privée int LongueurIP(String chaîne) qui retourne le nombre de caractères dans une adresse IPv4 (après compactage);
  1 méthode de classe privée bool isValideLongueurIP(String chaîne) qui valide la longueur d’une adresse IPv4 si elle contient entre 7 et 15 caractères;
  1 méthode de classe privée bool isValideIP(String chaîne) qui valide une adresse IPv4 si sa longueur est valide, et si elle comporte 4 segments numériques séparés par des points qui sont des chiffres compris entre 0 et 255 (utiliser la méthode string[] Split(char[] séparateur));
  2 constructeurs :
1 constructeur IPv4(String ip) ;
1 constructeur IPv4(string[] ip) qui permet de construire une adresse IPv4 à partir d’un tableau de chaînes contenant les 4 segments numériques de l’adresse. Par exemple : {"181","23","4","55"} devient "181.23.4.55" (utiliser la méthode de classe string Join(string séparateur, string[] value));
  1 accesseur;
  1 méthode bool isTest_Connexion_IP() qui test si une adresse IPv4 valide est une adresse de test de connexion (utiliser impérativement la méthode bool StartsWith(string value));
  1 méthode char ClasseIP() qui retourne la classe d’une adresse IPv4 si l’adresse est valide et n’est pas une adresse de test de connexions.
  1 méthode String ID_Réseau() qui retourne l’identifiant du réseau à partir d’une adresse IP, si l’adresse IPv4 est de classe A, B ou C;
  1 méthode bool is_ID_Réseau()  qui test si une adresse IPv4 de classe A, B ou C, est un identifiant réseau;
  1 méthode String ID_hôte() qui retourne l’identifiant du hôte à partir d’une adresse IPv4 de classe A, B ou C, si l’adresse IPv4 n’est pas un ID réseau (utiliser impérativement la méthode string SubString(int index_départ, int nombre_caractères));
  1 méthode bool isDiffusion()  qui test si une adresse IPv4 est une adresse de diffusion;
  1 méthode ToString().
Travail à réaliser :
a. Écrire la classe IPv4.
b. Créer un jeu de tests avec 1 instance pour chaque classe d’adresses IPv4.
Activité d’apprentissage 14
Module 11 Programmation orientée objet
Précision C Exploiter les classes de collections.
Code Activité C002
Activité Utilisation de la classe "Array".
Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer des tableaux unidimensionnels.
Réutiliser les propriétés et les méthodes de la classe "Array".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.






  DESCRIPTION DE L’ACTIVITÉ

CALCUL DES POLYNÔMES
Pour effectuer des calculs sur des polynômes, on veut réaliser une application orientée objet appropriée.
Une classe appelée Polynôme modélise des polynômes de degré n présentés sous la forme :

Cette classe contient :
  1 variables d’instance privée : coefficient (de type double[]) sous forme d’un tableau de réels qui va contenir les coefficients du polynôme;
  1 constructeur à 1 argument et le constructeur de recopie Polynôme (Polynôme p);
  1 accesseur;
  1 méthode int getDegré() pour retourner le degré d’un polynôme;
  1 méthode ToString() pour retourner :
« cnx^n + cn-1x^(n-1) + ... + c1x + c0 ».
Par exemple : « 5x^3 + 8x^2 + 3x + 4 ».
  1 méthode : double Evaluer(double x) qui évalue le polynôme pour un x donné en argument, en remplaçant le x donné dans l’expression du polynôme;
  2 méthodes de classe qui retournent un polynôme en résultat :
Polynôme Addition(Polynôme p1, Polynôme p2),
Polynôme Multiplication(Polynôme p1, Polynôme p2).
Rappel : Soient 2 polynômes :
             
La somme des 2 polynômes est le polynôme défini par :
 
Le produit des 2 polynômes est le polynôme défini par :


Travail à réaliser :

a. Écrire la classe  Polynôme.

b. Créer un jeu de tests.

Activité d’apprentissage 15
Module 11 Programmation orientée objet
Précision C Exploiter les classes de collections.
Code Activité C003
Activité Combinaison des classes "Array" et "ArrayList".
Durée  

Phase d’apprentissage 5 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer des tableaux unidimensionnels et multidimensionnels.
Créer des tableaux de tableaux.
Créer des tableaux dynamiques.
Faire la différence entre les propriétés et les méthodes des classes "Array" et "ArrayList".
Transformer des tableaux statiques en tableaux dynamiques et vice versa.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  MANIPULATION DES VECTEURS
Dans cette activité, on voudrait développer une application orientée objet, qui manipule des vecteurs dans un espace à n-dimensions, en s’appuyant sur les méthodes prédéfinies de la classe Array et de la classe ArrayList.
On définit une classe appelée Vecteur qui contient :
  1 variable d’instance composantes (de type double[]) qui va contenir les composantes d’un vecteur (de la dimension 1 à n);
  1 accesseur;
  4 constructeurs :
1 constructeur Vecteur(int taille) représentant le nombre de composantes qui seront alors initialisées à zéro;
1 constructeur Vecteur(int taille, double valeur)  représentant le nombre de composantes qui seront alors initialisées à une valeur donnée;
1 constructeur Vecteur(double[] composantes) qui créera un vecteur par recopie d’un tableau de composantes;
1 constructeur Vecteur(Vecteur vecteur) qui créera un vecteur par recopie d’un autre vecteur;
  1 méthode bool isNull() qui teste si un vecteur est nul (toutes ses composantes égalent à zéro);
  1 méthode bool isVecteurUnité() qui teste si le vecteur est un vecteur unité (toutes ses composantes égalent à un);
  1 méthode Initialiser() qui initialise les composantes d’un vecteur à zéro;
  1 méthode int getDimensions() qui retourne le nombre de dimensions d’un vecteur;
  1 méthode int getDimension(double composante) qui retourne la dimension représentée par la composante passée en paramètre, si elle existe dans le vecteur (utiliser impérativement la méthode Array.IndexOf(tableau, valeur));
  1 méthode de classe bool Equals(Vecteur vecteur) qui teste l’égalité de deux vecteurs;
  1 méthode Copier(Vecteur vecteur) qui copie les composantes du vecteur en paramètre dans le vecteur construit, même si les vecteurs ont des dimensions différentes (utiliser impérativement la méthode Array.Copy(tableau_source, tableau_destination, longueur));
  1 méthode TrierCr() qui trie les composantes d’un vecteur dans l’ordre croissant;
  1 méthode int getDimension_Trié(double composante) qui retourne la dimension représentée par la composante passée en paramètre, si elle existe dans un vecteur trié (utiliser impérativement la recherche binaire);
  1 méthode Inverser() qui inverse l’ordre des composantes d’un vecteur;
  1 méthode TrierDec() qui trie les composantes d’un vecteur dans l’ordre décroissant (penser à combiner TrierCr() et Inverser());
  1 méthode double Norme() qui calcule la norme d’un vecteur;
Rappel :    
  1 méthode void MultiplierParScalaire(double Scalaire) qui multiplie les composantes d’un vecteur par le scalaire passé en argument;
  1 méthode de classe Vecteur Somme(Vecteur v1, Vecteur v2) qui retourne le vecteur somme de deux vecteurs;
  1 méthode de classe double ProduitScalaire(Vecteur v1, Vecteur v2) qui retourne le produit scalaire de deux vecteurs;
Rappel :  
  1 méthode de classe double Schtroumpf(Vecteur v1, Vecteur v2) qui retourne le schtroumpf de deux vecteurs;
  Rappel : pour calculer le schtroumpf, il faut multiplier chaque composante du vecteur 1 par chaque composante du vecteur 2, et additionner le tout. Par exemple si l'on a :
Vecteur 1 :
4 8 7 12

Vecteur 2 :
3 6

Le Schtroumpf sera :
3 * 4 + 3 * 8 + 3 * 7 + 3 * 12 + 6 * 4 + 6 * 8 + 6 * 7 + 6 * 12 = 279.
  1 méthode de classe double[,] ProduitTensoriel(Vecteur v1, Vecteur v2) qui calcule le produit tensoriel de deux vecteurs et le retourne sous forme d’une matrice;
Exemple : Le produit tensoriel de 2 vecteurs u et v dans un espace 3-dimensions se définit par la matrice :

  1 méthode ToString().
On définit une classe appelée EspaceVectoriel qui contient :
  1 variable d’instance ListeVecteurs (de type ArrayList) qui va contenir une liste de vecteurs;
  1 accesseur;
  3 constructeurs :
1 constructeur EspaceVectoriel() qui instancie la liste de vecteurs;
1 constructeur EspaceVectoriel(int capacité) qui spécifie la capacité de la liste des vecteurs;
1 constructeur EspaceVectoriel(Vecteur[] vecteurs) qui instancie la liste de vecteurs avec un tableau de vecteurs;
  1 méthode void AjouterVecteur(Vecteur vecteur) qui ajoute un vecteur à la liste de vecteurs;
  1 méthode void AjouterVecteurs(Vecteur[] vecteurs) qui ajoute un tableau de vecteurs à la liste de vecteurs;
  1 méthode bool EspaceVide() qui vérifie si la liste ne contient aucun vecteur;
  1 méthode void RemplacerVecteur(int position, Vecteur vecteur) qui remplace un vecteur dans la liste de vecteurs, à la position passée en argument, s’il existe au moins un vecteur dans la liste;
  1 méthode void InsérerVecteur(int position, Vecteur vecteur) qui insère un vecteur dans la liste de vecteurs, à la position passée en argument;
  1 méthode void SupprimerVecteur(Vecteur vecteur) qui supprime un vecteur de la liste de vecteurs;
  1 méthode void SupprimerVecteur(int position) qui supprime un vecteur de la liste de vecteurs, à la position passée en argument;
  1 méthode void SupprimerVecteurs() qui supprime tous les vecteurs de la liste de vecteurs;
  1 méthode int getNombreVecteurs() qui retourne le nombre total de vecteurs;
  1 méthode bool Existe(Vecteur vecteur) qui vérifie si un vecteur se trouve dans la liste de vecteurs;
  1 méthode int Position(Vecteur vecteur) qui  retourne la position d’un vecteur qui se trouve dans la liste de vecteurs;
  1 méthode Vecteur[] ToVecteur() qui  retourne la liste de vecteurs sous forme d’un tableau de vecteurs (passage obligatoire par la méthode ToArray());
  Les vecteurs ayant des dimensions différentes ne peuvent pas être représentés par une matrice (un tableau multidimensionne), la solution sera d’utiliser un tableau de tableaux. Ecrire la méthode de double[][] TableauVecteurs() qui retourne la liste de vecteurs sous la forme d’un tableau de tableau;
Travail à réaliser :
a. Écrire la classe Vecteur et la classe EspaceVectoriel.
b. Dans la classe Program, créer une méthode AfficherMatrice(double[,] matrice) qui affiche un tableau multidimensionnel sous la forme d’une matrice.
c. Dans la classe Program, créer une méthode AfficherTableau(double[][] tableau) qui affiche un tableau un tableau de tableau.
d. Créer 2 instances de la classe Vecteur, tester les différentes méthodes et afficher le produit tensoriel de deux vecteurs sous la forme d’une matrice.
e. Créer 4 instances de la classe Vecteur, ajouter-les à une instance de la classe EspaceVectoriel, tester les différentes méthodes et afficher la liste de vecteurs sous la forme d’un tableau de tableau.




Activité d’apprentissage 16
Module 11 Programmation orientée objet
Précision C Exploiter les classes de collections.
Code Activité C004
Activité Utilisation de la classe "List<T>".
Durée  

Phase d’apprentissage 5 heures

TRANSFERT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer des listes génériques.
Hériter de la classe "List<T>".
Créer des classes composées de listes génériques.
Réutiliser les méthodes de manipulation des éléments des listes génériques.
Manipuler les éléments de plusieurs listes à la fois.
Faire appel aux méthodes des classes introduites dans les listes génériques.
Appliquer le polymorphisme.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  GESTION D’UNE LIBRAIRIE « PARTIE 3 »
Dans sa politique commerciale, la libraire s’approvisionne avec les documents de certains auteurs considérés comme privilégiés par la librairie, et dont la librairie en conserve leurs informations et leurs contacts.
En vue d’organiser les documents de la librairie et de faciliter la recherche de ces documents, on souhaite munir notre application d’un utilitaire permettant de ranger les documents dans une liste et de classifier les auteurs de ces documents. Pour réaliser cette application orientée objet, on implémentera en plus les classes ci-après.
Une classe appelée ListeAuteurs qui représente une liste générique d’auteurs, contient :
  1 méthode void AjouterAuteur(Auteur auteur) qui ajoute un nouveau auteur à la liste des auteurs;
  1 méthode void AjouterAuteurs(Auteur[] auteurs) qui ajoute un tableau de nouveaux auteurs à la liste des auteurs;
  1 méthode Auteur RechercherAuteur(string nom) qui retourne le 1er auteur de la liste dont le nom est passé en argument de la méthode;
  1 méthode ListeAuteurs RechercherAuteur(string nom) qui retourne tous les auteurs de la liste dont le nom coïncide avec le nom passé en argument de la méthode;
  1 méthode ListeAuteurs AuteursFemmes() qui retourne tous les auteurs de la liste qui sont des femmes;
  1 méthode double PourcentageAuteursFemmes() qui retourne le pourcentage des auteurs femmes dans la liste;
  1 méthode void ModifierAuteur(Auteur auteur) qui modifie les informations de l’auteur, si le nom de l’auteur passé en argument de la méthode coïncide avec le nom d’un auteur dans la liste;
  1 méthode void TrierAuteurs() qui trie les auteurs de la liste par leurs noms dans l’ordre alphabétique;
  1 méthode void InverserTriAuteurs() qui trie les auteurs de la liste par leurs noms dans l’ordre alphabétique décroissant;
  1 méthode void SupprimerAuteur(string nom) qui supprime tous les auteurs de la liste dont le nom coïncide avec le nom passé en argument de la méthode;
  1 méthode int getNombreAuteurs() qui retourne le nombre d’auteurs dans la liste;
  1 méthode ToString().
Une classe appelée ListeDocuments qui représente une liste générique des documents de la librairie, contient :
  1 méthode void AjouterDocument(Document document) qui ajoute un nouveau document à la liste des documents;
  1 méthode void AjouterDocuments(Document[] document) qui ajoute un tableau de nouveaux documents à la liste des documents;
  1 méthode Document RechercherParNuméro(int numéro) qui retourne un document par son numéro d’enregistrement;
  1 méthode Document RechercherParTitre(string titre) qui retourne un document par son titre;
  1 méthode ListeDocuments RechercherParAuteur(string nom) qui retourne la liste des documents d’un auteur dont le nom est passé en argument de la méthode;
  1 méthode void SupprimerParNuméro(int numéro) qui supprime un document par son numéro d’enregistrement;
  1 méthode void SupprimerParTitre(string titre) qui supprime tous les documents de la liste dont le titre coïncide avec le titre passé en argument de la méthode;
  1 méthode void SupprimerParAuteur(string nom) qui supprime les documents d’un auteur dont le nom est passé en argument de la méthode;
  1 méthode int getNombreDocuments() qui retourne le nombre de documents dans la liste;
  10 méthodes :
ListeDocuments EbooksTexte()
ListeDocuments EbooksSpécifiques()
ListeDocuments Romans()
ListeDocuments Nouvelles()
ListeDocuments BDs()
ListeDocuments LivresScientifiques()
ListeDocuments Encyclopédies()
ListeDocuments ManuelsScolaires()
ListeDocuments Revues()
ListeDocuments Dictionnaires()
qui retournent des listes de documents qui sont des : ebookTexte, ebookSpécifique, Roman, Nouvelle, BD, LivreScientifique, Encyclopédie, ManuelScolaire, Revue ou Dictionnaire (utiliser l’opérateur is pour déterminer le type d’objet);
  1 méthode ListeDocuments RuptureStock()qui retourne les documents qui sont en rupture de stock;
  1 méthode void TrierParTitre() qui trie les documents de la liste par leurs titres dans l’ordre alphabétique;
  1 méthode void InverserTriParTitre() qui trie les documents de la liste par leurs titres dans l’ordre alphabétique décroissant;
  1 méthode void TrierParQuantité() qui trie les documents de la liste par leurs quantités en stock;
  1 méthode void TrierParPrix() qui trie les documents du plus cher au moins cher;
  1 méthode ToString().
Une classe appelée Librairie contient :
  2 variables d’instance privées : listeAuteurs (de type ListeAuteurs), et listeDocuments (de type ListeDocuments);
  2 accesseurs;
  1 méthode void AjouterEntrée(Document document, Auteur[] auteurs) qui ajoute un document à la liste des documents, et son (ou ses) auteur(s) à la liste des auteurs (s’ils s’agissent de nouveaux auteurs);
  2 méthodes : void AjouterEntrées(Document[] documents, Auteur[] auteurs), qui ajoute un tableau de documents à la liste des documents, et leurs auteurs à la liste des auteurs (s’ils s’agissent de nouveaux auteurs);
  1 méthode void SupprimerAuteur(string nom) qui supprime tous les auteurs de la liste dont le nom coïncide avec le nom passé en argument de la méthode, et qui supprime leurs documents respectifs de la liste des documents;
  1 méthode string DocumentsParAuteurs() qui retourne le nom de chaque auteur avec le nombre de ses documents;
  1 méthode void TrierAuteursParDocuments() qui trie les auteurs par le nombre de leurs documents dans le sens décroissant;
Travail à réaliser :
a. Écrire les classes ListeAuteurs, ListeDocuments, et Librairie.
b. Créer un jeu de tests.



Activité d’apprentissage 17
Module 11 Programmation orientée objet
Précision C Exploiter les classes de collections.
Code Activité C005
Activité Utilisation des classes "Hashtable", "SortedList" et "SortedList<T>".
Durée  

Phase d’apprentissage 5 heures

TRANSFERT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Identifier le besoin d’utiliser une "Hashtable" ou une "SortedList".
Manipuler les propriétés et les méthodes des classes "Hashtable" et "SortedList".
Respecter les contraintes du transtypage lors de l’utilisation d’une "Hashtable" ou une "SortedList".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  GESTION D’UN ÉTABLISSEMENT SCOLAIRE « PARTIE 2 »
Dans notre établissement scolaire, nous souhaitons enregistrer les données des enseignants, des étudiants et des cours dans des listes qui respectent les consignes suivantes :
  Dans la liste des cours, il faut s’assurer qu’il n’existe pas de doublons (deux cours ayant le même code cours);
  Chaque enseignant sera définie par une liste de cours (au lieu d’un tableau de cours);
  La liste des enseignants doit être triée par leurs matricules;
  Dans la liste des étudiants, il faut s’assurer qu’il n’existe pas de doublons (deux étudiants ayant le même code étudiant);
Pour créer ces listes, nous allons s’appuyer sur les classes SortedList et Hashtable.
Une classe appelée ListeCours qui est une Hashtable, contient :
  1 méthode void AjouterCours(Cours cours) qui ajoute un nouveau cours à la liste des cours;
  1 méthode void AjouterCours(Cours[] cours) qui ajoute un tableau de nouveaux cours à la liste des cours;
  1 méthode Cours RechercherParCode(string code) qui retourne le cours dont le code est passé en argument de la méthode;
  1 méthode Cours RechercherParIntitulé(string intitulé) qui retourne le cours dont l’intitulé est passé en argument de la méthode;
  1 méthode void SupprimerParCode(string code) qui supprime le cours dont le code est passé en argument de la méthode;
  1 méthode void SupprimerParIntitulé(string intitulé) qui supprime le cours dont l’intitulé est passé en argument de la méthode;
  1 méthode int getNombreCours() qui retourne le nombre de cours dans la liste;
  1 méthode ToString().
Modifier la classe Enseignant, et ajouter les méthodes :
  1 méthode void AffecterCours(Cours cours) qui affecte un nouveau cours à un enseignant;
  1 méthode void AffecterCours(Cours[] cours) qui affecte un ensemble de nouveaux cours à un enseignant;
  1 méthode void EnleverCours(string code) qui annule l’affectation d’un cours à un enseignant;
Une classe appelée ListeEnseignants, qui est une liste triée, contient :
  1 méthode void AjouterEnseignant(Enseignant enseignant) qui ajoute un nouveau enseignant à la liste des enseignants;
  1 méthode void AjouterEnseignants(Enseignant[] enseignants) qui ajoute un tableau de nouveaux enseignants à la liste des enseignants;
  1 méthode Enseignant RechercherParMatricule(string matricule) qui retourne l’enseignant dont le matricule est passé en argument de la méthode;
  1 méthode ListeEnseignants RechercherParCours(string nomCours) qui retourne une liste triée des enseignants dont le nom du cours qu’ils enseignent est passé en argument de la méthode;
  1 méthode ListeEnseignants RechercherParCours(Cours cours) qui retourne une liste triée des enseignants dont le cours qu’ils enseignent est passé en argument de la méthode;
  1 méthode void SupprimerParMatricule(string matricule) qui supprime l’enseignant dont le matricule est passé en argument de la méthode;
  1 méthode int getNombreEnseignants() qui retourne le nombre d’enseignants dans la liste;
  1 méthode SortedList<DateTime, Enseignant> Retraite() qui retourne une liste triée par date de naissance, des enseignants qui vont avoir leur retraite cette année;
  1 méthode ToString().
Une classe appelée ListeEtudiants, qui est une Hashtable, contient :
  1 méthode void AjouterEtudiant(Etudiant étudiant) qui ajoute un nouveau étudiant à la liste des étudiants;
  1 méthode void AjouterEtudiants(Etudiant[] étudiants) qui ajoute un tableau de nouveaux étudiants à la liste des étudiants;
  1 méthode Etudiant RechercherParCode(string code) qui retourne l’ étudiant dont le code est passé en argument de la méthode;
  1 méthode ListeEtudiants RechercherParCours(string nomCours) qui retourne une liste triée des étudiants dont le nom du cours qu’ils suivent est passé en argument de la méthode;
  1 méthode ListeEnseignants RechercherParCours(Cours cours) qui retourne une liste triée des étudiants dont le nom du cours qu’ils suivent est passé en argument de la méthode;
  1 méthode void SupprimerParCode(string code) qui supprime l’étudiant dont le code est passé en argument de la méthode;
  1 méthode int getNombreEtudiants() qui retourne le nombre d’étudiants dans la liste;
  1 méthode Etudiant getPremier() qui retourne l’étudiant le mieux classé;
  1 méthode List<Etudiant> Réussi() qui retourne la liste des étudiants qui sont au-dessus de la moyenne;
  1 méthode List<Etudiant> Classement() qui retourne une liste triée des étudiants par moyenne dans l’ordre décroissant (on impose le tri par une SortedList<double, Etudiant> dans un premier lieu, et puis une inversion);
  1 méthode ToString().
Une classe appelée Classe, contient :
  4 variables d’instance privées : nomClasse, listeCours, listeEnseignantsClasse et listeEtudiantsClasse;
  4 accesseurs.
  1 méthode void AjouterEtudiant(Etudiant étudiant) qui ajoute un nouveau étudiant à la liste des étudiants et lui affecte la liste de cours de la classe;
  1 méthode void AjouterEtudiants(Etudiant[] étudiants) qui ajoute un tableau de nouveaux étudiants à la liste des étudiants et leur affecte la liste des cours de la classe;
  1 méthode void AjouterEnseignant(Enseignant enseignant) qui ajoute un nouveau enseignant à la liste des enseignants, si l’un des cours qu’il enseigne existe dans la liste des cours de la classe, et qu’aucun enseignant ne prend en charge ce cours;
  1 méthode void AjouterEnseignants(Enseignant[] enseignants) qui ajoute un tableau de nouveaux enseignants à la liste des enseignants, si l’un des cours qu’ils enseignent existe dans la liste des cours de la classe, et qu’aucun enseignant ne prend en charge ce cours;
Une classe appelée Institut, qui est une liste de classes contient :
  1 variable d’instance privée : nomInstitut et listeClasses;
  2 accesseurs;
  1 méthode ListeEtudiants EtudiantsParClasse(string nomClasse) qui retourne la liste des étudiants d’une classe;
  1 méthode ListeEnseignants EnseignantsParClasse(string nomClasse) qui retourne la liste triée des enseignants d’une classe;
  1 méthode ListeEnseignants EnseignantsParClasse(string nomClasse) qui retourne la liste triée des enseignants d’une classe;
  1 méthode ListeEnseignants Enseignants() qui retourne la liste des enseignants de l’institut;
  1 méthode int getNombreEtudiants() qui retourne le nombre d’étudiants dans l’institut;
  1 méthode double TauxRéussite() qui retourne le taux de réussite des étudiants de l’institut;
  1 méthode List<Etudiant> getPremiers() qui retourne les 3 premiers étudiants de l’institut;
Travail à réaliser :
a. Écrire les quatre classes ListeCours, ListeEnseignants, ListeEtudiants, Classe et Institut.
b. Créer un jeu de tests.
Activité d’apprentissage 18
Module 11 Programmation orientée objet
Précision C Exploiter les classes de collections.
Code Activité C006
Activité Exploitation de la classe "Regex".
Durée  

Phase d’apprentissage 4 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer des modèles d’expressions rationnels.
Utiliser les méthodes de vérification de la classe "Regex".
Utiliser les méthodes de recherche de la classe "Regex".
Utiliser les méthodes de manipulation des données de la classe "Regex".
Utiliser la méthode "Split".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.


DESCRIPTION DE L’ACTIVITÉ
  ANNUAIRE ÉLECTRONIQUE
On souhaite réaliser un annuaire électronique qui contient les informations de contact de plusieurs personnes résidants au Maroc Les informations d’un contact correspondent à son nom, son adresse postale, son numéro de téléphone et son adresse e-mail.
On veut que les informations d’un contact respectent les règles suivantes :
  Le nom commence par une lettre en majuscule, et ne contient que des lettres, des espaces ou des tirets « - ». On ne doit pas avoir deux espaces ni deux tirets successifs.
  L’adresse d’une personne correspond à une des deux formes suivantes :
Si la personne habite dans un appartement :
« N° d’appartement, nom immeuble, nom de la résidence ou de la rue ou du boulevard, nom du quartier, code postal, nom de la ville ».
Si la personne habite dans un local indépendant :
« N° du local, nom de la rue ou du boulevard, nom du quartier, code postal, nom de la ville ».
Les entités d’une adresse sont séparées par des virgules. Chaque entité de l’adresse doit commencer par une lettre en majuscule. Le code postal doit comprendre 5 chiffres.
  Le numéro de téléphone peut soit commencer par l’indicatif national « +212 », « +212 (0) » ou « 0 » tout simplement, suivi du chiffre « 5 » pour un téléphone fixe ou « 6 » pour un téléphone mobile, suivi d’une séquence de 8 chiffres. La forme d’un numéro peut être :
+212537907621
+212 (0) 537 907 621
+212 (0) 537-907-621
+212 (0) 537.907.621
05 37 90 76 21
05-37-90-76-21
05.37.90.76.21
  Les adresses e-mail doivent être sous la forme :
 « adresse@messagerie.nomDomaine ». Les noms de domaines acceptés sont : « .com », « .ma », « .fr », et « .net ».
Pour réaliser un tel annuaire, on se basera sur l’utilisation des propriétés et des méthodes des classes String et Regex.
Une classe appelée Contact contient :
  5 variables d’instance privées (de type string): nom, adresse, téléphone, et email;
  4 méthodes de classe booléennes privées (en utilisant la méthode IsMatch(string chaîne)):
ValiderNom(string chaîne), ValiderAdresse(string chaîne), ValiderTéléphone(string chaîne), et ValiderEmail(string chaîne);
  4 accesseurs;
  1 constructeur d’initialisation;
  1 méthode booléenne : ValiderContact() qui valide toutes les informations d’un contact;
  1 méthode ToString().
Une classe appelée ListeContacts qui est une liste générique de contacts, contient :
  1 méthode void AjouterContact(Contact contact) qui ajoute un contact à la liste des contacts s’il est valide;
  1 méthode void AjouterContacts(Contact[] contacts) qui ajoute un tableau de contacts à la liste des contacts s’ils sont valides;
  1 méthode void SupprimerContact(string email) qui supprime un contact par son e-mail de la liste des contacts si l’e-mail en argument est valide;
  1 méthode ListeContacts ContactsParInitial(char initial) qui retourne une liste des contacts dont le nom commence par l’initial passé en argument de la méthode;
  1 méthode ListeContacts ContactsParVille(string nomVille) qui retourne une liste des contacts qui habitent dans une ville dont le nom est passé en argument;
  1 méthode ListeContacts ContactsParCP(string codePostal) qui retourne une liste des contacts qui habitent dans une région dont le code postal est passé en argument;
  1 méthode ListeContacts ContactsParIndicatif_Tél(string indicatif) qui retourne une liste des contacts qui ont un téléphone fixe dont l’indicatif est passé en argument (par exemple : « 37 » pour Ouazzane  les numéros sont de la forme : « 0537XXXXXX »);
  1 méthode ListeContacts ContactsParMessagerie(string messagerie) qui retourne une liste des contacts qui ont une messagerie dont le nom est passé en paramètre (par exemple la messagerie de l’OFPPT est « ofppt.ma »  le personnel de l’OFPPT ont des adresses e-mail comme : « nomUtilisateur@ofppt.ma »);
  1 méthode void UnifierTéléphone(string modèle) qui unifie tous les numéros de téléphone suivant le modèle passé en argument;
  1 méthode void MigrerMessagerie(string messagerie) qui permet de faire migrer les comptes de messagerie des contacts vers une nouvelle messagerie dont le nom est passé en argument (sauf ceux qui ont déjà des comptes dans cette messagerie). Le modèle des nouvelles adresse messagerie est « nomContact@nouvelleMessagerie » tout en remplaçant les espaces du nom par des points (par exemple : si le nom du contact est « ALAOUI Alae-eddine », et la nouvelle messagerie est « ofppt.ma »  la nouvelle adresse est : « ALAOUI.Alae-eddine@ofppt.ma »);
Travail à réaliser :
a. Écrire les deux classes Contact, et ListeContacts.
b. Créer un jeu de tests.


Activité d’apprentissage 19
Module 11 Programmation orientée objet
Précision D Programmer les exceptions.
Code Activité D001
Activité Étude des exceptions.
Durée  

Phase d’apprentissage 2 heures

BASE
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Détecter les exceptions.
Rediriger les exceptions.
Utiliser des blocs "try…catch".
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.






DESCRIPTION DE L’ACTIVITÉ
  UN PROGRAMME INCOHÉRENT
Soit le programme suivant:
using System;
namespace Programme_incohérent
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] tabInt= new int[5];
            for(int i = 0; i < 6; i++)
               Console.WriteLine("tabInt["+i+"]="+ tabInt[i]);
            Console.WriteLine("Entrer nombre1:");
            int nombre1 = int.Parse(Console.ReadLine());
            Console.WriteLine("Entrer nombre2:");
            int nombre2 = int.Parse(Console.ReadLine());
            int res = nombre1 / nombre2;
            double nombre3 = int.Parse("Pi");
            Console.WriteLine("Résultat de la division: " + res);
        }
    }
}
Travail à réaliser :
a. Donner les noms des exceptions provoquées par le programme.
b. Détecter les instructions qui provoquent des exceptions.
c. Rediriger les exceptions vers la console.
Activité d’apprentissage 20
Module 11 Programmation orientée objet
Précision D Programmer les exceptions.
Code Activité D002
Activité Création des exceptions personnalisées.
Durée  

Phase d’apprentissage 3 heures

ENTRAÎNEMENT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Créer des classes d’exceptions.
Créer des super classes d’exceptions.
Lever des exceptions.
Propager des exceptions.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.






DESCRIPTION DE L’ACTIVITÉ
  LES ENTIERS NATURELS
Dans cette activité, nous allons créer une application orientée objet permettant de manipuler des entiers naturels et les utiliser dans des opérations arithmétiques usuelles dans le résultat est entier naturel.
Une classe appelée Naturel contient :
  1 variable d’instance privée nombre (de type ulong);
  1 accesseur. Une exception de type DépassementCapacitéException est levée si le nombre en argument est plus grand que la valeur maximale du type ulong;
  1 constructeur d’initialisation et 1 constructeur de recopie Une exception de type DépassementCapacitéException est levée si le nombre en argument est plus grand que la valeur maximale du type ulong;
  1 méthode booléenne : isNul() qui teste si le nombre courant est nul;
  1 méthode booléenne : isPair() qui teste si le nombre courant est un nombre pair;
  1 méthode booléenne  isDiviseur(Naturel nombre) qui teste si le nombre courant divise le nombre en argument. Une exception de type DivisionInfinieException est levée si le nombre courant est nul, ou de type DivisionIndéterminéeException si les deux nombres sont nuls;
  1 méthode booléenne  isMultiple(Naturel nombre) qui teste si le nombre courant est un multiplicateur du nombre en argument. Une exception de type DivisionInfinieException est levée lorsqu’on veut tester si un nombre nul est un multiple d’un nombre non nul;
  1 méthode List<Naturel> getDiviseurs() qui retourne une liste des diviseurs d’un entier naturel. Une exception de type DivisionInfinieException est levée si l’entier naturel est nul;
  1 méthode List<Naturel> getMultiples(Naturel nombre) qui retourne une liste des multiples du nombre courant jusqu’au nombre en argument. Une exception de type BorneException est levée si le nombre en argument est plus petit que le nombre courant;
  1 méthode booléenne  isPremier() qui teste si le nombre est un nombre premier;
  5 méthodes (de type Naturel) :
Plus(Naturel nombre) qui additionne le nombre courant au nombre en argument;
Moins(Naturel nombre) qui soustrait le nombre en argument du nombre courant. Une exception de type SoustractionException; est levée si le résultat n’est pas un entier naturel;
Fois(Naturel nombre) qui multiplie le nombre courant par le nombre en argument. Une exception de type DépassementCapacitéException est levée si le résultat dépasse la valeur maximale du type ulong;
DiviséPar(Naturel nombre) qui divise le nombre courant par le nombre en argument. Une exception de type DivisionInfinieException est levée si le résultat est infini, ou de type DivisionIndéterminéeException si le résultat est indéterminé, ou de type NonDivisieurException si le résultat n’est pas entier,
Divise(Naturel nombre) qui divise le nombre en argument par le nombre courant. Une exception de type DivisionInfinieException est levée si le résultat est infini, ou de type DivisionIndéterminéeException si le résultat est indéterminé, ou de type NonMultipleException si le résultat n’est pas entier,
  1 méthode Naturel PGCD(Naturel nombre) qui retourne le Plus Grand Commun Diviseur de deux entiers naturels.
Remarque : Pour tout   entier :

  1 méthode Naturel PPCM(Naturel nombre) qui retourne le Plus Petit Commun Multiple de deux entiers naturels.
Remarque : Si   ou   est nul :

  1 méthode Naturel Puissance(Naturel puissance) qui retourne la puissance d’un entier naturel. Une exception DépassementCapacitéException est levée si le résultat dépasse la valeur maximale du type ulong;
  1 méthode Naturel RacineCarrée() qui retourne la racine carrée d’un entier naturel. Une exception type RacineException si la racine carrée n’est pas entière,
  1 méthode Naturel Sigma() qui retourne la somme successive des nombres de 0 à un entier naturel. Une exception DépassementCapacitéException est levée si le résultat dépasse la valeur maximale du type ulong;
  1 méthode Naturel Factoriel() qui retourne la factorielle d’un entier naturel. Une exception DépassementCapacitéException est levée si le résultat dépasse la valeur maximale du type ulong;
  1 méthode Naturel Arrangement(Naturel k) qui retourne l’arrangement d’un entier naturel parmi k. Une exception BorneException est levée si k est supérieur au nombre courant.
Rappel :

  1 méthode Naturel Combinaison(Naturel k) qui retourne la combinaison d’un entier naturel parmi k. Une exception BorneException est levée si k est supérieur au nombre courant.
Rappel :

  1 méthode ToString().
Travail à réaliser :
a. Écrire les différentes classes d’exception.
b. Écrire la classe Naturel.
c. Créer deux classes NombreException et OpérationException qui regroupent respectivement les exceptions sur les nombres et les exceptions sur les opérations.
d. Créer un jeu de tests.


Activité d’apprentissage 21
Module 11 Programmation orientée objet
Précision E Assurer la persistance des objets.
Code Activité E001
Activité Transfert des données vers différents types de fichiers.
Durée  

Phase d’apprentissage 5 heures

TRANSFERT
Détails sur les objectifs visés par l’activité Cette activité d’apprentissage doit vous permettre de :
Enregistrer les données textuelles
Sérialiser et dé-sérialiser des collections d’objets.
Exploiter les différents formats de fichiers (TXT, BIN, et XML).
Créer des méthodes paramétrées pour la sérialisation et la dé-sérialisation.
Gérer les exceptions lors des opérations de sérialisation ou de dé-sérialisation.
Matière d’œuvre et/ou  outillage                        

Micro-Ordinateur;
Système d’exploitation Microsoft Windows;
EDI : Microsoft Visual Studio.




DESCRIPTION DE L’ACTIVITÉ
  GESTION DES RÉSERVATIONS DANS UN HÔTEL
Le directeur d’un hôtel souhaite gérer les réservations effectuées par la clientèle, et conserver la trace des données de la clientèle et des réservations pour d’éventuelles traitements (statistiques d’occupation des chambres, liste des clients fidèles,…).
L’hôtel comporte un ensemble de chambres, et on prévoit d’ajouter de nouveaux compartiments au fur et à mesure de l’épanouissement de l’activité à l’hôtel.
Chaque chambre est caractérisée par son numéro, son type (simple ou double), sont état (libre ou occupée), son nombre de lits et son prix.
Lorsqu’un client souhaite réserver une chambre, on retient son numéro de CIN s’il est marocain, ou le numéro de sa carte d’immatriculation s’il s’agit d’un étranger, son nom, sa ville, son pays et son numéro de téléphone.
Dès que le client réserve une chambre, on enregistre les données de sa réservation, comportant toutes les informations du client et de la chambre réservée, la date d’arrivée du client et le nombre de jours qu’il a choisi. Puis on enregistre ses données dans une fiche qu’on imprime et on donne au client pour pouvoir l’identifier par la suite.
Les données des chambres, des clients et des réservations sont bien conservées dans des listes respectives qu’on peut exporter dans des fichiers et les imprimer par la suite.
Travail à réaliser :
a. Écrire les classes Chambre, Client, et Réservation.
b. Dans la classe Réservation, ajouter une méthode Imprimer_Réservation() qui enregistre les informations d’un client dans fichier texte.
c. Écrire la classe Hôtel, permettant d’assurer :
  L’ajout d’une nouvelle chambre dans la liste des chambres.
  La recherche d’une chambre par son numéro.
  L’ajout d’un nouveau client dans la liste des clients.
  La recherche d’un client par son numéro.
  La réservation d’une chambre pour un client.
  Le calcul du nombre de réservations d’une chambre dans une année.
  Le calcul de la durée totale d’occupation d’une chambre dans une année.
  Le calcul du nombre de réservations d’un client.
  Le calcul de la durée totale d’occupation d’un client dans une année.
  L’annulation de la réservation d’une chambre pour un client.
  La détermination du client occupant une chambre.
d. Dans la classe Hôtel, ajouter des méthodes permettant de :
  Enregistrer la liste des chambres dans un fichier binaire.
  Importer la liste des chambres depuis un fichier binaire.
  Enregistrer la liste des clients dans un fichier binaire.
  Importer la liste des clients depuis un fichier binaire.
  Enregistrer la liste des réservations pendant l’année l’année en cours dans un fichier XML.
  Importer la liste des réservations pendant le jour actuel depuis un fichier XML.
  Importer la liste des réservations pendant la semaine en cours depuis un fichier XML.
  Importer la liste des réservations pendant le mois en cours depuis un fichier XML.
  Enregistrer une liste de chambres triées par le nombre de réservations dans un fichier texte.
  Enregistrer une liste de chambres triées par la durée totale d’occupation dans un fichier texte.
  Enregistrer la liste des clients fidèles (qui ont effectué plus de 100 réservations, ou qui ont accumulé une durée d’occupation de plus de 180 jours).
e. Créer une classe d’exception EcrasementFichierException,  qui assure la gestion des exceptions lors de la sérialisation, s’il y a un risque d’écrasement d’un fichier existant.
f. Créer des classes d’exceptions FichierInexistantException, FichierVideException, et FormatIncohérentException qui assurent la gestion des exceptions lors de la dé-sérialisation, respectivement si un fichier est introuvable, ou son contenu est vide, ou le format de ses données est incompatible (dé-sérialisation XML d’un fichier binaire par exemple).
g. Créer un jeu de tests.



Posts les plus consultés de ce blog

video sur une application simple native en android

Best Website Builders Sorted by Popularity

46 Best Website Builders Sorted by Popularity If you're looking for a tip on how to create a website with minimum effort, you can try using tools like a free website builder. It’s crazy how many websites exist on the web at present times. The variety and versatility of websites are always changing and growing. We can’t imagine a person without having a personal website or a website for his businesses and activities. But there are still individuals who don’t have one. There are lots of on- and offline solutions for novices and those who want to showcase something new - website builders. What is a website builder? Website builders are the right choice for people with no programming experience and limited time and budget. But sometimes even professionals can gain access to these tools, because the majority of them gives a visual over a website and let their users create websites as fast as they can. Modern top website builders have a plenty of modern functionaliti

easy drag-and-drop website builder

WINDOWS MAC LINUX WEB IPHONE ANDROID PRODUCTIVITY DEVELOPMENT GAMES SOCIAL BUSINESS Lists Sign up Login Crowdsourced software recommendations Which app do you want to replace? Find apps 32 Like Mobirise Create cutting-edge, beautiful websites that look amazing on any devices and browsers.  Created by Mobirise Website Builder Free   Open Source   Mac OS X   Windows   Android     Mobirise - is a super easy drag-and-drop website builder. Drop the blocks you like into your page, edit content inline and publish - no technical skills required. Develop bootstrap-based, fully responsive sites that look amazing on any devices and browsers. Preview how your website will appear on smartphones, tablets and desktops directly in the visual editor. Free for commercial and personal use. Download for Windows, Mac, Android. Boost your ranking - Sites made with Mobirise are 100% mobile-friendly according t