Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.

Slides:



Advertisements
Présentations similaires
Cours n° 7 Standard Template Library II.
Advertisements

C++ 6ème cours Patrick Reuter maître de conférences
Introduction à Java - les paquetages -
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Premier cours (23 septembre). Cours programmation- orientée objet en Java Licence dinformatique Hugues Fauconnier
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Introduction au cours Semaine 1 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 5 : La surcharge des opérateurs Département dinformatique.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem La librairie STL du C++ Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Sous-séquence de somme maximale (Algo#4). Algorithme retour arrière. Département dinformatique et de génie.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
CSI1502 Principes fondamentaux en conception des logiciels
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000
IFT Structures de données Abder Alikacem Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Gestion des exceptions Module 2 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Semaine 10 Les arbres SPLAY Département dinformatique et de génie logiciel Édition septembre
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Structures de données IFT-10541
Structures de données IFT-2000
Formation C++. Hello World ! #include /* Commentaire sur plusieurs lignes */ int main() { //Affiche hello world std::cout
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Introduction Semaine 1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.
Faculté Polytechnique de Mons
La notion de type revisitée en POO
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
Les modules. Modules Un module est un ensemble de définitions de constantes, de variables et de fonctions réutilisables de projet en projet. Le langage.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Les surcharges d'opérateurs
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique et de génie logiciel

Plan Espace de nommage Utilisation Implémentation Using namespace

Problème de collisions de noms… Quarrive-t-il si 2 fonctions globales différentes ont le même prototype ? // MaLib1.h int f(); // MaLib2.h int f(); class A{}; #include "MaLib1.h" #include "MaLib2.h" int g(){ return 5 + f();//Quel f() ? }

Solution: créer des namespaces Namespace : regroupement logique de fonctions, de classes, etc. Possibilité de lui donner un nom: NomDuNamespace::NomDeLEntite Pas d'ambiguïté // MaLib1.h namespace Util{ int f(); } #include "MaLib1.h" #include "MaLib2.h" int g(){ Tp1::A a; return 5 + Util::f(); // Ah, ok } // MaLib2.h namespace Tp1{ int f(); class A{}; } On se sert de l'opérateur d'appartenance ::

Using namespace namespace directement accessible : commande using #include "MaLib1.h" #include "MaLib2.h" using namespace Tp1; int h(){ A a; int x = f(); return x + Util::f(); } Par le using, c'est Tp1::f().

Encapsulation: espace de nommage namespace permet donc de définir un espace de nommage, i.e. un module (un paquetage en Java). Exemple. Spécification namespace pileDeChar { // interface dans un fichier Pile.h void empiler( char ) ; char depiler() ; bool estVide() ; }

Encapsulation: espace de nommage Exemple. Utilisation Un fichier Test-pile.cpp peut alors utiliser linterface : #include "pile.h" #include int main() { pileDeChar::empiler( x ) ; if (pileDeChar::depiler() != x) std::cerr << "impossible\n." ; } Rappel: le préfixe pileDeChar:: indique que empiler() et depiler() sont ceux du module pileDeChar.

Encapsulation: espace de nommage Exemple. Implémentation Limplémentation peut être donnée lors de la spécification (dans le fichier Pile.h) : namespace pileDeChar { const int tailleMax = 200 ; char laPile [ tailleMax ] ; int sommet = 0 ; void empiler ( char c ) { //Attention, pas de contrôle de débordement laPile[ sommet ] = c ; ++sommet ; } char depiler() {// Attention, pas de contrôle de débordement return laPile[ --sommet ] ; } bool estVide() {return sommet == 0 ;} }

Encapsulation: espace de nommage Exemple. Implémentation Il est possible de donner limplémentation dune fonction séparément (ici dans Pile.cpp), en préfixant le nom de la fonction par lidentificateur de son espace de nommage : #include "Pile.h" namespace pileDeChar { const int tailleMax = 200 ; char laPile [ tailleMax ] ; int sommet = 0 ; } int pile_de_char::depiler() {// contrôle de débordement... return pileDeChar::laPile[ --sommet ] ; } void pileDeChar::empiler ( char c ) {... } ; bool pileDeChar::estVide ( ) {... } ;

Encapsulation: espace de nommage Exemple. Bon usage du namespace Il est possible de spécifier que tous les noms doivent également être cherchés dans un namespace donné. Le préfixage par pileDeChar:: peut alors être omis si il ny a pas dambiguïté. int main() { pileDeChar::empiler(a); using namespace pileDeChar; depiler(); return 0; }

Bon usage du using Inutile de mettre des using pour chacun des namespaces disponibles : l'ambiguïté revient. Un using peut-être local : Ne jamais utiliser de using dans un.h : tous les fichiers qui l'incluront seront pollués. // Quelque part { using namespace Util; // Util est accessible directement dans ce bloc }

Bon usage du using #include "MaLib1.h" #include "MaLib2.h" #include namespace util { class B { public : std::string afficher(); private: Tp1::A a; std::string tmp; }; } // --- namespace util std::string afficher() { using namespace std; string s; // traitement à faire return s; } On peut rajouter quelque chose dans un namespace déjà défini ailleurs. Ce using n'affecte que le corps de cette fonction.

Encapsulation: espace de nommage Koenig lookup Une fonctionnalité intéressante des espaces de nommage est le Koenig lookup : lors dun appel à une fonction le type des arguments permet parfois de lever lambiguïté. Ceci peut être très utile pour faire des fonctions génériques modifiables par la suite (puisque un namespace est une structure ouverte à laquelle il est toujours possible dajouter des données ou des méthodes).

Encapsulation: espace de nommage Koenig lookup Exemple #include namespace Listes { struct TypeDeDonnees { std::list valeurs; }; void affiche(TypeDeDonnees l) { std::cout << "Listes\n"; } } namespace Vecteurs { struct TypeDeDonnees { std::vector valeurs; }; void affiche(TypeDeDonnees l) { std::cout << "Vecteurs\n"; } } int main() { Vecteurs::TypeDeDonnees v; // Vecteurs::affiche est trouvée, même sans using, // grâce à son paramètre de type Vecteurs::TypeDeDonnees. affiche( v ) ; return 0; }

Namespace et librairie standard librairie standard en C++ : dans le namespace std : Fonctions I/O ( console, fichiers,... ) Classes de base ( string, iterator,... ) Conteneurs ( vector, list,... ) Algorithmes standardisés ( tri, recherche, …) souvent la commande using namespace std; dans les fichiers.cpp.