et Programmation Objet
Transcription
et Programmation Objet
UMONS - Faculté Polytechnique Service d’Informatique www.ig.fpms.ac.be Rue de Houdain, 9 B- 7000 Mons www.umons.ac.be et Programmation Objet Travaux Pratiques d’Informatique II 2ème Bachelier par Mohammed BENJELLOUN Avec la participation de : Sa. Mahmoudi F. Lecron A. Guttadauria Année académique 2010-2011 Table des matières Consignes .............................................. 3 TP 1 Manipulation d’un tableau de structures et de classes . . . . . 4 TP 2 Constructeurs, destructeurs et opérateurs. . . . . . . . . . . . . . . 5 TP 3 Vector et List et algorithmes de la librairie STL. . . . . . . . . . . 6 TP 4 L'héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Exemples d’examens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 1 Consignes Si malgré la préparation de chaque TP, vous n’avez pas terminé à la fin de la séance, vous devrez le continuer seul et poser vos éventuelles questions avant le TP suivant. Vous pouvez venir nous les poser directement ou les poser via le forum. Cette remarque est valable pour tous les travaux pratiques de ce cours. Pour rappel, les travaux pratiques sont obligatoires. Nos Emails : [email protected] [email protected] [email protected] [email protected] Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 2 TP1 But : Manipulation d’un tableau de structures contenant des fonctions membres. Manipulation d’un tableau de classes contenant des fonctions membres. Ecrire un programme qui gère un ensemble d’Etudiants et de Profs (Nmax=10). Si chaque étudiant a une structure de type struct Etudiant, chaque Prof est un objet de la classe PROF. Les déclarations de la structure et de la classe sont: struct Etudiant { int Id; string nom; void saisie(); void affiche(); }; class PROF { int Id; string nom; public : void saisie(); void affiche(); }; I) Ce programme doit d’abord gérer les Etudiants en utilisant en boucle le menu suivant : 1 : Ajouter au (début ou fin) et Affichage de tous les Etudiants 2 : Supprimer le début et Affichage du tableau 3 : Chercher un Etudiant selon son Id 4 : Tri selon NOM et Affichage du tableau II) Ensuite gérer les Profs en utilisant en boucle le menu suivant : 1 : Ajouter au (début ou milieu) et Affichage du T_P 2 : Supprimer le début et Affichage du tableau 3 : Chercher un Prof selon son Id 4 : Tri selon NOM et Affichage du tableau Afin de vous aider à démarrer votre programme, nous vous proposons le code source TP1_2bac.cpp sur Moodle. Ce code est une base contenant l’implémentation de quelques fonctions, que vous devez compléter. S’il vous reste du temps: • • • Chercher un Etudiant ou un Prof selon son Id et son nom. Créer Dynamiquement 1 Prof et Chercher s’il existe dans T_P. Que deviendra le programme si le tableau T_P est défini dynamiquement? Comment résoudre dans ce cas le point 1 (Prof): Ajouter … ? Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 3 TP2 But : Manipulation d’un tableau de classes. Se familiariser avec l‘utilisation de constructeurs, destructeurs, la définition d’opérateurs, variable statique, … Ecrire un programme qui gère un ensemble d’enseignants. Nous utiliserons une classe PROF dont les objets sont des enseignants caractérisés par les membres privés: int Id; string nom, Service; Dans cette classe on déclarera au moins : • deux méthodes, l’une pour saisir et l’autre pour afficher chaque objet de la classe (Saisie() et Affichage() ). • un constructeur permettant l’incrémentation automatique de l’Id (Prof1 : Id=1, Prof2 : Id=2, …). • un destructeur montrant la disparition d'instances d’objets, • la définition d’un opérateur == afin de comparer deux Profs. La comparaison s’effectuera selon le nom et le service. Si nécessaire, des fonctions membres peuvent être ajoutées à cette classe. Le programme doit gérer en boucle le menu suivant : 1 : Saisie et Affichage d’un Tableau de Profs T_P 2 : Ajouter au milieu et Affichage du T_P 3 : Supprimer le début et Affichage du tableau 4 : Créer Dynamiquement 1 Prof et Chercher s’il existe dans T_P 5 : Tri selon Id et Affichage du tableau 6 : Quitter S’il vous reste du temps: Définir une classe Etudiant dont les objets sont des étudiants caractérisés par int Id; string nom; 1’ : Saisie et Affichage d’un Tableau d’Etudiant T_E 2’ : Ajouter au milieu et Affichage du T_E Optimisez votre code afin de permettre la réutilisation des fonctions déjà implémentées (moyennant adaptation). Et si vous avez encore du temps : Que deviendra le programme si les tableaux sont remplacés respectivement par les conteneurs Vector et List. Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 4 TP3 But : Manipulation des conteneurs Vector et List et algorithmes de la librairie STL. Optimisation et création de code générique. Déclarer deux classes : Une classe Etudiant dont les objets sont des étudiants caractérisés par int Id; string nom; Une seconde classe PROF dont les objets sont des enseignants caractérisés par int Id; string nom, Service; Dans les deux classes (étudiants, enseignants), on déclarera au moins deux méthodes, l’une pour saisir et l’autre pour afficher chaque objet de la classe (Saisie() et affichage()). La manipulation des étudiants se fera en utilisant un conteneur List alors que les Profs seront rangés dans un conteneur Vector. Il faut d’abord choisir (0) entre Etudiants et Profs. S’il s’agit d’Etudiants on utilisera une List et s’il s’agit de Profs on utilisera Vector. Ce programme doit gérer en boucle le menu suivant : 0 : Choix entre Etudiants ou Profs 1 : Saisie et Affichage d’une List (Etud.) ou Vector (Profs) 2 : Ajouter au (début ou fin) et Affichage de l’ensemble 3 : Créer Dynamiquement 1 Element (Etud ou Prof) et Chercher s’il existe 4 : Tri selon NOM et Affichage de l’ensemble 5 : Tri selon Id et Affichage de l’ensemble 6 : Quitter Les choix seront traités via l’instruction case. Votre programme utilisera une série de fonctions permettant de séparer les tâches. Si nécessaire, des fonctions membres peuvent être ajoutées aux classes. On y prévoira au moins: • un constructeur par classe permettant l’incrémentation automatique de l’Id (Prof1 : Id=1, Prof2 : Id=2, … et Etud1 : Id1=1, Etud2 : Id2=2, ….). Optimisez votre code afin de permettre la réutilisation des morceaux de code. S’il vous reste du temps: Que deviendra le programme si les classes Etudiant et PROF héritent d’une classe Personne caractérisée par : int Id et string nom. Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 5 TP4 : Personne int Id ; string nom; public : void saisie(); void afficher(); Etudiant Prof int Note[3]; public : void saisie(); void afficher() string Service; Implémentez la hiérarchie de But : Manipulation des conteneurs Vector et List. Utilisation de l'héritage qui est un principe propre à la programmation orientée objet. Optimisation et Réutilisation de déclarations et de code. public : void saisie(); void afficher(); Direction string Titre; public : void saisie(); void afficher(); .. Ensuite, implémentez un programme qui doit gérer en boucle le Menu suivant : 1. 2. 3. 4. 5. Saisie et/ou Ajout Etudiants et affichage Saisie et/ou Ajout Profs et affichage Supprimer un Etudiant ou un Prof à la position P Doyen membre de Direction Calcule la Moyenne de chaque étudiant+affichage Chercher un Etudiant ou un Prof selon le nom Les Etudiants sont rangés dans une List alors que les Profs sont rangés dans un Vector. Il est possible d’ajouter des paramètres aux fonctions. Si nécessaire, d’autres fonctions membres peuvent être ajoutées aux classes. Optimisez votre code afin de permettre la réutilisation des morceaux de code. S’il vous reste du temps : Que deviendra le programme si l’on suppose que : • Chaque étudiant peut choisir le nombre de matières ainsi que leur titre. Tous les étudiants n’ont pas forcément les mêmes matières ni le même nombre (exp : Etud1 : Math et Info ; Etud2 : Chimie, Info, MécaRa, Anglais). • Un Prof ne peut enseigner qu’une seule matière (exp : Math ou Anglais, …) Chercher tous les étudiants qui ont cours avec le Prof X. Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 6 Et si vous avez encore du temps : Que deviendra le programme si un Prof peut enseigner une ou plusieurs matières (exp : Math et Anglais) et qu’il faille chercher tous les étudiants qui ont au moins un cours avec le Prof X. Justifiez votre choix du type pour ranger les matières. Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 7 Exemples d’examens Parcours Vita Ecrire un programme permettant de manipuler plusieurs listes dont le nombre est NL< Nmax=15. Il s’agit d’un Parcours Vita avec NL activités et un nombre de participants NP<Nmax. Les informations caractérisant chaque participant dans la liste sont les suivantes: Nom : chaîne de caractères Code : un caractère (A, B, …) Créer la (les) structure(s) nécessaire(s) à ce problème. Les fonctions Saisie(..) et Affichage(..) pour chaque élément (participant) sont déclarées dans la structure participant. Puis on transfert (NomC C) de Liste1 vers Liste2. Ce dernier sera inséré dans Liste2 après (NomD D). Ce programme doit gérer en boucle le menu suivant : Liste1 : Vide Liste2 : (NomD D) --- (NomC C) --- (NB B) ----(NA A) 1234- Liste1 : (NA A) --- (NB B) Liste2 : (NomD D) --- (NomC C) … Tant que liste1 n’est pas vide, on continue. A la fin on aura l’affichage suivant : SaisieL Liste1 et Affichage Liste1 TO Liste2 et Affichage Parcours et Affichage Fin 1- Saisie Liste1 et Affichage: Est constitué au moins de deux fonctions : SaisieL (…….) ; Dans cette fonction on demandera et on testera le nombre de participants (NP) à saisir et on effectuera la saisie des participants dans une liste par insertion en tête. Par exemple si NP=4 et l’utilisateur introduit au clavier : (NomD D) puis (NomC C) puis (NB B) et enfin (NA A) La liste est : Attention : Ici on affiche l’état des deux listes chaque fois qu’un participant passe de la liste1 à la liste2. Il faut soigner tous les affichages afin de bien suivre et comprendre les différentes séquences. 3- Parcours et Affichage: ! Ici on demandera à l’utilisateur le nombre NL et on y fera traverser les NP participants comme le montre la figure générale (début). On affiche toutes les listes chaque fois que toute l’équipe passe d’une liste à l’autre. Si par exemple NL=3 on affichera: Liste1 : (NA A) --- (NB B) --- (NomC C) --- (NomD D) Liste2 : Vide Liste3 : Vide --------- Affichage(…….) ; (NA A) --- (NB B) --- (NomC C) --- (NomD D) Liste1 : Vide Liste2 : (NomD D) --- (NomC C) --- (NB B) ----(NA A) Liste3 : Vide --------- 2- Liste1 Liste2 et Affichage: Liste1 : Vide Liste2 : Vide Ici, comme si les participants sautent, un par un, de la poutre1 Liste3 : (NA A) --- (NB B) --- (NomC C) --- (NomD D) (Liste1) à la poutre2 (Liste2). On applique (FIFO), c'est-àdire, on retire d’abord le D de Liste1, on insère D dans Liste2 RQs : et on affiche liste1 et liste2. Utilisez les règles de bonnes pratiques étudiées durant les travaux Liste1 : (NA A) --- (NB B) --- (NomC C) pratiques telles que l’indentation syntaxique, la programmation modulaire, libérer la mémoire d’un élément supprimé … Liste2 : (NomD D) Travaux Pratiques d’Informatique II Mohammed Benjelloun Umons FPMs : Service d’Informatique 2010-11 8 Le poulailler Volaille Implémentez la hiérarchie de classes en face : la classe de base Volaille et ses classes dérivées : Poule, Coq, Œuf ainsi que les différentes fonctions membres. On considère que le poids d’un œuf = 0,1 poids de la poule. Il est possible d’ajouter des paramètres aux fonctions et/ou d’ajouter d’autres fonctions. string Nom ; public : void saisie(); void affiche(); Poule Ce programme doit gérer en boucle le Menu suivant : int Poids ; 2- Créer un Tableau Dynamique de poules + Affichage 3567- Créer un coq + Affichage Le coq fait cocorico et toutes les poules pondent Le coq dit CoCo et une poule/2 pond Fin (on tue tout le poulailler !!) public : void saisie(); void affiche(); void pondre(??); 1- Créer Tableau Dynamique de Poules et Affichage: Oeuf Est constitué au moins de deux fonctions : SaisiePoule (…….) ; Dans cette fonction on demandera et on testera le nombre de Poules (NP<Max=10) à saisir et on effectuera la saisie dans un Tableau Dynamique. Coq string Description ; public : void saisie(); void affiche(); void cocorico( ??); void CoCo( ??); char Qualite; public : void saisie(); void affiche(); Voici un exemple d’exécution du programme Menu : ******* 1. Créer un Tb Dyn poule + Af. 2. Créer un coq + Affichage 3. Le coq fait cocorico et toutes les poules pondent 4. Le coq dit CoCo poule/2 5. Fin Choix : 1 Combien de poules ? : 4 Le Nom ? : Poule1 Le poids ? : 200 Le Nom ? : Poule2 Le poids ? : 180 Le Nom ? : Poule3 Le poids ? : 1200 Le Nom ? : Poule4 Le poids ? : 1000 Poule4 (1000) Poule3 (1200) Poule2 (180) Poule1 (200) Menu : ******* Choix : 2 Le Nom ? : M_CoQ Description ? : BeauCoQ Menu : ******* Choix : 4 (Une poule sur 2) L'oeuf a bien ete pondu et pese : 100(gr) Qualite de l'oeuf (A,B ou C)? : A Son Nom : M_CoQ Description : BeauCoQ L'oeuf a bien ete pondu et pese : 18(gr) Qualite de l'oeuf (A,B ou C)? : A Menu : ******* Choix : 3 L'oeuf a bien ete pondu et pese : 100(gr) Qualite de l'oeuf (A,B ou C)? : A L'oeuf a bien ete pondu et pese : 120(gr) Qualite de l'oeuf (A,B ou C)? : B L'oeuf a bien ete pondu et pese : 18(gr) Qualite de l'oeuf (A,B ou C)? : A L'oeuf a bien ete pondu et pese : 20(gr) Qualite de l'oeuf (A,B ou C)? : C Travaux Pratiques d’Informatique II Mohammed Benjelloun Rqs : Normalement pas de Classe amie. Utilisez les règles de bonnes pratiques étudiées durant les travaux pratiques telles que l’indentation syntaxique, la programmation modulaire, libération de mémoire. Umons FPMs : Service d’Informatique 2010-11 9