Newer
Older
# TP 1
Le but principal de ce TP est de comprendre comment mettre en oeuvre en C++ les principaux éléments du diagramme de classes UML.
Gardez le code ce TP pour la suite du cours car vous écrirez des tests pour valider votre code.
Chaque question est séparée donc veillez à créer un dossier pour chacune d'entre elles (ie ne modifiez pas le code d'une question précédente).
## Exercice 1 : Mise en oeuvre de l'association
In the folder `session-1`. Each question has its sub-folder.
The script `compilerun.sh` compiles all the code and runs the tests.
After `q1`, you can copy-paste the classes and tests created for `q1` into `q2` (etc.) to speed-up the coding tasks of the next questions.
**Beware: you must change:**
- **the name of the test classes for each question. For example with Q2, use `class GuidonTestQ2` and `class VeloTestQ2`**
- **the name of the classes for each question. For example with Q2, use `class GuidonQ2` and `class VeloQ2` and also change the attribute types, etc.**
For each question you have to write tests.
### Q1 Créer les classes `Velo` et `Guidon`.
Implement the following class diagram (class files already created).
Complete the test file to write tests.

### Q2
On veut maintenant s'assurer que lorsque l'on ajoute un `Guidon` à un `Velo`, le `Velo` soit automatiquement ajouté au `Guidon` (principe d'intégrité référentielle) et qu'également le `Guidon` soit automatiquement ajouté au `Vélo`. Copier-coller les classes de la question 1 dans un nouveau dossier et apporter les modifications nécessaires.
Pour Q2, vous ne pouvez pas utilisez de méthode de Vélo dans la classe Guidon du fait de la dépendence cyclique (c'est un bug du TP).
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
### Q3
Supposons maintenant qu'un `Guidon` ne puisse plus avoir accès à son potentiel `Velo`. Copier-coller les classes de la question 1 dans un nouveau dossier et modifier les pour prendre en compte ce changement illustré par la figure suivante.

### Q4
Une instance de `Velo` est liée à plusieurs instances de `Roue` (cf figure suivante). Créer les classes `Velo` et `Roue` et mettre en oeuvre l'association à liaison multiple. Il faut que le cas de test `testq4.java` fonctionne correctement.

## Exercice 2 : Mise en oeuvre de la composition
### Q5
Une instance de `Velo` *se compose* de plusieurs instances de `Roue` (cf figure suivante). Copier-coller les classes de la question 4 dans un nouveau dossier et modifier les pour prendre en compte la composition illustrée par la figure suivante. Penser à respecter l'intégrité référentielle du rôle `roues`.

## Exercice 3 : Mise en oeuvre de l'héritage
### Q6
Un pégase est à la fois un cheval et un oiseau (cf figure suivante).

### Q7: code coverage
Edit the script `compilerun.sh` to add code coverage (cf [./gtest-example/compilerun.sh](./gtest-example/compilerun.sh)).
Improve your test suite to have a code coverage of 100%.