PROFDINFO.COM

Votre enseignant d'informatique en ligne

Laboratoire 1 - Classes et objets

Exercice 1.1

Exécutez le pas à pas suivant et conservez précieusement les projets Labo1 et Labo1(b) dans vos documents. Notez les réponses aux questions en insérant des commentaires dans le code source de votre programme.

Exercice 1.1 - Pas a pas

Exercice 1.2

Programmez la classe CCompte qui possède la déclaration suivante:

 

class CCompte
{
private:
   float Solde_;
public:
   // Initialise le solde à 0
   void Init();
   // Pour obtenir le solde courant
   float GetSolde() const;
   // Pour faire un retrait
   // Cette méthode ne doit pas effectuer le retrait si 
   // le montant est invalide ou si le solde est insuffisant
   void Retirer(float Montant);  
   // Pour faire un dépôt
   // Cette méthode ne doit pas effectuer le dépôt si le
   // montant est invalide
   void Deposer(float Montant);
};

Utilisez le programme principal suivant pour tester le bon fonctionnement de votre classe:

 

#include <iostream>
using namespace std;
int main()
{
   CCompte Cheque;
   
   Cheque.Init();
   Cheque.Deposer(100);  // Solde = 100 
   Cheque.Deposer(-20);  // Dépot invalide
   cout << Cheque.GetSolde() << endl; // Affiche 100	
   Cheque.Retirer(200); // Retrait invalide
   Cheque.Retirer(-20); // Retrait invalide
   Cheque.Retirer(60); // Solde = 40
   cout << Cheque.GetSolde() << endl; // Affiche 40
}   

Exercice 1.3

On souhaite implémenter une classe représentant un compteur entier. Le compteur a au départ la valeur 0. Le compteur ne peut varier que par pas de 1 (incrémentation ou décrémentation). Il ne faut pas que le compteur puisse descendre en bas de 0 ni monter en haut d'un million. Votre classe devra donc servir à représenter un petit compteur très simple qui ne peut faire que des pas de 1 et qui ne sort pas des limites prescrites. Votre classe devra donc contenir:

Il vous faudra créer un petit programme de test qui vous permettra de tester toutes les fonctionnalités et les limites de votre classe. Ce main devra donc déclarer un compteur, l'initialiser et faire des incrémentations et décrémentations pour montrer qu'elles fonctionnent tel que demandé. Utiliser une boucle pour faire plus d'un million d'incrémentations est très efficace, surtout si on n'affiche pas le résultat après chaque incrémentation!

Exercice 1.4

Programmez la classe CPosition qui permettra de conserver la position d'un personnage dans un jeu en deux dimensions. La classe CPosition a la représentation UML suivante:

UML

La méthode Init() permet de spécifier la position du personnage. Les méthodes de déplacement permettent de bouger le personnage d'une case à la fois. En aucun moment, la position du personnage ne doit sortir du tableau. C'est à dire que les valeur de x et de y ne peuvent être négatives ni supérieures à 512.

Créez un programme principal pour tester les fonctionnalités et les limites de votre classe.

Exercice 1.5

Voici un petit programme sous la forme procédurale classique:

#include <iostream>
using namespace std;
const float Tps = 0.05f;
const float Tvq = 0.09975f; // Depuis 2013
 
float CalculerTotal(float Prix, int Quantite)
{
   return Prix * Quantite;
}

float CalculerTaxes(float Prix, int Quantite)
{
   float Total = CalculerTotal(Prix, Quantite);
   float MontantTps = Total*Tps;
   float MontantTvq = Total*Tvq;  // Plus de surtaxe depuis 2013
   return MontantTps + MontantTvq;
}

int main()
{
   float Prix;
   int Quantite;

   cout << "Entrez le prix de l'article: ";
   cin >> Prix;
   cout << "Entrez la quantite: ";
   cin >> Quantite;
 
   cout << "Total: " << CalculerTotal(Prix, Quantite) << endl;
   cout << "Taxes: " << CalculerTaxes(Prix, Quantite) << endl;
}    

Transformez ce programme en un joli programme orienté objets.

Exercice 1.6

Cet exercice consiste à implanter une classe de conversion de température nommée CTemperature qui permet de conserver une température exprimée en système métrique ou anglais et de fournir au programme qui en fait la demande la valeur en degrés Celcius d’une température conservée en degrés Fahrenheit ou vice-versa. On peut aussi obtenir la valeur en degrés Celsius d’une température conservée en degrés Celsius ;-)
Cette classe présente une interface qui doit comporter au moins les membres suivants :

 

class CTemperature 
{
public:
   //  ----- Accesseurs publics
   double GetMetrique() const;
   double GetAnglaise() const;
   //  ----- Mutateurs publics
   void  SetMetrique(double Valeur);
   void  SetAnglaise(double Valeur);
private:
   //  ----- Attributs de la classe
   double ValeurMetrique_;    // valeur metrique de la temperature
   double ValeurAnglaise_;    // valeur anglaise  de la temperature
};

Voici une explication des services rendus par les méthodes de la classe :

C’est dire que la classe offre uniquement comme services publics à ses utilisateurs des mutateurs et des accesseurs.

Ainsi, si on conserve d’abord dans l’instance une valeur de 0 degré Celsius avec SetMetrique, faire appel au GetMetrique retourne la valeur 0 tandis qu’un appel à GetAnglaise retourne la valeur 32 puisque 0 degré Celsius vaut 32 dans l’échelle Fahrenheit. Par contre, si on fait ensuite appel à SetAnglaise pour conserver la valeur 95, le prochain appel à GetMetrique retournerait la valeur 35 puisque 95 degrés Fahrenheit équivaut à 35 dans l’échelle Celsius.

La conversion d’un système à l’autre sera prise en charge automatiquement par l’instance sans que l’utilisateur n’ait à se soucier de provoquer la conversion. Il n’a d’ailleurs aucune méthode publique à sa disposition pour ce faire. C’est la responsabilité de la classe de faire en sorte que les conversions s’effectuent au bon moment de façon à ce que les valeurs conservées dans l'objet soient toujours cohérentes.

La formule de conversion d’une température Fahrenheit vers une température en degrés Celcius est la suivante :

TempCelcius = (TempFahrenheit – 32) * 5 / 9;

La formule inverse de conversion de Celcius à Fahrenheit se déduit à partir de cette formule.

Finalement, vous devez écrire un programme principal qui teste toutes les fonctionnalités et limites de votre classe.

Exercice 1.7

L'exercice 1.7 consiste à vous familiariser avec le robot iRobot qui est utilisé dans les cours de la voie de spécialisation informatique industrielle. Pour ce faire, vous devez vous placer en équipe de 2 ou 3 et suivre les étapes décrites ci-dessous.

Afin de pouvoir utiliser plus aisément les iRobots, des étudiants de 3e année d’informatique industrielle (Olivier D’Amours-Malec et Vincent Després) ont écrit en 2015 une bibliothèque (souvent appelée, par anglicisme, une librairie).  Cette bibliothèque fournit des fonctions faciles à utiliser pour contrôler un iRobot.

La bibliothèque est normalement fournie sous la forme de deux fichiers .h (pour les inclusions, également pour découvrir les fonctions que l’on peut utiliser), d’un fichier .lib (utilisé par l’éditeur de liens, après la compilation, afin de créer l’exécutable) et d’un fichier .dll (utilisé en temps réel par l’exécutable).

Chaque fois qu’une nouvelle version de Visual Studio est installée dans nos laboratoires, on doit d’abord recompiler la bibliothèque avec la nouvelle version, de façon à ce qu’elle puisse être utilisée dans des projets créés avec celle-ci.  Compiler une bibliothèque est quelque chose de simple et de très utile à savoir faire!


Étape 1 – Compiler la bibliothèque

Et voilà!  Ces 4 fichiers ensemble forment la bibliothèque iRobotDLL compilée pour votre version de Visual Studio!  Vous êtes maintenant prêts à les utiliser dans votre projet pour l’exercice 1.7.  Notez que ces fichiers ne révèlent pas le code source de la bibliothèque (le contenu de iRobot.cpp auquel vous, le générateur de la bibliothèque, avez eu accès).  Il est possible de la donner à quelqu’un d’autre qui ne verra jamais le code, mais qui pourra tout de même utiliser toutes les fonctions comme il le souhaite, grâce au fichier .h (et à ses commentaires clairs et pertinents!)


Étape 2 – Créer le projet Ex1.7 et y intégrer la bibliothèque compilée

Et voilà, votre projet est prêt!  La bibliothèque y est bien intégrée.


Étape 3 – Connecter le iRobot à l’ordinateur via Bluetooth

ATTENTION! Afin d'éviter les confusions en laboratoire, tous les iRobot devront être éteints au départ. Ensuite, la configuration de la connexion Bluetooth doit s'effectuer une équipe à la fois!

  1. Branchez le connecteur bluetooth dans le port USB de l'ordinateur
  2. Cliquez sur l'icone Bluetooth dans la barre des tâches
  3. Choisir "Afficher les périphériques Bluetooth"
  4. Allumez le iRobot
  5. Cliquez ajouter un périphérique
  6. Cliquez sur "Element Serial Bluetooth Autre"
  7. Associez sans utiliser de code
  8. Attendre que le périphérique Bluetooth s'installe correctement (cela peut prendre quelques minutes)
  9. Lorsque le périphérique n'est plus en état d'installation, ouvrez les propriétés du périphérique et sous l'onglet Services, notez le numéro du port COM utilisé. Le numéro du port devra être passé au construteur de la classe iRobot.
  10. Lors de la première exécution de votre programme, vous devrez autoriser la connexion Bluetooth avec le code 0000

Étape 4 – Programmer le iRobot

Utilisez les fonctions décrites dans le fichier iRobot.h de façon à ce que le iRobot effectue les opérations suivantes:

  1. faire clignoter la diode électroluminescente (LED) 10 fois en 5 secondes;
  2. puis, démarrer le iRobot, lui faire effectuer un carré de 50 cm de côté de façon à ce qu'il revienne à son point de départ et qu'il s'arrête et;
  3. faire klaxonner le iRobot.