Top Banner
L2ARS/SIL – 2011/2012 AGL – Chapitre 6 D’UML VERS C++ Mme. Lilia SFAXI Mme. Abir Gallas
17

Chp6 - De UML vers C++

Jun 20, 2015

Download

Technology

Lilia Sfaxi

Visitez http://liliasfaxi.wix.com/liliasfaxi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Chp6 - De UML vers C++

L2ARS/SIL – 2011/2012

AGL – Chapitre 6

D’UML VERS C++

Mme. Lilia SFAXIMme. Abir Gallas

Page 2: Chp6 - De UML vers C++

Génération de Code

Génération: Production automatique d’artéfacts à partir d’un modèle

Exemple: à partir d’un diagramme de classes, on peut générer:Du code pour les classes du diagrammeUn document qui décrit les classes

textuellementUn rapport représentant des faits sur le

modèle

Page 3: Chp6 - De UML vers C++

Rétro-Ingénierie

Le contraire de la génération Analyse du code d’un programme

pour produire des modèles qui représentent la même information de manière visuelle

Exemple: faire de la rétro-ingénierie de classes C++ résulte en un diagramme de classes représentant les relations entre elles.

Page 4: Chp6 - De UML vers C++

Traduction UML-C++

Diagramme de classes UMLDéfinit les composantes du système finalNe définit pas le nombre et l’état des instances

individuelles Un diagramme de classes proprement

réalisé permet de:Structurer le travail de développement de

manière efficaceSéparer les composantes pour répartir le

développement entre les membres d’un groupe

Construire le système de manière correcte

Page 5: Chp6 - De UML vers C++

D’UML vers C++ : Vocabulaire

Le tableau suivant liste la conversion entre les éléments du modèle UML vers du code C++ Élément UML Élément C++

Packetage Répertoire / Namespace

Classe Classe (fichiers .h et .cpp)

Relation de Généralisation Héritage

Relation d’association/agrégation/composition

Attribut

Attribut Attribut

Méthode Opération

Paramètre Argument d’Opération

Page 6: Chp6 - De UML vers C++

Classes, Attributs et Méthodes

Représentation d’une classe, avec des attributs et méthodes publics et privés.

Point- abscisse_: entier- ordonnée_: entier

+ x() : entier+ y() : entier+ deplacerDe(incX: entier, incY : entier)+ deplacerVers(dX: entier, dY : entier)

class Point{ public: Point( int abs, int ord) int x(void) const; int y(void) const; void deplacerDe (int incX, int incY); void deplacerVers (int dX, int dY); private: int abscisse_; int ordonnee_;};

Page 7: Chp6 - De UML vers C++

Attributs et Méthodes « de Classe »

Attribut/Méthode de classe: Commun à tous les objets créés Exemple: compteur du nombre d’instances créées.

Point…+ NbPoints_: entier

…+ NbPoints() : entier

class Point{ public: static int NbPoints(void); private: static int NbPoints_;};

Page 8: Chp6 - De UML vers C++

Classes et Méthodes Abstraites

Méthode AbstraiteMéthode déclarée sans d’implémentation

Classe AbstraiteClasse contenant au moins une méthode abstraite

ObjetGraphique…

…+ afficher()

class ObjetGraphique{ public: virtual void afficher(void) = 0; …};

Page 9: Chp6 - De UML vers C++

Héritage

ObjetGraphique# pointBase_:Point# couleur_: entier# epaisseur_: entier

« constructor» +ObjetGraphique+ afficher()

Cercle# rayon_:entier

« constructor» + Cercle+ afficher()

class ObjetGraphique { public: ObjetGraphique (int x, int y, int couleur=0, int epaisseur=0) : pointBase_(x,y), couleur_(couleur), epaisseur_(epaisseur) {} protected: Point pointBase_; int couleur_; int epaisseur_; };class Cercle : public ObjetGraphique{ public: Cercle (int x, int y, int rayon, int couleur=0, int epaisseur=0) : ObjetGraphique(x, y, couleur, epaisseur), rayon_(rayon) {} ... private: int rayon_; };

Page 10: Chp6 - De UML vers C++

Composition

Cercle- rayon_: entier

Point- abscisse_: entier- ordonnée_: entier

class Cercle{ public: Cercle(…); private: Point centre_; int rayon_;};//constructeurCercle::Cercle (int x, int y, int rayon) : centre_(x,y), rayon_(rayon){}

« constructor» + Cercle+ afficher()

1

centre

Page 11: Chp6 - De UML vers C++

Agrégation (par pointeur)

Service- nom_: chaîne

class Service{ private: string nom_; Employe* receptionniste_;};//constructeurService::Service (string nom) : nom_(nom), receptionniste_(NULL){}//association du réceptionnisteService::set_receptionniste(Employe* e){ receptionniste_ = employe;}//fonction principaleint main(){ Service expedition(« Expeditions »); Employe* e= new Employe("Michel",123); expedition.set_receptionniste(e);}

« constructor» + Service+ set_receptionniste(e:Employe)

1

- nom_: entier- identifiant_: entier- salaire: réel

Employe

« constructor» + Employe+ setSalaire(salaire:réel)

Peut être nul

réceptionniste

Page 12: Chp6 - De UML vers C++

Agrégation (par référence)

Service- nom_: chaîne

- nom_: entier- identifiant_: entier- salaire: réel

class Service{ private: string nom_; Employe& receptionniste_;};//constructeurService::Service (string nom, Employe& employe) : nom_(nom), receptionniste_(employe){}//fonction principaleint main(){ Employe employe(« Michel», 12568); Service expedition(«Expéditions», employe); employe.set_salaire(500);}

Employe1

« constructor» + Employe+ setSalaire(salaire:réel)

« constructor» + Service+ set_receptionniste(e:Employe)

Doit être initialisé

réceptionniste

Page 13: Chp6 - De UML vers C++

Associations

Les associations, comme les agrégations, sont représentées par des attributsLa différence se voit essentiellement dans le sens

Personne- nom_: chaîne

- matricule_: chaîne- marque_: chaîne

Voiture0..*

appartient0..1

class Personne{ private: string nom_; Liste<Voiture>* voitures_;};

class Voiture{ private: string matricule_; string marque_; Personne* proprietaire_;};

Page 14: Chp6 - De UML vers C++

Classe d’Association

Musicien1..*1..*

Instrument

Performance

class Performance{ private: Musicien unMusicien; Instrument unInstrument;};

Page 15: Chp6 - De UML vers C++

Exercice 1 : Forward Engineering

Réaliser en C++ le squelette du programme qui accompagne ce diagramme

A- x1: entier

+ faireX()

E- x1: double

+ faireE()

D-z1: double- z2: double

C

+ faireZ()

B- y1: entier

+ faireY()

F- f1: double

+ faireF()

Page 16: Chp6 - De UML vers C++

Exercice 2 : Reverse Engineering

Représenter le diagramme de classes UML correspondant au squelette de code suivant:

class Department { private : char* name_p; public: Department (char *dName) { name_p = new char(sizeof(strlen(dName))); name_p = dName; } char* dName(); };

class Student { private : char* name_p; public: Student (char *sName) { name_p = new char (sizeof(strlen(sName))); name_p = sName; } char* sName();};

class Course { private: Student * std_p; Department * dept_p; char * courseName_p; static int index; static Course *courseList[4]; public: Course (char* crseName, Student* student, Department* dept): courseName_p(0), std_p(student), dept_p(dept) { }; static char* findStudent (char *crseName, char* deptName); char * getStdName() ; char * getDeptName{}; char * getCourseName();};

Page 17: Chp6 - De UML vers C++

Exercice 2: Correction