---
# System prepended metadata

title: Rapport IDM - Sujet 3

---

# Rapport IDM - Sujet 3
**DE GUIBERT Alexis
FABRE Maxime
FOURT Paulinien**
## Creation du métamodèle 

#### Création du diagramme de classe

>Nous avons décidé de créer des "id" dans nos différentes classes afin de pouvoir vérifier en OCL la contrainte d'unicité des chansons dans un album. En effet, la liste des chansons des albums étant des *Sets*, si ces dernières contiennent uniquement un titre, cette dernière sera sans doublon (car nous travaillons sur des *Sets*) et nous ne pourront pas vérifier la contrainte en OCL. Voici la raison pour laquelle nous avons rajouté des id premettant de différencier les instances.
>
>![](https://i.imgur.com/xfz2SDF.png)


#### Modèle ecore généré

>![](https://i.imgur.com/7rCaxvF.png)



Une fois ceci fait, nous avons décalé l'id sur le modèle ecore et valider le modèle. Le modèle doit être accepté et met à jour le genmodèle autàomatiquement.

## Creation du genModele

Ce fichier contiendra les propriétés permettant de configurer la génération du code.
>![](https://i.imgur.com/2Uji8I4.png)



## Création du projet Xtext

> Nous avons généré et testé la grammaire.


La grammaire est validée.

## Création des requêtes OCL

__Nos deux contraintes sont :__
- Un single doit avoir moins de trois chansons et toutes les chansons doivent avoir le même chanteur.
 >*Nous nous sommes donc renseignés sur le sens d'**un** chanteur. Après des recherches sur internet nous nous sommes entendu sur le fait que leurs ensembles de chanteurs doivent être identiques.*
>
>Context Album
```ocaml=
    invariant typeAlbum: self.type = AlbumType::SINGLE implies self.chansons->size() < 3 and self.chansons->forAll(c1, c2 | (c1.chanteurs - c2.chanteurs)->isEmpty() );     
```

- Il n'y a pas deux chansons identiques dans le même album

Context Album
```ocaml=
invariant pasMemeChanson: self.chansons->forAll(c1, c2 | c1.titre = c2.titre implies c1 = c2);
```



Nous avons donc testé notre grammaire en créant un nouveau projet afin de vérifier les contraintes ocl.
Voici un jeu de test permettant de vérifier ces dernières :

![](https://i.imgur.com/uzSyBpJ.png)

---
####  Voici un exemple de compilation vérifiant la contrainte sur les titres identiques : la chanson c1, c2 et c3 ont des titres différents

![](https://i.imgur.com/305EVOx.png)

---
#### Voici un exemple de compilation ne vérifiant pas la contrainte sur les titres identiques: car la chanson c2 et c3 ont le même titre

![](https://i.imgur.com/sFSgxV1.png)

---
#### Voicin un exemlpe violant la contrainte qu'un single doit avoir moins de trois chansons : en effet l'album contient trois chansons c1,c2,c3.

![](https://i.imgur.com/z0Fu5vg.png)

---
#### Exemple vérifiant la contrainte que toutes les chansons doivent avoir le(s) même(s) chanteur(s):

![](https://i.imgur.com/BF3bUKN.png)

---
#### Exemple ne vérifiant pas la précédente contrainte:

![](https://i.imgur.com/1a9vKAx.png)

