Programmation • IoT

Chap 6 – Les espaces de noms

Document réservé

Vous consultez actuellement la présentation publique de ce chapitre.

Les documents PDF complets, comprenant les développements théoriques, les exemples détaillés et les exercices, sont disponibles sur demande.

Pour obtenir un accès, contactez-moi via la page Contact en indiquant les domaines qui vous intéressent (C++, ESP-IDF, électronique, etc.).

Créer son propre espace de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L’instruction using namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 6 – Les espaces de noms (namespace) Chapitre 6 – Les espaces de noms (namespace) Pourquoi les espaces de noms ? Au fur et à mesure que les programmes grandissent, ils contiennent de plus en plus de fonctions, de variables et de Imaginons maintenant que deux bibliothèques différentes définissent chacune une fonction portant le même nom. La première bibliothèque utilise cette fonction pour afficher des résultats mathématiques, tandis que la seconde l’utilise pour afficher des résultats physiques. Que se passerait-il si notre programme utilisait les deux bibliothèques ? Comment le compilateur pourrait-il savoir laquelle de ces deux fonctions nous souhaitons appeler ? Il ne le pourrait tout simplement pas. Il est donc nécessaire de disposer d’un mécanisme permettant de regrouper les éléments appartenant à une même bibliothèque afin d’éviter les conflits de noms. C’est précisément le rôle des espaces de noms (namespace). • Un espace de noms permet de regrouper des fonctions, des variables ou des classes ayant un lien logique et d’éviter les conflits entre des éléments portant le même nom. Créons deux espaces de noms contenant chacun une fonction portant le même nom. std::cout << « Affichage mathematique\n »; std::cout << « Affichage physique\n »; Physique::afficher(); 1. On verra plus loin les classes très en détail. Les classes sont la base de la propgrammation orientée objets aussi appelée POO
Accueil
Chapitre 6 – Les espaces de noms (namespace) L’exécution de ce programme produit le résultat suivant : Affichage mathematique Les deux fonctions portent exactement le même nom : afficher(). Sans les espaces de noms, le compilateur ne pourrait pas savoir laquelle appeler. Grâce aux espaces de noms, chaque fonction est identifiée de manière unique. L’opérateur ::, appelé opérateur de résolution de portée, permet d’indiquer dans quel espace de noms se trouve la fonction que l’on souhaite utiliser. Ainsi, appelle la fonction afficher() de l’espace de noms Math, tandis que Physique::afficher(); appelle celle de l’espace de noms Physique. Le symbole : : est appelé opérateur de résolution de portée (scope resolution operator en anglais). • Deux espaces de noms différents peuvent contenir des fonctions, des variables ou des classes portant le • L’opérateur :: permet de préciser à quel espace de noms appartient l’élément que l’on souhaite utiliser. Il ne faut pas confondre une bibliothèque et un espace de noms. Une bibliothèque est un ensemble de fonctions, de classes et d’autres éléments réutilisables. Un espace de noms est simplement un mécanisme qui permet d’organiser ces éléments et d’éviter les conflits Une même bibliothèque peut contenir plusieurs espaces de noms, et un programme peut créer ses propres espaces de noms sans pour autant constituer une bibliothèque. Pourquoi écrit-on std::cout ? Depuis le début de ce livre, nous écrivons des instructions telles que : std::cout << « Bonjour ! » << std::endl; Sans vraiment nous demander ce que signifie std. Nous pouvons maintenant répondre à cette question. std est le nom d’un espace de noms. Il regroupe les principaux éléments de la bibliothèque standard du C++, parmi lesquels cout, cin, endl et bien d’autres. std::cout << « Bonjour\n »; signifie simplement : Utiliser l’objet cout appartenant à l’espace de noms std. De la même manière,
Accueil
Chapitre 6 – Les espaces de noms (namespace) désigne la fonction afficher() appartenant à l’espace de noms Math. Il ne faut pas confondre une bibliothèque et un espace de noms. Une bibliothèque est un ensemble de fonctions, de classes, de variables et d’autres éléments réutilisables. Un espace de noms est un mécanisme qui permet d’organiser ces éléments et d’éviter les conflits de noms. Une bonne image consiste à comparer une bibliothèque à un classeur et les espaces de noms à des intercalaires. Le classeur contient les documents. Les intercalaires ne contiennent rien par eux-mêmes : ils servent simplement à classer les documents afin de les retrouver facilement. La bibliothèque standard du C++ est un vaste classeur. L’un de ses principaux intercalaires s’appelle std. C’est la raison pour laquelle nous écrivons std::cout, std::endl, etc. Créer son propre espace de noms Les espaces de noms ne sont pas réservés à la bibliothèque standard du C++. Vous pouvez également créer les vôtres afin de regrouper des fonctions, des variables ou des classes ayant un lien logique.L’exemple suivant rassemble deux fonctions relatives à la géométrie dans un même espace de noms. double aireCarre(double cote) return cote ∗ cote; double perimetreCarre(double cote) std::cout << « Aire :  » << Geometrie::aireCarre(5.0) std::cout << « Perimetre :  » << Geometrie::perimetreCarre(5.0) Les deux fonctions appartiennent maintenant à l’espace de noms Geometrie. Pour les utiliser, il suffit de faire précéder leur nom de Geometrie::. Même dans un projet qui ne constitue pas une bibliothèque, cette manière de regrouper les fonctions améliore la lisibilité du programme et facilite son organisation.
Accueil
Chapitre 6 – Les espaces de noms (namespace) • Les espaces de noms permettent non seulement d’éviter les conflits de noms, mais aussi de regrouper les éléments ayant un même domaine d’application. • Ils constituent un excellent moyen d’organiser un programme de grande taille. L’instruction using namespace Comme nous l’avons vu, les éléments de la bibliothèque standard appartiennent à l’espace de noms std. C’est pourquoi nous écrivons : std::cout << « Bonjour\n »; Il est toutefois possible d’éviter de répéter std:: grâce à l’instruction suivante : using namespace std; Après cette instruction, il devient possible d’écrire simplement : cout << « Bonjour\n »; • L’instruction using namespace std; est pratique dans les petits programmes et dans les exemples • En revanche, dans les projets de grande taille, elle peut provoquer des conflits de noms avec d’autres • C’est pourquoi de nombreux développeurs préfèrent conserver l’écriture std::cout, std::cin, etc. Les espaces de noms permettent d’organiser un programme et d’éviter les conflits entre des éléments portant le même Nous avons également découvert que les objets cout et cin appartiennent à l’espace de noms std, qui est le principal espace de noms de la bibliothèque standard du C++. Dans la suite de cet ouvrage, nous continuerons à utiliser cette notation afin de conserver des programmes clairs et faciles à comprendre.
Accueil
cpp-Chap6- Chapitre 6 – Les espaces de noms (namespace)
Accueil
Termes à ajouter au glossaire
Contenu

Inscription

×
Cancel