Section Correspondance entre le UML et le C++ Exemples de codage Introduction Classes simples Ce document présente quelques exemples de codage qui traduisent la correspondance entre le modèle exprimé en UML et les instructions en langage C++. Ces exemples sont donnés sous forme tabulaire afin de faciliter leur compréhension. Les classes représentées sont dotées de deux constructeurs (un constructeur par défaut et un constructeur de copie), d un destructeur et de trois opérateurs. Il s agit là d une pratique courante et recommandée par les praticiens du domaine. Évidemment, l implantation concrète de ces fonctions membres dépendra de l application réelle des classes. Le rôle des opérateurs d assignation (=), d égalité (==) et de l inégalité (!=) est de simplifier l insertion des objets dans des classes collections. Cette manipulation et d autres seront nécessaires lorsque la multiplicité des objets dans une relation est supérieure à. Il existe plusieurs façons de réaliser les relations UML. Le codage présenté dans ce document ne montre que le principe de base de l implantation des relations. insi, une association, une agrégation et une composition sont toutes réalisées à l aide de pointeurs d objet. Certaines de ces relations auraient pu être réalisées par des variables membres ordinaires. L importance dans ces cas est le respect de la nature des relations et la durée de vie des objets. À noter également que certains exemples codage supposent que les classes sont déclarées dans un seul fichier d en-tête tandis que d autres exemples supposent que les classes sont déclarées dans des fichiers.h séparés. Un commentaire C++ vous donnera l indication lorsque les classes sont déclarées dans des fichiers séparés. Classe Simple class { constructeur (); (const & droit); Destructeur ~(); Opérateur d assignation
const & operator = (const & droit); utres opérations bool operator == (const & droit) const; bool operator!= (const & droit) const; Classe avec attributs et opérations : string 2 : string op() op2() Classe paramétrisée Type class { constructeur (); (const & droit); Destructeur ~(); Opérateur d assignation const & operator = (const & droit); utres opérations bool operator == (const & droit) const; bool operator!= (const & droit) const; Opérations spécifiques à la classe const string get_() const; void set_(const string valeur); const string get_2() const; void set_2(const string valeur); string ; string 2; Quelques implantations const string ::get_() const { return ; } void ::set_(const string valeur) { = valeur; } const string ::get_2() const { return 2; } void ::set_2(const string valeur) { 2 = valeur; } template <class Type> class { (); (const <Type>& droit); ~(); const <Type>& operator = (const <Type>& droit); bool operator == (const <Type>& right) const; bool operator!= (const <Type>& right) const; Classe utilitaire op() op2() «utility» class { static void op(); static void op2(); 3
Relations d association ssociation à Role Role Déclaration anticipée de la classe class ; Classe class { (); (const & droit); ~(); const & operator = (const & droit); bool operator == (const & right) const; bool operator!= (const & right) const; Pour la relation d association const * get_role() const; void Set_Role(* const value); * Rb; const * ::get_role() const { return Rb; } void ::set_role(* const value) { Rb = value; } Classe class { (); (const & droit); ~(); const & operator = (const & droit); bool operator == (const & right) const; bool operator!= (const & right) const; Pour la relation d association const * get_role() const; void Set_Role(* const value); * Ra; const * ::get_role() const { return Ra; } void ::set_role(* const value) { Ra = value; } ssociation N à Classe identique à celle d une association à #include <set> using namespace std; Classe class { 4
0..* Role Role (); (const & droit); ~(); const & operator = (const & droit); bool operator == (const & right) const; bool operator!= (const & right) const; Pour la relation d association de multiplicité 0..* const set<*> get_role() const; void Set_Role(const set<*> value); set<*> Ra; const set<*> ::get_role() const { return Ra; } void ::set_role(const set<*> value) { Ra = value; } ssociation N à avec contrainte 0..* {ordered} Role Role Classe identique à celle d une association à #include <list> using namespace std; Classe class { (); (const & droit); ~(); const & operator = (const & droit); bool operator == (const & right) const; bool operator!= (const & right) const; Pour la relation d association de multiplicité 0..* avec contrainte d ordre const list<*> get_role() const; void Set_Role(const list<*> value); list<*> Ra; const list<*> ::get_role() const { return Ra; } void ::set_role(const list<*> value) { Ra = value; } 5
Classe d association C Fichier C.h Déclaration anticipée class ; class ; class C { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d association const * get_() const; void set_(* const value); const * get_() const; void set_(* const value); * _; * _; Fichier.h #include C.h class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d association const C* get_c() const; void set_c(c* const value); C* _C; Fichier.h #include C.h class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d association const C* get_c() const; void set_c(c* const value); C* _C; 6
Classe d association N à N 0..* 0..* C Fichier C.h Déclaration anticipée class ; class ; class C { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d association const * get_() const; void set_(* const value); const * get_() const; void set_(* const value); * _; * _; Fichier.h #include <set> #include C.h using namespace std; class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d association N à N const set<c*> get_c() const; void set_c(const set<c*> value); set<c*> _C; 7
Fichier.h #include <set> #include C.h using namespace std; class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d association N à N const set<c*> get_c() const; void set_c(const set<c*> value); set<c*> _C; Relations d agrégation grégation à Déclaration anticipée class ; Role class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d agrégation const * get_() const; void set_(* const value); *_; class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d agrégation const * get_role() const; void set_role(* const value); *Role; 8
grégation avec navigation Classe ne peut pas atteindre classe Role class { constructeurs, destructeur et opérateurs idem aux classes précédentes aucun objet de type (pointeur ou autre) dans Fichier.h #include.h class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation d agrégation avec navigation const * get_role() const; void set_role(* const value); *Role; Relations de composition Composition Déclaration anticipée class ; Role class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation de composition const * get_() const; void set_(* const value); *_; class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation de composition 9
const get_role() const; void set_role(const value); Role; Une réalisation alternative de la composition Déclaration anticipée class ; class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation de composition const * get_() const; void set_(* const value); *_; class { () { effectuer les tâches utiles ici créer l objet Role Role = new ; } (const & droit) { effectuer les tâches utiles ici } créer l objet Role Role = new ; Destructeur ~() { effectuer les tâches utiles ici } détruire l objet Role delete Role; utres opérateurs idem aux classes précédentes relation de composition const * get_role() const; void set_role(* const value); *Role; 0
Composition à N Classe identique à celle d une composition à #include <set> using namespace std; 0..* Role class { constructeurs, destructeur et opérateurs idem aux classes précédentes relation de composition à N const set<> get_role() const; void set_role(const set<> value); set<> Role; Héritage Héritage simple #include.h class : public { declaration de la classe Héritage multiple #include.h #include.h class C : public, public { declaration de la classe C C