Série 17 :
Premiers pas en POO
Buts
Pour cette série, il est important d'avoir bien assimilé les notions pour aborder votre projet. Évitez de sauter des étapes cette semaine. Réalisez jusqu'au bout les exercices qui vous sont proposés, y compris ceux de niveau zéro. À noter que les notions de constructeurs/destructeurs seront exercées de façon plus dédiée la semaine prochaine.S'il vous reste du temps et que vous ne l'avez pas abordé/finalisé, reprenez l' exercice 3 de la semaine passée (mais attention il a été conçu dans une optique non orientée-objet).
Préliminaires :
Avant de commencer les exercices décrits dans cette série, créez le répertoire Desktop/myfiles/Programmation/cpp/serie17 et travaillez dans ce répertoire.Mise en place sous QTCreator
Cette série peut être réalisée avec Geany ou QTCreator. Si vous souhaitez utiliser QTCreator, vous pouvez mettre en place le projet comme suit:- copiez l'archive fournie serie17.zip dans le répertoire cpp/serie17/
- Dézippez cette archive :
cd cd Desktop/myfiles/Programmation/cpp/serie17/ unzip serie17.zip rm serie17.zip
- Lancez le programme QTCreator, et ouvrez y le fichier fourni dans ce répertoire et nommé CMakeLists.txt. Procédez comme indiqué ici https://iccsv.epfl.ch/series-prog/install/installation-tutorial.php#qtcreator-cmakeproject depuis la section "Création du projet".
- Vous pouvez choisir lequel des programmes vous voulez lancez en cliquant sur le petit écran (Debug) sur le bandeau latéral gauche.
Exercice 0.0 : reprise de l'exemple du cours (Objets et Classes, niveau 0)
Le but de cet exercice est de reprendre l'exemple du cours illustrant les classes et les objets avec la classe Rectangle.Cliquez ici si vous souhaitez faire cet exercice.
Exercice 0.1 : utilisation d'un dévermineur (dans QtCreator ou ddd, niveau 0)
Le but de cet exercice est de vous rappeler comment utiliser un dévermineur (outil servant à traquer les problèmes d'exécution dans un programme).Cliquez ici pour (re)faire cet exercice déjà proposé au semestre dernier.
Exercice 1 : la classe Cercle (POO, niveau 1)
Le but de cet exercice est d'écrire une classe représentant les cercles.
Écrivez un programme Cercle.cc dans lequel vous définissez une classe Cercle ayant comme attributs privés le rayon du cercle (de type double), et les coordonnées de son centre.
Déclarez ensuite les méthodes «get» et «set» correspondantes, par exemple :
void getCentre(double& x, double& y) const { ... } void setCentre(const double x, const double y) { ... } ...
double surface() const;
qui calcule et retourne la surface du cercle (pi fois le carré du rayon);bool estInterieur(const double x, const double y) const;
qui teste si le point de coordonnées (x,y) passé en paramètre fait ou non partie du cercle (frontière comprise : disque fermé).
Dans le main, instanciez deux objets de la classe Cercle, affectez des valeurs de votre choix à leur attributs et testez vos méthodes surface et estInterieur.
Remarque : la constante pi est définie comme M_PI dans le module cmath (#include <cmath> au début de votre programme).
Exercice 2 : Géométrie (conception OO, niveau 2)
Cet exercice vous
permettra d'élaborer un petit programme orienté objets de manière indépendante pour la
première fois.
Ecrivez un programme triangle.cc qui permet à l'utilisateur d'entrer les coordonnées (x, y) des sommets d'un triangle. Le programme affiche ensuite le périmètre du triangle ainsi qu'un message indiquant s'il s'agit d'un triangle isocèle. Votre programme doit être orienté objets.
Indications:
- un triangle est isocèle si au moins deux côtés ont la même longueur;
- pour calculer la distance entre deux points (x1, y1) et (x2, y2), prenez la racine carrée de (x1 - x2)2 + (y1 - y2)2 (pensez à inclure cmath pour pouvoir utiliser sqrt).
Exemple d'affichage du programme pour un triangle isocèle:
Construction d'un nouveau point Veuillez entrer x : 0 Veuillez entrer y : 0 Construction d'un nouveau point Veuillez entrer x : 2.5 Veuillez entrer y : 2.5 Construction d'un nouveau point Veuillez entrer x : 0 Veuillez entrer y : 5 Périmètre : 12.0711 Le triangle est isocèle
Exercice 3 : Tour de magie (conception OO, niveau 2)
On souhaite ici écrire un programme « simulant » le tour de magie élémentaire suivant :
Un magicien demande à un spectateur d'écrire sur un papier son âge
et la somme qu'il a en poche (moins de 100 francs).
Il lui demande ensuite de montrer le papier à son assistant, qui doit le
lire (sans rien dire), puis effectuer secrètement le calcul
suivant : multiplier l'âge par 2, lui ajouter 5, multiplier le
résultat par 50, ajouter la somme en poche, et soustraire le nombre
de jours que contient une année,
puis finalement donner le résultat à haute voix.
En ajoutant mentalement (rapidement !) 115 au chiffre reçu, le
magicien trouve tout de suite l'âge et la somme en poche (qui
étaient restés secrets).
Modéliser ce tour de magie, en définissant au moins les classes (simples) Magicien, Assistant et Spectateur. Il pourrait également être utile de disposer d'une classe Papier.
L'instance de Spectateur devra demander son âge à l'utilisateur du programme ainsi que la somme d'argent en poche, et s'assurer qu'une valeur correcte est entrée (entre 0 et 99).
Essayer de faire une modélisation la plus exacte possible ; faire notamment usage des droits d'accès là où cela semble pertinent. Pour chaque méthode, effectuer un affichage à l'écran de l'opération en cours et de l'acteur qui la réalise.
Note : Il existe de nombreuses variantes possibles. Commencer par un modèle très simple, et le faire évoluer pour se rapprocher de la situation « réelle » décrite.
Exemple de déroulement
[Spectateur] (j'entre en scène) Quel âge ai-je ? 35 Combien d'argent ai-je en poche (<100) ? 112 Combien d'argent ai-je en poche (<100) ? 12 [Spectateur] (je suis là) [Magicien] un petit tour de magie... [Spectateur] (j'écris le papier) [Spectateur] (je montre le papier) [Assistant] (je lis le papier) [Assistant] (je calcule mentalement) [Assistant] J'annonce : 3397 ! [Magicien] - hum... je vois que vous êtes agé de 35 ans et que vous avez 12 francs en poche !
Indications plus détaillées
Voici quelques indications en vrac qui peuvent vous être utiles. Ne les lisez pas si vous voulez être complètement indépendant (but premier de l'exercice)...
- Une fois ajouté 115 au nombre, le résultat divisé par 100 donne l'âge devinée et le modulo par 100 donne la somme d'argent devinée.
- Les « objets » du programme ont déjà été suggérés : Magicien, Assistant, Spectateur et éventuellement Papier ; réfléchissez alors aux attributs : « qui a quoi ? » et surtout aux méthodes : « qui fait quoi ? »
- Essayez de définir une méthode pour chaque action élémentaire effectuée : premières actions du spectateur (demander l'âge et la somme d'argent), écrire sur le papier, montrer le papier ; pour l'assistant, lire le papier (qu'il doit donc recevoir), faire le calcul ; etc.
- Procédez par étapes, petit à petit.
Dernière mise à jour : 2025/03/06 13:48