département informatique programmation objet
TRANSCRIPT
1
Département InformatiqueDépartement Informatique Programmation objetCours n°1
Rappels de première annéeConseils d'implémentation C++Espaces de nomsAllocation dynamique
2
Département InformatiqueDépartement InformatiqueRappels de première année
Principes de la programmation objet
➢Notion d'encapsulation, protection des données➢Données, attributs, fonctions membres➢Exemple d'implémentation en C++
Construction et destruction d'un objet
➢Besoin d'assurer la cohérence de l'objet➢Exemple avec prise de ressources➢Exemple d'implémentation en C++
3
Département InformatiqueDépartement Informatique
Allocation dynamique de mémoire➢Différence entre allocation statique et dynamique➢Rappels sur la notion de pointeur, valeur, référence➢Sémantiques➢Risques de fuites mémoire➢Exemple d'implémentation en C++➢Existence de "ramasse-miettes" (java, C#...)
4
Département InformatiqueDépartement InformatiqueConseils d'implémentation en C++
Structure d'un code source C++
Plusieurs unités de compilation (fichiers .cpp)
De nombreux fichiers d'en-tête (fichiers .h)
Bibliothèques statiques (.obj, .lib) et dynamiques
Rôle de l'éditeur de liens
5
Département InformatiqueDépartement Informatique
Un programme écrit en C++ =
plusieurs unités de compilationune unité contenant la fonction mainun certain nombre de bibliothèques
Un programme écrit en C++ peut utiliser le paradigme objet ou non
Il peut contenir des classes, mais aussi des fonctions globales.
Par souci de lisibilité, de simplicité, de facilité de maintenance,
On choisira plutôt de multiplier de petites unités de compilation, avec une répartition logique des classes et/ou fonctions.
6
Département InformatiqueDépartement InformatiqueConseils sur l'écriture d'une classe C++
Pour chaque classe du programme, même minime :une seule unité de compilation, portant le nom de la classe.
La déclaration de la classe sera écrite dans un fichier d'en-tête (.h), contenant éventuellement quelques petites fonctions en ligne.
Le corps des fonctions membres de cette classe, ainsi qu' éventuellement les fonctions globales associées se trouveradans un fichier source .cpp .
7
Département InformatiqueDépartement Informatique Exemple : écriture d'une classe complexe
Nom de la classe : complexeNom de l'unité : complexe (fichiers complexe.h et complexe.cpp)Placement dans un espace de nom "iut"
Données : parties réelle et imaginaire, type double, privéesFonctions : calcul du module, de l'argument, addition de 2 complexes
8
Département InformatiqueDépartement Informatique Fichier d'en-tête (complexe.h) :
#ifndef complexe_h#define complexe_h // protection contre inclusions multiplesnamespace iut {class complexe{
double reel, imag;public:
complexe(double r=0, double i=0):reel(r),imag(i){}double Module() const;double Arg() const;complexe& operator+=(const complexe&);
};
extern complexe operator+(const complexe&, const complexe&);} // fin de l'espace de nommage#endif
9
Département InformatiqueDépartement Informatique Fichier source (complexe.cpp)
#include <cmath> // pour sqrt et atan#include "complexe.h"
namespace iut {
double complexe::Module() const{
return std::sqrt(reel*reel+imag*imag);}
double complexe::Arg() const{
return std::atan(reel/imag);}
10
Département InformatiqueDépartement Informatique
complexe& complexe::operator+=(const complexe& z){
reel += z.reel;imag += z.imag;return *this;
}
complexe operator+(const complexe& z1, const complexe& z2){
complexe z(z1);z+=z2;return z;
}
}// fin de l'espace de noms
11
Département InformatiqueDépartement Informatique Conseils généraux sur écriture programme C++
Une unité de compilation par classeUne unité pour la fonction main et elle seuleUne unité pour les éventuelles variables et fonctions globalesUne unité au moins pour la gestion des erreursUtiliser les espaces de nomsEviter l'utilisation abusive des directives usingPréférer le paradigme objet au paradigme procéduralPassage de paramètres par référence plutôt que par valeurUtiliser le mot-clé const si besoinEviter les macros (#define...)Ne pas inclure de fichier d'en-tête inutileProtéger les en-têtes contre les inclusions multiplesPréférer la clarté à la concision
12
Département InformatiqueDépartement Informatique Espaces de noms
Concept plus général que celui d'une classe
Permet de rassembler plusieurs objets, fonctions ou variables ayantun lien logique ou fonctionnel entre elles.
Mot clé C++ : namespace.
namespace X { int i;}La variable i n'est visible qu'à l'intérieur de l'espace X,à moins d'être qualifié par le nom de celui-ci :
i = 3; // erreur à la compilation, i inconnuX::i = 3; // ok, i étant défini dans X
13
Département InformatiqueDépartement Informatique
Un espace de nom est ouvert.
namespace A { int i; }int k;namespace A {int k;}
L'espace A contient les variablesi et k.
Ici, l'espace global contient la variable k.
Attention : k et A::k sont deux variables différentes !!
Les espaces de noms permettent une structure plus propre des programmes,évitent les conflits de noms.
L'écriture et la lecture du programme sont par contre moins aisés.
14
Département InformatiqueDépartement Informatique La directive using
On peut rendre visible tout le contenu d'un espace de nom grâce àla directive C++ using.
namespace A {int i;}i=3; // erreur, i non visibleA::i = 3; // okusing namespace A; // rend visible tout l'espace Ai = 3; // ok, utilise A::i
Attention : l'emploi de cette directive peut conduire à des conflits.int i; namespace X {int i;}i=3; // ok, le i globalX::i = 5; // ok, le i dans Xusing namespace X;i=10; // erreur : i global ou X::i ?
15
Département InformatiqueDépartement Informatique
Il est fortement déconseillé d'utiliser la directive using dans unfichier d'en-tête (.h)
Malgré la simplification d'écriture qui en résulte, l'utilisation de usingest risquée et doit être limitée.
On peut rendre une partie seulement d'un espace à l'aide de using :
#include <iostream>using std::cout; // ne rend visible que coutint x;cout<<"Et ca marche !";cin>>x; // erreur, cin non visiblestd::cin>>x; // ok
16
Département InformatiqueDépartement Informatique
Les espaces de nommage peuvent être imbriqués :
namespace A{
namespace B{
namespace C{
int i;}int i;
}int i;
}int i;
Définition de 4 variables i :::i (ou i)A::iA::B::iA::B::C::i
17
Département InformatiqueDépartement Informatique
Prochain cours :
LES EXCEPTIONS
A la semaine prochaine !