Département d informatique Professeur : Clermont Dupuis Université Laval Bureau : 3976 IFT-19946 Programmation orientée objet Date : 17 décembre 2001 Aucune documentation permise. Examen sur 60 Question # 1. (3 points) Considérons une classe abstraite «Objet». (i) Que renferme cette classe? (ii) Quelle conséquence cette propriété a-t-elle sur la classe «Objet»? (iii) Quelle conséquence cette propriété a-t-elle sur les classes dérivées de la classe «Objet»? Question # 2. (3 points) En dehors des principes d héritage et de polymorphisme, le concept de classe apporte un élément nouveau par rapport au concept de type de donnée. Il s agit du principe d encapsulation. À travers ce principe d encapsulation, trois opportunités s offrent à nous. Quelles sont-elles? Question # 3. (3 points) Considérons une classe «Element» renfermant des fonctions et classes amies. (i) Quel est le privilège que détiennent ces fonctions et classes amies? (ii) Doit-on accorder ce privilège systématiquement? Dites pourquoi? Question # 4. (4 points) Dans quelle situation le polymorphisme est appelé à jouer un rôle? Soyez explicite. Donnez un exemple concret décrivant cette situation.
Question # 5. (4 points) Distinguez entre la relation d héritage et la relation d agrégation ou d association. Donnez deux contextes où l utilisation du concept d héritage n est pas souhaitable. Soyez explicite. Question # 6. (2 points) Considérons les classes «Objet», «Polygone» et «Triangle» où «Objet» est une classe de base; «Polygone» est une classe dérivée de la classe «Objet» et «Triangle» est une classe dérivée de la classe «Polygone». La classe de base «Objet» renferme la donnée membre suivante : enum statut categorie; où le type de donnée statut est défini comme suit : enum statut { objet, polygone, triangle }; Comment faites-vous pour initialiser correctement la donnée membre categorie lorsque vous créez des objets de l une ou l autre des trois classes? Expliquez! Question # 7. (2 points) En quoi les fonctions membres de type const d une classe viennent appuyer le principe d encapsulation? Question # 8. (3 points) Décrivez trois approches vous permettant de construire une classe «Pile» où la définition de chaque élément de la pile est inconnue lors de la conception et de l implantation de cette classe. Question # 9. (6 points) Pour développer des systèmes informatiques, on doit prendre en compte plusieurs critères de qualité d un logiciel. Nommez-en trois. Donnez leur signification. Question # 10. (6 points) Décrire de façon détaillée les étapes de mise en œuvre d un programme test. 2
Question # 11. (10 points) Vous partez en expédition prochainement. Vous devez déterminer les objets que vous transporterez dans votre sac à dos sachant que vous ne voulez pas transporter un poids de plus de W kg. Sachant que chaque objet est décrit comme suit : - code entier unique représentant l'objet, - nom de l'objet (au plus 15 caractères), - nombre d'unités (valeur entière), - poids unitaire de l'objet (kg.), vous supposez l existence d une classe «Objet» permettant de créer un objet, d accéder aux caractéristiques de l objet ou de les mettre à jour. On vous demande de construire une classe "Sac_a_dos" qui renfermera les objets que vous emporterez tout en n'excédant pas le poids maximum W. Vous devez pouvoir créer un nouveau sac à dos avec un poids maximum défini, ajouter un nouvel objet ou en enlever un à votre sac à dos à partir de son code unique, vérifier la présence ou non d un objet dans le sac à dos à partir de son code numérique et détruire le sac à dos au complet. Donnez uniquement la spécification fonctionnelle et la représentation interne des données de la classe «Sac_a_dos» (i.e. le contenu du fichier en-tête «Sac_a_dos.h») en supposant que la classe «Objet» est disponible. Note : L utilisation d un constructeur et d un destructeur est obligatoire. Question # 12. (6 points) Soit la spécification de la classe «Polynome» suivante : class Polynome { /* Spécification fonctionnelle de la classe "Polynome". Composantes : Chaque composante représente un terme du polynôme de degré n. Structure : La structure choisie est une suite de n termes. Domaine : Le i ième terme du polynôme est de la forme a i x i : */ protected : int degre; float * coefficients; 3
public : Polynome(int n); /* Permet de construire un polynôme nul de degré n. Pré - Nil. Post - Nous avons un polynôme nul de degré n. */ void Inserer_Terme(int i, float Coefficient); /* Permet d'insérer le i ième terme dont le coefficient est passé en paramètre. Pré - Le polynôme de degré "degre" a déjà été créé. 0 <= i <= degre. Post - Le i ième terme fait maintenant partie du polynôme. */ float Acces_Coefficient_Terme(int i); /* Permet d'accéder au coefficient du i ième terme du polynôme. Pré - Le polynôme de degré "degre" a déjà été créé. 0 <= i <= degre. Post - Retourne le i ième coefficient du polynôme. */ }; (i) float Evaluer_polynome(float x); /* Permet d'évaluer le polynôme à x et retourne le résultat. Pré - Le polynôme est déjà créé. Post - Retourne la valeur du polynôme évalué à x. */ Réécrire la spécification de cette classe c est-à-dire, modifier les fonctionnalités de la classe «Polynome» afin de pouvoir prendre en compte la portion de code suivante : Polynome P(3); P[2] = 3.9f; P[1] = 2.7f; cout << P[0] << P[1] << P[2] << P[3]; cout << P(2.5); (ii) Donnez l implantation de la classe «Polynome» à partir de la spécification fournie en (i) (i.e. le contenu du fichier «Polynome.cpp»). 4
Question # 13. (2 points) Soit la définition d une classe «Collection_de_tableaux», vous décidez d introduire une nouvelle fonction permettant d afficher à l écran les caractéristiques de chaque tableau d une collection. En ajoutant dans le fichier «Collection_de_tableaux.h» la déclaration appropriée, vous devez faire en sorte que cette fonction d affichage soit la plus simple possible d utilisation. Indiquez un moyen pour y arriver. Question # 14. (2 points) Qu entend-on par pointeur généralisé? Question # 15. (2 points) Dans la librairie STL, on retrouve plusieurs conteneurs comme par exemple, les conteneurs «map» et «set» désignant respectivement un ensemble et un ensemble ordonné. Dans chaque cas, les composantes de chaque ensemble, ordonné ou pas, doivent être distinctes. Pour tenir compte de cette exigence, de quelle façon, chaque composante d un ensemble est représentée dans ces conteneurs? Question # 16. (2 points) Donnez 2 différences que l on retrouve entre les langages JAVA et C++ en ce qui a trait aux concepts vus dans ce cours. 5