Série 2 :
1- Premiers pas en POO ;
2- Démarrage du projet.

Buts

Cette série a pour but de vous faire faire vos premiers pas en programmation orientée objet.
Elle vise aussi à commencer la mise en place de votre projet.
 

Préliminaires :

Avant de commencer les exercices décrits dans cette série, créez le répertoire ~/Desktop/myfiles/cpp/serie15 et travaillez dans ce répertoire.

Par ailleurs, à partir de maintenant les séries sont organisées en 2 parties :


Exercice 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 1 : la classe Cercle (niveau 1)

Exercice n°46 (page 111 et 293) de l'ouvrage C++ par la pratique.
Exercice n°1 du MOOC

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(double x, double y) { ... }
...

NOTE : ceci n'est qu'un exemple parmi d'autres. Si vous préférez d'autres prototypes pour ces méthodes, libre à vous d'implémenter votre solution.

Ajoutez ensuite les méthodes (faisant partie de l'interface) :

La méthode retournera true si le test est positif, et false dans le cas contraire.

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 : Depuis C++20 (-std=c++20), la constante π est disponible dans la bibliothèque numbers, dans l'espace de noms std::numbers ; p.ex. :

#include <numbers>
using namespace std;
...
cout << numbers::pi << endl;

Si vous compilez dans une norme antérieure à C++20, la constante π est souvent définie comme M_PI dans le module cmath (#include <cmath> au début de votre programme).
Mais comme elle n'est pas officiellement dans le standard, il se peut que votre compilateur ne l'ajoute pas (surtout si on demande expressément un standard avec l'option -std=c++-11).
Ajoutez alors simplement la ligne suivante en tout début de votre programme, avant même les #include :

#define _USE_MATH_DEFINES

Si cela ne fonctionne pas non plus, une dernière solution consiste à simplement ajouter les lignes suivantes en début de votre programme, mais après les #include et le using namespace std; cette fois :

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

Exercice 2 : petit tour de magie (niveau 2)

Exercice n°48 (page 111 et 296) de l'ouvrage C++ par la pratique.
Exercice n°2 du MOOC

2.1 Organisation de l'exercice

Dans cet exercice, nous vous demandons d'élaborer un programme orienté objet de manière indépendante pour la première fois. Nous avons donc organisé l'exercice en 2 parties :

  1. une première (de 2.2 et 2.3) qui décrit le problème à résoudre et qui, idéalement devrait suffire pour élaborer puis écrire le programme de façon autonome, certainement en plusieurs tentatives ;
  2. une seconde (partie 2.4), pour aider au cas où la première partie vous semble insuffisante, vu que c'est votre première conception autonome d'un programme. Dans un premier temps, essayez de ne pas la lire et revenez-y si nécessaire.

2.2 Buts du programme

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.

2.3 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 !

2.4 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)...

Cliquez ici pour montrer/cacher les indications



Exercice 3 : coordonnées en 3D (niveau 1)

Exercice n°47 (page 110 et 294) de l'ouvrage C++ par la pratique.
Exercice n°3 du MOOC

Le but de cet exercice est d'implémenter de façon élémentaire une classe représentant les coordonnées dans l'espace (3D).

Dans le fichier Point3D.cc, définir la classe Point3D représentant un point dans l'espace par ses trois coordonnées, et possédant les méthodes suivantes :

Dans le main, créer trois points (trois instances) dont deux avec des coordonnées identiques et tester les deux méthodes précédentes.

Exemple d'utilisation (main())

Point3D point1;
Point3D point2;
Point3D point3;

point1.init(1.0, 2.0, -0.1);
point2.init(2.6, 3.5,  4.1);
point3 = point1;

cout << "Point 1 :";
point1.affiche();

cout << "Point 2 :";
point2.affiche();

cout << "Le point 1 est ";
if (point1.compare(point2)) {
  cout << "identique au";
} else {
  cout << "différent du";
}
cout << " point 2." << endl;

cout << "Le point 1 est ";
if (point1.compare(point3)) {
  cout << "identique au";
} else {
  cout << "différent du";
}
cout << " point 3." << endl;

Exercice 4 : triangle (niveau 2)

Exercice n°4 du MOOC

4.1 Organisation de l'exercice

Comme dans l'exercice 2, nous vous demandons dans cet exercice d'élaborer un programme orienté objet de manière indépendante. Nous l'avons donc à nouveau organisé en deux parties :

  1. une première (de 4.2 à 4.4) qui décrit le problème à résoudre et qui, idéalement devrait suffire pour élaborer puis écrire le programme de façon autonome ;
  2. une seconde (partie 4.5), pour aider au cas où la première partie vous semble insuffisante. Essayez dans un premier temps de ne pas la lire et revenez-y si nécessaire.

4.2 Buts du programme

Sur la base du programme de l'exercice précédent, écrire un nouveau programme triangles.cc qui permet à l'utilisateur d'entrer les coordonnées (x, y et z) des sommets d'un triangle (en 3D). Le programme affiche ensuite le périmètre du triangle ainsi qu'un message indiquant s'il s'agit ou non d'un triangle isocèle.

4.2 Indications générales (aide mathématique)

4.4 Exemple de déroulement

Construction d'un nouveau point
   Veuillez entrer x : 0
   Veuillez entrer y : 0
   Veuillez entrer z : 0
Construction d'un nouveau point
   Veuillez entrer x : 2.5
   Veuillez entrer y : 2.5
   Veuillez entrer z : 0
Construction d'un nouveau point
   Veuillez entrer x : 0
   Veuillez entrer y : 5
   Veuillez entrer z : 0
Périmètre : 12.071067811865476 
Ce triangle est isocèle !

4.5 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)...

Cliquez ici pour montrer/cacher les indications



Projet : mise en place

Pour faire la partie concernant le projet, voir ici.


Dernière mise à jour le 4 octobre 2021
Last modified: Mon Oct 4, 2021