diagramme de classes - base - exercicesresinfo.free.fr/btsiris/cours/programmation/uml/uml concept...

17
UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004 Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 1/17 Diagramme de classes – Concepts de base – Exercices 1. DECLARATION – INSTANCIATION 3 1.1. Génération du code en C++ 3 Exercice 1 3 Exercice 2 3 Exercice 3 3 1.2. Reverse Engineering 3 Exercice 4 3 Exercice 5 4 Exercice 6 4 1.3. Instanciation d’objets 4 Exercice 7 5 1.4. Utilisation d’objets 6 Exercice 8 6 Exercice 9 7 Exercice 10 8 2. AGREGATION D’OBJETS 9 2.1. Génération du code en C++ 9 Exercice 11 9 Exercice 12 9 Exercice 13 10 2.2. Reverse Engineering 10 Exercice 14 10 Exercice 15 10 Exercice 16 11 2.3. Parcours du lien 11 Exercice 17 11 Exercice 18 12 Exercice 19 – Navigabilité d’un lien 12 2.4. Codage d’une méthode d’un objet agrégeant 12 Exercice 20 12 Exercice 21 13 Exercice 22 13 3. PROBLEME N°1 14 Mise en situation 14 Système 14 Classes 15

Upload: others

Post on 18-Oct-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 1/17

Diagramme de classes – Concepts de base – Exercices

1. DECLARATION – INSTANCIATION 3

1.1. Génération du code en C++ 3 Exercice 1 3 Exercice 2 3 Exercice 3 3

1.2. Reverse Engineering 3 Exercice 4 3 Exercice 5 4 Exercice 6 4

1.3. Instanciation d’objets 4 Exercice 7 5

1.4. Utilisation d’objets 6 Exercice 8 6 Exercice 9 7 Exercice 10 8

2. AGREGATION D’OBJETS 9

2.1. Génération du code en C++ 9 Exercice 11 9 Exercice 12 9 Exercice 13 10

2.2. Reverse Engineering 10 Exercice 14 10 Exercice 15 10 Exercice 16 11

2.3. Parcours du lien 11 Exercice 17 11 Exercice 18 12 Exercice 19 – Navigabilité d’un lien 12

2.4. Codage d’une méthode d’un objet agrégeant 12 Exercice 20 12 Exercice 21 13 Exercice 22 13

3. PROBLEME N°1 14

Mise en situation 14 Système 14 Classes 15

Page 2: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 2/17

Contexte 15

Exercice 1 15

Exercice 2 16

Exercice 3 17

Page 3: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 3/17

1. Déclaration – Instanciation

1.1. Génération du code en C++ Exercices permettant de s’entraîner à passer d’un diagramme de classe à son équivalent en code C++.

Exercice 1 Soit le diagramme UML de la classe ci-contre. Question : Donner la déclaration de cette classe en C++.

CRobot

+ Deplacement(X : int, Y : int Z : int) : void+ Prise() : void+ Relachement() : void

Exercice 2

CTapis- Vitesse : unsigned char- Sens : bool

+ Marche(sens : bool, vitesse : unsigned char) : void+ Arret() : bool

Soit le diagramme UML de la classe ci-contre. Question : Donner la déclaration de cette classe en C++.

Exercice 3

Soit le diagramme UML de la classe ci-contre. Question : Donner la déclaration de cette classe en C++.

CJoystick+ X : int+ Y : int+ Bouton1 : bool+ Bouton2 : bool

1.2. Reverse Engineering Exercices permettant de s’entraîner à passer d’un fichier de déclaration d’une classe en C++ au diagramme modélisant cette classe.

Exercice 4 Soit le fichier de déclaration de la classe CCapteurPosition. Question : Donner la modélisation de cette classe en UML.

Page 4: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 4/17

Exercice 5 Soit le fichier de déclaration de la classe CPortail. Question : Donner la modélisation de cette classe en UML.

Exercice 6 Soit le fichier de déclaration de la classe CSerial. Question : Donner la modélisation de cette classe en UML.

1.3. Instanciation d’objets Ensemble d’exercices dont le but est de mettre en œuvre l’instanciation d’objets, sous toutes ces formes avec les implications liées à leurs manipulations. (Par rapport à leur instanciation et par rapport à l’accès à certaines méthodes).

Page 5: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 5/17

Exercice 7 Pour cet exercice nous allons utiliser la classe CMesures ci-contre. C’est une classe qui permet de mémoriser des mesures de type flottantes.

CMesures- Mesures : float[1024]- index : unsigned int = 0

+ CalculMoyenne() : float+ NewMesure(float mesure) : void+ AfficheGraphe() : void

Instanciation statique Soit le code suivant :

Question : Indiquer pour chacune des lignes si l’écriture est correcte. Si ce n’est pas le cas donner une justification. Instanciation dynamique Soit le morceau de code suivant :

Question : Donner la ligne manquante (désignée par « ??? »), qui permettrait d’ajouter une nouvelle température égale à -10.5°

Page 6: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 6/17

Explication de fonctionnement On donne le code source suivant :

Question : Expliquer ce qui se passe si l’on désire compiler puis exécuter ce programme.

Explication de fonctionnement On donne le code source suivant :

Question : Expliquer ce qui se passe si l’on désire compiler puis exécuter ce programme.

1.4. Utilisation d’objets Ce paragraphe doit permettre à l’étudiant de mieux comprendre l’intérêt de la programmation par objets.

Exercice 8 On donne :

La modélisation d’une classe CRobot qui modélise un robot industriel. Un objet de cette classe possède la faculté de commande du robot physique.

Un diagramme d’activité du robot correspondant à un cas d’utilisation de celui-ci.

Question : Ecrire le programme principal (complet en C++) permettant de piloter le robot afin qu’il réalise le fonctionnement décrit dans le diagramme d’activité.

Page 7: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 7/17

CRobot

+ Deplacement(X : int, Y : int Z : int) : void+ Prise() : void+ Relachement() : void+ Initialisation() : void

Classe CRobot

Initialisation

Déplacement X=10, Y=10, Z=100

Prise de la bouteille

Déplacement X=100, Y=10, Z=100

Déplacement X=100, Y=10, Z=50

Relachement de la bouteille

Diagramme d’activité

Exercice 9 Soit la classe CSegment qui permet d’effectuer le tracé à l’écran d’un segment comme décrit ci-dessous.

CSegment- X1 : float- Y1 : float- X2 : float- Y2 : float

+ CSegment(_x1 : float, _y1 : float, _x2 : float, _y2 : float)+ Dessine() : void

On se propose d’utiliser cette classe afin d’effectuer le tracé de cette figure. Question : Ecrire le programme qui réalise cette figure.

Page 8: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 8/17

Exercice 10 Soit la classe CEtudiant et le morceau de programme suivant.

CEtudiant- Nom : char[15]- Prenom : char[15]

+ CEtudiant(_nom : char *, _prenom : char *)+ GetNom() : char *+ GetPrenom() : char *

Question 1 : Ecrire le code permettant dans le main de créer un nouvel étudiant (Dupont Jean : par exemple). On désire maintenant passer par une fonction pour créer chaque nouvel étudiant. Cette fonction retournera l’adresse de l’objet issu de la classe CEtudiant nouvellement créé. Question 2 : Compléter le code suivant afin que cette fonction remplisse le fonctionnement attendu.

Page 9: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 9/17

On désire stocker les différents objets créés dans un tableau Question 3 : Analyser la déclaration du programme suivant (Question4) et expliquer là. Question 4 : Ecrire le code de la fonction main permettant de créer 24 nouveaux étudiants et stockant ces derniers en utilisant le tableau.

2. Agrégation d’objets Différent type d’agrégation : Valeur / Référence 1 à n (4) fixe Mono direction

2.1. Génération du code en C++

Exercice 11 Soit l’application suivante : Une fenêtre composée d’un bouton et le diagramme de classe réduit.

CFenetre

CBouton1

1

1

1

+Bouton

Question : Donner la déclaration de la classe CFenetre (telle qu’elle est modélisée) en C++.

Exercice 12 En analysant mieux la classe CRobot de l’exercice 1, nous avons pu affiner le modèle de cette classe qui suit.

CRobot

+ Deplacement(X : int, Y : int Z : int) : void+ Prise() : void+ Relachement() : void+ Initialisation() : void

CPince

+ Attraper() : void+ Relacher() : void

11 11

-Pince

Question : Donner la déclaration complète de la classe CRobot en C++.

Page 10: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 10/17

Exercice 13 Suite a des changements, nous sommes arrivés à une nouvelle modélisation de la classe CSegment. Question : Donner la déclaration complète de cette nouvelle classe CSegment en C++ ainsi que de la classe CPoint.

CSegment+ CSegment(_x1 : float, _y1 : float, _x2 : float, _y2 : float)+ Dessine() : void

CPoint+ X : float+ Y : float

2

11

#Points 2

2.2. Reverse Engineering

Exercice 14 On donne les fichiers de déclaration suivants (non complets par rapport à l’application pour lesquels ils sont destinés).

CPorte.h

CPoignee.h

CSerrure.h

Question : Donner la modélisation de ces trois classes et des relations liant celles-ci, en UML.

Exercice 15 On donne les fichiers de déclaration suivants. Question : Donner la modélisation de ces classes et des relations liant celles-ci, en UML.

Page 11: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 11/17

CTableTracante.h

CPortParallele.h

Exercice 16 On donne les fichiers de déclaration suivants.

CVoiture.h

CRoue.h

Question : Donner la modélisation de ces classes et des relations liant celles-ci, en UML.

2.3. Parcours du lien

Exercice 17

On donne le diagramme de classe suivant complété par rapport à l’exercice 11. Question 1 : Ecrire le programme principal qui permette de déclarer un objet issu de la classe CFenetre. Question 2 : Pour cet objet nouvellement créé, affecter la visibilité (Attribut Visible) de l’objet Bouton agrégé dans celui-ci. Question 3 : Compléter le code précèdent de manière à ce que le l’inscription sur le bouton, soit « Ok » et non « Bouton ».

CBouton+ Visible : bool

+ SetNom(nom : char *) : void

CFenetre

+Bouton

1

1

1

1

Page 12: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 12/17

Exercice 18 Question : En utilisant le diagramme de classe suivant, écrire le programme principal qui déclare un objet issu de la classe CVoiture et qui l’utilise afin d’affiche à l’écran (par un cout) l’état des différents roues de ce véhicule.

CRoue

+ IsFlat() : bool

CVoiture

4

1

+Roues4

1

Exercice 19 – Navigabilité d’un lien Question : En vous basant sur les diagrammes de classes des deux exercices précédents, expliquer pourquoi, à partir d’une fonction main(..), il est possible d’effectuer le fonctionnement attendu par l’énoncé. Hypothèse : sur ces deux diagrammes de classes on modifie la visibilité de l’agrégation publique en privée. Question : Indiquer à quel moment de la chaîne de Compilation – Exécution se posera-t-il un problème dans les deux cas.

2.4. Codage d’une méthode d’un objet agrégeant

Exercice 20 On donne le diagramme de classe et le code source suivants.

CFenetre

+ InitParamBouton() : void

CBouton+ Visible : bool

+ SetNom(nom : char *) : void+ SetX(x : unsigned int) : void+ SetY(y : unsigned int) : void+ SetHauteur(hauteur : unsigned int) : void+ SetLargeur(largeur : unsigned int) : void

1

1

1

+Bouton1

Question : Indiquer un tableau comme ci-dessous, l’enchaînement des actions ainsi que l’objet impliqué dans celle-ci.

Objet concerné Action réalisée Ligne de code

Win Création d’un objet issu de la classe CFenetre. CFenetre Win;

Page 13: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 13/17

Exercice 21 Soit le diagramme de classe obtenu à l’exercice 16. On vous propose de réaliser le même fonctionnent attendu de l’exercice 18 sauf que le code doit être implanté dans la méthode publique TesterEtatRoues() de la classe CVoiture. Question : Ecrire la code ce cette méthode. Question : Modifier le code du programme principal.

Exercice 22 Soit les précision suivantes par rapport au robot que nous avons actuellement utilisé lors de ces exercices. Le robot physique est un robot 5 axes. Ainsi pour lui faire faire un déplacement dans l’espace (X,Y,Z d’un point de la pince) on doit le commander par un ou plusieurs mouvement de rotation.

On donne le diagramme de classe modélisant ce robot.

CPince

+ Attraper() : void+ Relacher() : void

CRobot

+ Deplacement(X : int, Y : int, Z : int) : void+ Prise() : void+ Relachement() : void+ Initialisation() : void- CalculMouvementAxes(X : int, Y : int, Z : int, T1 : float &, T2 : float &, T3 : float &) : void

1

1

-Pince1

1

CAxeRotation

+ Tourner(Angle : float) : void

5

1

5

1

-Axe

Page 14: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 14/17

On vous fourni de plus le ci-dessous, en précisant que l’axe du lacet correspond au premier objet issu de CAxeRotation agrégé dans CRobot (le deuxième étant l’axe de l’épaule).

Question : Expliquer par rapport à la déclaration de la méthode CalculMouvementAxes(…), l’action réalisée par le code de droite fourni précédemment. Question : Compléter ce code afin que les axes de rotation soit réellement commandés. Question : Compléter le code source du programme principal afin qu’il réalise le fonctionnement décrit dans le diagramme de séquence de l’exercice 8. Question : De la même manière que l’exercice 20, effectué le bilan de toutes les actions réalisées à partir de la première ligne du programme principal.

Objet concerné Action réalisée Ligne de code …

3. Problème n°1

Mise en situation

Système Le système que nous étudions est un ordinateur de bord de voiture haut de gamme. Dans le cadre de notre étude il est associé au tableau de bord suivant.

Tableau de bord

Page 15: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 15/17

Classes Pour cette étude nous allons utiliser les classes suivantes

CVoiture

TesterEtatRoues() : void

CRoue

IsFlat() : bool

CLed

Allumer(couleur : int) : voidChanger(couleur : int) : voidEteindre() : void

Remarque : A la différence du TD, les leds liées aux roues peuvent être de deux couleurs :

• Rouge : pour indiquer un défaillance de la roue. • Verte : en temps normal.

C’est pourquoi certaines méthodes de cette classe possède un paramètre couleur. On utilisera pour le codage des définitions :

• Rouge : #define ROUGE 0. • Verte : #define VERT 1.

Contexte On donne, pour plus de compréhension la fonction principale du programme.

#include "CVoiture.h" … void main(void) { CVoiture MaVoiture ; … } ;

Exercice 1 Cet exercice ce base sur le diagramme de classe suivant.

CRoueCVoiture

41

-Roue

41

CLedCTableauBord

1

1

1

1

41 41

+Led-TableauBord

Question 1 : Justifier la visibilité de chaque lien. Question 2 : Donner la déclaration de la classe CVoiture en C++. Question 3 : Donner la déclaration de la classe CTabeauBord en C++.

Page 16: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 16/17

Question 4 : Ecrire le code de la méthode CVoiture :: TesterEtatRoues() qui permet de tester l’état de chaque roue et d’allumer une LED avec la couleur en conséquence. Question 5 : Indiquez comment et codez-le ensuite, l’automatisation du test des roues au lancement de cet ordinateur de bord.

Exercice 2 Cet exercice est une extension du premier. On considère qu’une voiture est composée de quatre portières avec un capteur à chaque portière afin de pouvoir déterminer si celle-ci est ouverte ou fermée. Pour visualiser l’état des portières, un seul voyant est présent sur le tableau de bord.

Afin de modéliser cela nous disposons de 3 classes : CPortiere, CVoyant et CCapteur. La classe CCapteur possède deux méthodes IsSet() et IsReset(), le résultat est inversé. Si la portière est fermée :

• IsSet() : retourne faux. • IsReset() : retourne vrai.

Question 5 : Compléter le diagramme de classe suivant afin de modéliser correctement les phrases ci-dessus.

CRoueCVoiture

TesterEtatRoues() : voidTesterEtatPortieres() : void 1 41

-Roue

4

CLedCTableauBord

1

1

1

-TableauBord1+Led

1 41 4

CPortiere

IsClose() : bool

CCapteur

IsSet() : boolIsReset() : bool

CVoyant

Allumer() : voidEteindre() : void

Question 6 : Donner la déclaration de la classe CVoiture en C++. Question 7 : Donner la déclaration de la classe CTabeauBord en C++.

Page 17: Diagramme de classes - Base - Exercicesresinfo.free.fr/BTSIRIS/Cours/Programmation/UML/UML Concept de … · UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc

UML : Diagramme de classes Diagramme de classes - Base - Exercices.doc 5 septembre 2004

Lycée Jean Monnet F. Dupont Section TS IRIS - Aurillac page 17/17

Question 8 : Donner la déclaration de la classe CPortiere en C++. Question 9 : Ecrire le code de la méthode CVoiture :: TesterEtatPortieres() qui permet de tester l’état de chaque portière et d’allumer le voyant le cas échéant. Question 10 : Ecrire le code de la méthode CPortiere :: IsClose() qui teste effectivement l’état de la portière.

Exercice 3 Pour un incident détecter sur la voiture on désire qu’une alarme soit déclenchée. En fonction de l’incident nous devons avoir une alarme différente. Nous allons utiliser une classe CAlarme. Question 11 : Modéliser cette classe (Identifier ces méthodes). Question 12 : Faire apparaître sur le diagramme cette classe ainsi que son lien avec d’autre classes. Question 13 : Modifier le code de la méthode CVoiture :: TesterEtatRoues(). Question 14 : Modifier le code de la méthode CVoiture :: TesterEtatPortieres().