Giter Club home page Giter Club logo

tp-poo-cpp's Introduction

points bar

C++ Badge

TP POO : C++

Les objectifs de ce TP sont de s’initier à la programmation orientée objet en C++.

Pour les enseignants, ceci est un "petit" devoir pour Github Classroom. Il montre l'utilisation des tests unitaires en C++, la notation automatique et l'insertion d'un badge pour l'affichage de la note.

Le langage C++

C++ est un langage de programmation compilé permettant la programmation sous de multiples paradigmes (comme la programmation procédurale, orientée objet ou générique). Ses bonnes performances, et sa compatibilité avec le C en font un des langages de programmation les plus utilisés dans les applications où la performance est critique.

Créé initialement par Bjarne Stroustrup dans les années 1980, le langage C++ est aujourd'hui normalisé par l'ISO. Sa première normalisation date de 1998 (ISO/CEI 14882:1998), ensuite amendée par l'erratum technique de 2003 (ISO/CEI 14882:2003). Une importante mise à jour a été ratifiée et publiée par l'ISO en septembre 2011 sous le nom de ISO/IEC 14882:2011, ou C++11. Depuis, des mises à jour sont publiées régulièrement : en 2014 (ISO/CEI 14882:2014 ou C++14) puis en 2017 (ISO/CEI 14882:2017 ou C++17). [source : wikipedia.org]

Les changements du langage C++ concernent aussi bien le langage initial que la bibliothèque standard.

Remarque : La bibliothèque standard du C++ (C++ Standard Library) est une bibliothèque de classes et de fonctions standardisées selon la norme ISO pour le langage C++. Elle contient aussi la bibliothèque standard du C. Une des principales briques de la bibliothèque standard du C++ est sans aucun doute la STL (Standard Template Library), à tel point qu'il y a souvent confusion entre les deux.

Dans l'index de popularité des langages TIOBE, le C représente 16,2 % (première place) et le C++ 7,6 % (quatrième place) en novembre 2020.

Lien : www.cplusplus.com

« Hello, world »

Voici l'exemple de Hello world donné dans "The C++ Programming Language, Third Edition" de Bjarne Stroustrup :

#include<iostream>

int main()
{
    std::cout << "Hello, new world!\n";
}

Travail demandé

Une classe Point

On souhaite manipuler des points. Pour cela, nous allons définir le concept Point :

Un point est défini par son abscisse (x) et son ordonnée (y). L’abscisse et l’ordonnée d’un point sont des réels (double).

On en sait suffisamment pour modéliser une classe Point :

#ifndef POINT_H
#define POINT_H

class Point
{
   private:
      double x;
      double y;

   public:
      // TODO Constructeurs

      // TODO Destructeur

      // TODO Accesseurs et mutateurs

      // TODO Services
};

#endif //POINT_H

📝 Lorsqu'on modélise une nouvelle classe, on commence toujours par identifier ses caractéristiques afin de déterminer le nom et le type des ses attributs. C'est seulement ensuite que l'on s'attache à son comportement.

La programmation orientée objet (POO) nous oblige à complèter le squelette de cette classe :

  • La classe Point devra disposer de deux constructeurs : un constructeur par défaut qui initialisera les attributs x et y à zéro et un constructeur d'initialisation qui recevra en paramètres l’abscisse et l’ordonnée du point à initialiser.

  • Tous les attributs de la classe Point seront privés par respect du principe d’encapsulation. On veut néanmoins pouvoir connaître son abscisse et son ordonnée, et éventuellement les modifier. Il faudra donc créer les accesseurs et mutateurs correspondants.

  • Un point pourra s’afficher. On aura donc une méthode publique affiche() qui produira un affichage de ce type : <x,y>

  • On doit aussi pouvoir calculer la distance entre 2 points (calculeDistance()) et le milieu de 2 points (determinePointMilieu()).

📝 Une méthode publique est un service rendu à l'utilisateur de l'objet.

On vous fournit un programme test-point.cpp où vous devez décommenter progressivement les parties de code source correspondant aux questions posées.

À la fin du TP, vous devez obtenir l’exécution suivante :

$ make test-point
Question 1 : constructeur par défaut
Question 2 : constructeur
Question 3 : accesseurs et mutateurs
L'abscisse de p0 est 0
L'abscisse de p1 est 1
L'abscisse de p1 est 4

L'ordonnée de p0 est 0
L'ordonnée de p1 est 2
L'ordonnée de p1 est 0

L'abscisse de p0 est maintenant 5.5
L'ordonnée de p0 est maintenant 6.5

L'abscisse de p3 est 2
L'ordonnée de p3 est 1

Question 4 : rendre des services
p0 = <5.5,6.5>
p1 = <1,2>
p2 = <4,0>

Question 5 : calcul de la distance entre 2 points
La distance entre p1 et p2 est de 3.6

Question 6 : calcul le point milieu entre 2 points
Le point milieu entre p1 et p2 est <2.5,1>

Tests unitaires

Solutions pour C++ :

👉 Dans ce TP, on utilisera Catch2 (Tutoriel Catch2).

Tests unitaires pour les questions Q1, Q2, Q3, Q4, Q5 et Q6 :

$ make tests
...
All available test cases:
  Q1 : Constructeur par défaut
  Q2 : Constructeur d'initialisation
  Q3 : Accesseurs et mutateurs
  Q4 : Affiche les coordonnées d'un point
  Q5 : Calcul de la distance entre 2 points
  Q6 : Calcul du point milieu entre 2 points
6 test cases

<0,0>
===============================================================================
All tests passed (12 assertions in 6 test cases)

Test unitaire pour une question Qx :

$ make test-q1
...
===============================================================================
All tests passed (2 assertions in 1 test case)

Bac à sable et développement en ligne

Il est souvent nécessaire de passer par un "bac à sable".

En informatique, le bac à sable (sandbox) est une zone d'essai permettant d'exécuter des programmes en phase de test ou dans lesquels la confiance est incertaine. C'est notamment très utilisé en sécurité informatique pour sa notion d'isolation.

Il existe de nombreux sites web qui fournissent des EDI (Environnement de Développement Intégré) en ligne pour tester du code ou des services : un espace d'apprentissage séparé. Ils permettent aussi d'échanger des exemples.

Quelques sites :


Thierry Vaira : thierry(dot)vaira(at)gmail(dot)com

tp-poo-cpp's People

Contributors

tvaira avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.