SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusLilia Sfaxi
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classeAmir Souissi
 
Chap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsChap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsAmir Souissi
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionInes Ouaz
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java HéritageNadaBenLatifa
 
Chp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionChp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionLilia Sfaxi
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Faycel Chaoua
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Ilyas CHAOUA
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMajid CHADAD
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 

Was ist angesagt? (20)

TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processus
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
 
Chap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsChap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitions
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
MEMOIRE DE STAGE
MEMOIRE DE STAGEMEMOIRE DE STAGE
MEMOIRE DE STAGE
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correction
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Uml
UmlUml
Uml
 
Chp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionChp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat Transition
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoire
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 

Andere mochten auch

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 disqueLilia Sfaxi
 
Server-side JS with NodeJS
Server-side JS with NodeJSServer-side JS with NodeJS
Server-side JS with NodeJSLilia Sfaxi
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOALilia Sfaxi
 
eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESBLilia Sfaxi
 
Chp5 - Applications Android
Chp5 - Applications AndroidChp5 - Applications Android
Chp5 - Applications AndroidLilia Sfaxi
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServicesLilia Sfaxi
 
Chp6 - Développement iOS
Chp6 - Développement iOSChp6 - Développement iOS
Chp6 - Développement iOSLilia Sfaxi
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScriptLilia Sfaxi
 
Présentation de Thèse
Présentation de ThèsePrésentation de Thèse
Présentation de ThèseLilia Sfaxi
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services WebLilia Sfaxi
 
Mobile developement
Mobile developementMobile developement
Mobile developementLilia Sfaxi
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceLilia Sfaxi
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques androidLilia Sfaxi
 
P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à androidLilia Sfaxi
 
Software Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologiesSoftware Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologiesLilia Sfaxi
 

Andere mochten auch (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
 

Ähnlich wie Chp6 - De UML vers C++

Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent Agnus
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winformsChristophe Zome
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Rahma Boufalgha
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++coursuniv
 
Visual studio
Visual studioVisual studio
Visual studioISIG
 
mis
mismis
misISIG
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Vbisigk
VbisigkVbisigk
VbisigkISIG
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Cours c#
Cours c#Cours c#
Cours c#zan
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 
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++11Microsoft
 

Ähnlich wie 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
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
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
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
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
 

Mehr von Lilia Sfaxi

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.pdfLilia Sfaxi
 
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.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 
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éesLilia Sfaxi
 
TD2-JS-functions
TD2-JS-functionsTD2-JS-functions
TD2-JS-functionsLilia Sfaxi
 

Mehr von 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
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
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
 
Lab2-android
Lab2-androidLab2-android
Lab2-android
 
Lab1-android
Lab1-androidLab1-android
Lab1-android
 
TD2-JS-functions
TD2-JS-functionsTD2-JS-functions
TD2-JS-functions
 

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(); };