SlideShare une entreprise Scribd logo
1  sur  17
D’UML VERS C++

AGL – Chapitre
Mme. Lilia SFAXI
Mme. Abir Gallas

L2ARS/SIL – 2011/2012

6
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 diagramme
Un document qui décrit les classes
textuellement
Un rapport représentant des faits sur le modèle
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.
Traduction UML-C++
 Diagramme de classes UML

Définit les composantes du système final
Ne 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
efficace
Séparer les composantes pour répartir le
développement entre les membres d’un groupe
Construire le système de manière correcte
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
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_;
};
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_;
};
Classes et Méthodes
Abstraites
 Méthode Abstraite

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

 Classe Abstraite

 Classe contenant au moins une méthode abstraite

ObjetGraphique
…
…
+ afficher()

class ObjetGraphique{
public:
virtual void afficher(void) = 0;
…
};
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_;
};
Composition
Cercle
- rayon_: entier

« constructor» + Cercle
+ afficher()

centre
1

Point
- abscisse_: entier
- ordonnée_: entier

class Cercle{
public:
Cercle(…);
private:
Point centre_;
int rayon_;
};
//constructeur
Cercle::Cercle (int x, int y, int rayon)
: centre_(x,y), rayon_(rayon)
{}
Agrégation (par pointeur)
Service
- nom_: chaîne
« constructor» + Service
+ set_receptionniste(e:Employe)

réceptionniste
1

Employe
- nom_: entier
- identifiant_: entier
- salaire: réel
« constructor» + Employe
+ setSalaire(salaire:réel)

class Service{
private:
string nom_;
Employe* receptionniste_;
};
//constructeur
Service::Service (string nom)
Peut être
: nom_(nom),
nul
receptionniste_(NULL)
{}
//association du réceptionniste
Service::set_receptionniste(Employe* e)
{
receptionniste_ = employe;
}
//fonction principale
int main()
{
Service expedition(« Expeditions »);
Employe* e= new Employe("Michel",123);
expedition.set_receptionniste(e);
}
Agrégation (par référence)
Service
- nom_: chaîne
« constructor» + Service
+ set_receptionniste(e:Employe)

réceptionniste
1

Employe
- nom_: entier
- identifiant_: entier
- salaire: réel
« constructor» + Employe
+ setSalaire(salaire:réel)

class Service{
private:
string nom_;
Employe& receptionniste_;
};
Doit être
//constructeur
initialisé
Service::Service (string nom,
Employe& employe)
: nom_(nom),
receptionniste_(employe)
{}
//fonction principale
int main()
{
Employe employe(« Michel», 12568);
Service expedition(«Expéditions»,
employe);
employe.set_salaire(500);
}
Associations
 Les associations, comme les agrégations, sont
représentées par des attributs
La différence se voit essentiellement dans le sens
Personne
- nom_: chaîne
0..1

appartient
0..*

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

class Personne{
private:
string nom_;
Liste<Voiture>* voitures_;
};
class Voiture{
private:
string matricule_;
string marque_;
Personne* proprietaire_;
};
Classe d’Association
Musicien

1..*

Instrument
1..*

Performance

class Performance{
private:
Musicien unMusicien;
Instrument unInstrument;
};
Exercice 1 : Forward
Engineering

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

E

- x1: entier

- x1: double

+ faireX()

+ faireE()

B

C

D

- y1: entier
+ faireY()

-z1: double
- z2: double

+ faireZ()

F
- f1: double
+ faireF()
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();
};
Exercice 2: Correction

Contenu connexe

Tendances

Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
vangogue
 
UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouri
Mansouri Khalifa
 

Tendances (20)

TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Chp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionChp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat Transition
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrige
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
La méthode z
La méthode zLa méthode z
La méthode z
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
Exercice 2 java Héritage
Exercice 2  java HéritageExercice 2  java Héritage
Exercice 2 java Héritage
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Uml classes Par les exemples
Uml classes Par les exemplesUml classes Par les exemples
Uml classes Par les exemples
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouri
 
01 correction-td smia-s2-info2
01 correction-td smia-s2-info201 correction-td smia-s2-info2
01 correction-td smia-s2-info2
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop
 

En vedette

En vedette (20)

Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disque
 
Server-side JS with NodeJS
Server-side JS with NodeJSServer-side JS with NodeJS
Server-side JS with NodeJS
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOA
 
eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESB
 
Testing Angular
Testing AngularTesting Angular
Testing Angular
 
Chp5 - Applications Android
Chp5 - Applications AndroidChp5 - Applications Android
Chp5 - Applications Android
 
Angular
AngularAngular
Angular
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de Services
 
Chp6 - Développement iOS
Chp6 - Développement iOSChp6 - Développement iOS
Chp6 - Développement iOS
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScript
 
Thinking BIG
Thinking BIGThinking BIG
Thinking BIG
 
Présentation de Thèse
Présentation de ThèsePrésentation de Thèse
Présentation de Thèse
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
 
Mobile developement
Mobile developementMobile developement
Mobile developement
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
P5 stockage
P5 stockageP5 stockage
P5 stockage
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques android
 
P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à android
 
Software Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologiesSoftware Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologies
 

Similaire à Chp6 - De UML vers C++

Visual studio
Visual studioVisual studio
Visual studio
ISIG
 
mis
mismis
mis
ISIG
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
Gregory Renard
 
Vbisigk
VbisigkVbisigk
Vbisigk
ISIG
 
Cours c#
Cours c#Cours c#
Cours c#
zan
 

Similaire à Chp6 - De UML vers C++ (20)

generation_code.pdf
generation_code.pdfgeneration_code.pdf
generation_code.pdf
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
Memo java
Memo javaMemo java
Memo java
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winforms
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Visual studio
Visual studioVisual studio
Visual studio
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
mis
mismis
mis
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Vbisigk
VbisigkVbisigk
Vbisigk
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Part1
Part1Part1
Part1
 
Cours c#
Cours c#Cours c#
Cours c#
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 

Plus de Lilia Sfaxi

Plus de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de données
 
Lab3-Android
Lab3-AndroidLab3-Android
Lab3-Android
 
Lab 5-Android
Lab 5-AndroidLab 5-Android
Lab 5-Android
 
Lab4 - android
Lab4 - androidLab4 - android
Lab4 - android
 

Chp6 - De UML vers C++

  • 1. D’UML VERS C++ AGL – Chapitre Mme. Lilia SFAXI Mme. Abir Gallas L2ARS/SIL – 2011/2012 6
  • 2. 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 diagramme Un document qui décrit les classes textuellement Un rapport représentant des faits sur le modèle
  • 3. 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.
  • 4. Traduction UML-C++  Diagramme de classes UML Définit les composantes du système final Ne 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 efficace Séparer les composantes pour répartir le développement entre les membres d’un groupe Construire le système de manière correcte
  • 5. 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
  • 6. 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_; };
  • 7. 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_; };
  • 8. Classes et Méthodes Abstraites  Méthode Abstraite  Méthode déclarée sans d’implémentation  Classe Abstraite  Classe contenant au moins une méthode abstraite ObjetGraphique … … + afficher() class ObjetGraphique{ public: virtual void afficher(void) = 0; … };
  • 9. 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_; };
  • 10. Composition Cercle - rayon_: entier « constructor» + Cercle + afficher() centre 1 Point - abscisse_: entier - ordonnée_: entier class Cercle{ public: Cercle(…); private: Point centre_; int rayon_; }; //constructeur Cercle::Cercle (int x, int y, int rayon) : centre_(x,y), rayon_(rayon) {}
  • 11. Agrégation (par pointeur) Service - nom_: chaîne « constructor» + Service + set_receptionniste(e:Employe) réceptionniste 1 Employe - nom_: entier - identifiant_: entier - salaire: réel « constructor» + Employe + setSalaire(salaire:réel) class Service{ private: string nom_; Employe* receptionniste_; }; //constructeur Service::Service (string nom) Peut être : nom_(nom), nul receptionniste_(NULL) {} //association du réceptionniste Service::set_receptionniste(Employe* e) { receptionniste_ = employe; } //fonction principale int main() { Service expedition(« Expeditions »); Employe* e= new Employe("Michel",123); expedition.set_receptionniste(e); }
  • 12. Agrégation (par référence) Service - nom_: chaîne « constructor» + Service + set_receptionniste(e:Employe) réceptionniste 1 Employe - nom_: entier - identifiant_: entier - salaire: réel « constructor» + Employe + setSalaire(salaire:réel) class Service{ private: string nom_; Employe& receptionniste_; }; Doit être //constructeur initialisé Service::Service (string nom, Employe& employe) : nom_(nom), receptionniste_(employe) {} //fonction principale int main() { Employe employe(« Michel», 12568); Service expedition(«Expéditions», employe); employe.set_salaire(500); }
  • 13. Associations  Les associations, comme les agrégations, sont représentées par des attributs La différence se voit essentiellement dans le sens Personne - nom_: chaîne 0..1 appartient 0..* Voiture - matricule_: chaîne - marque_: chaîne class Personne{ private: string nom_; Liste<Voiture>* voitures_; }; class Voiture{ private: string matricule_; string marque_; Personne* proprietaire_; };
  • 15. Exercice 1 : Forward Engineering  Réaliser en C++ le squelette du programme qui accompagne ce diagramme A E - x1: entier - x1: double + faireX() + faireE() B C D - y1: entier + faireY() -z1: double - z2: double + faireZ() F - f1: double + faireF()
  • 16. 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(); };