rapport: ajout ocl

This commit is contained in:
Laureηt 2021-10-16 14:14:08 +02:00
parent a640fd8331
commit 5d052564ff
No known key found for this signature in database
GPG key ID: D88C6B294FD40994
4 changed files with 87 additions and 54 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

View file

@ -104,12 +104,12 @@ Les relations Ressource-Request et Request-WorkDefinition sont déclarées en EO
Le modèle SimplePDL est maintenant complet pour représenter des processus de développement. Le modèle SimplePDL est maintenant complet pour représenter des processus de développement.
Un exemple complet dutilisation de ce modèle serait : Un exemple complet dutilisation de ce modèle serait :
% \begin{figure}[H] \begin{figure}[H]
% \centering \centering
% \includegraphics[width=15cm]{simplePDL_complet.png} \includegraphics[width=15cm]{simplePDL_complet.png}
% \caption{Métamodèle simplePDL complet} \caption{Métamodèle simplePDL complet}
% \label{simplePDL_complet} \label{simplePDL_complet}
% \end{figure} \end{figure}
\subsection{petriNet.ecore} \subsection{petriNet.ecore}
@ -120,12 +120,12 @@ Ils sont donc nommés et reliés entre eux par des arcs.
Ses arcs ont un attribut entier nommé weight pour indiquer le poids de larc ainsi quun boolean outgoing pour indiquer si ce dernier est dirigé dune Place vers une Transition ou dune Transition vers une Place. Ses arcs ont un attribut entier nommé weight pour indiquer le poids de larc ainsi quun boolean outgoing pour indiquer si ce dernier est dirigé dune Place vers une Transition ou dune Transition vers une Place.
(Si outgoing est vrai, alors larc va de la transition vers la place.) (Si outgoing est vrai, alors larc va de la transition vers la place.)
% \begin{figure}[H] \begin{figure}[H]
% \centering \centering
% \includegraphics[width=15cm]{petriNet_complet.png} \includegraphics[width=15cm]{petriNet_complet.png}
% \caption{Métamodèle petriNet complet} \caption{Métamodèle petriNet complet}
% \label{petriNet_complet} \label{petriNet_complet}
% \end{figure} \end{figure}
\section{Sémantique statique (avec OCL)} \section{Sémantique statique (avec OCL)}
@ -134,16 +134,49 @@ Elles assurent certains points de cohérence et permettent d'éviter les ambigu
\subsection{simplePDL.ocl} \subsection{simplePDL.ocl}
Pour les modèles SimplePDL, nous obligeons lutilisateur à entrer des noms valides pour le Process, les WorkDefinition et les Resource. Pour les modèles SimplePDL, nous contraignons les noms des Process au format camelCase. De même les noms des WorkDefinitions et des Resources doivent posséder au minimum 2 caractères et ne pas être exclusivement constitués de chiffres ou d'underscores.
Les noms doivent aussi être unique pour les WorkDefinition et les Ressource pour améliorer la clarté du modèle. \begin{textcode}
Nous avons aussi contraint lutilisateur à utiliser les WorkSequence sur des WorkDefinition appartenant au même Process. context Process
Pour éviter des non-sens, les WorkSequence ne peuvent pas non plus avoir le même successeur et prédécesseur. inv validName('Invalid name: ' + self.name):
Nous avons aussi ajouté des contraintes sur les quantités des Resource et Request. self.name.matches('[A-Za-z_][A-Za-z0-9_]*')
En effet, cela na pas de sens dsavoir des Resource ou des Request avec des quantités négatives. context WorkDefinition, Resource
De plus, une Request ne peut pas être plus grande que le nombre initial de ressources. inv nameMin2Char: self.name.matches('..+')
(Le nombre initial de ressources est le maximum puisquil ny a pas de création.) inv weirdName: not self.name.matches('([0-9]*|_*)')
\end{textcode}
Pour ne pas avoir d'ambiguité dans le modèle, les noms des WorkDefinitions et des Ressources doivent être uniques:
\begin{textcode}
inv uniqNamesWD: self.processElements
->select(pe | pe.oclIsKindOf(WorkDefinition))
->collect(pe | pe.oclAsType(WorkDefinition))
->forAll(w1, w2 | w1 = w2 or w1.name <> w2.name)
inv uniqNamesRes: self.processElements
->select(pe | pe.oclIsKindOf(Resource))
->collect(pe | pe.oclAsType(Resource))
->forAll(r1, r2 | r1 = r2 or r1.name <> r2.name)
\end{textcode}
Nous avons aussi contraint lutilisateur à utiliser les WorkSequence sur des WorkDefinition appartenant au même Process. Pour éviter des non-sens, les WorkSequence ne peuvent pas non plus avoir le même successeur et prédécesseur.
\begin{textcode}
context WorkSequence
inv successorAndPredecessorInSameProcess('Activities not in the same process : '
+ self.predecessor.name + ' in ' + self.predecessor.process().name+ ' and '
+ self.successor.name + ' in ' + self.successor.process().name):
self.process() = self.successor.process()
and self.process() = self.predecessor.process()
inv notReflexive: self.predecessor <> self.successor
\end{textcode}
Nous avons aussi ajouté des contraintes sur les quantités des Resource et Request.
En effet, cela na pas de sens dsavoir des Resource ou des Request avec des quantités négatives. De plus, une Request ne peut pas être plus grande que le nombre initial de ressources. (Le nombre initial de ressources est le maximum puisquil ny a pas de création.)
\begin{textcode}
context Resource, Request
inv negativeQuantity: self.quantity > 0
context Request
inv greedy: self.quantity <= self.target.quantity
\subsection{petriNet.ocl} \subsection{petriNet.ocl}
\end{textcode}
Les modèles PetriNet étant relativement similaireq aux modèles SimplePDL, nous avons établi des contraintes OCL similaires. Les modèles PetriNet étant relativement similaireq aux modèles SimplePDL, nous avons établi des contraintes OCL similaires.
Nous obligeons le Network et les Node à avoir des noms uniques mais également sensés. Nous obligeons le Network et les Node à avoir des noms uniques mais également sensés.
@ -184,23 +217,23 @@ Il nous est possible de transcrire nos modèles vers d'autres formats de fichier
Nous pouvons dans un premier temps de transformer nos modèles simplePDL selon le langage de balisage HTML. Nous pouvons dans un premier temps de transformer nos modèles simplePDL selon le langage de balisage HTML.
\begin{htmlcode} \begin{htmlcode}
<head><title>developpement</title></head> <head><title>developpement</title></head>
<body> <body>
<h1>Process "developpement"</h1> <h1>Process "developpement"</h1>
<h2>Work definitions</h2> <h2>Work definitions</h2>
<ul> <ul>
<li>Conception</li> <li>Conception</li>
<li> <li>
RedactionDoc requires Conception to be finished, RedactionDoc requires Conception to be finished,
Conception to be started. Conception to be started.
</li> </li>
<li>Programmation requires Conception to be finished.</li> <li>Programmation requires Conception to be finished.</li>
<li> <li>
RedactionTests requires Conception to be started, RedactionTests requires Conception to be started,
Programmation to be finished. Programmation to be finished.
</li> </li>
</ul> </ul>
</body> </body>
\end{htmlcode} \end{htmlcode}
\subsection{simplePDL $\rightarrow$ dot} \subsection{simplePDL $\rightarrow$ dot}
@ -208,13 +241,13 @@ Nous pouvons dans un premier temps de transformer nos modèles simplePDL selon l
Nous pouvons de même transformer nos modèles simplePDL selon le langage de description de graphe DOT. Nous pouvons de même transformer nos modèles simplePDL selon le langage de description de graphe DOT.
\begin{textcode} \begin{textcode}
digraph "developpement" { digraph "developpement" {
"Conception" -> "RedactionDoc" [arrowhead=vee label=finishToFinish] "Conception" -> "RedactionDoc" [arrowhead=vee label=finishToFinish]
"Conception" -> "RedactionDoc" [arrowhead=vee label=startToStart] "Conception" -> "RedactionDoc" [arrowhead=vee label=startToStart]
"Conception" -> "Programmation" [arrowhead=vee label=finishToStart] "Conception" -> "Programmation" [arrowhead=vee label=finishToStart]
"Conception" -> "RedactionTests" [arrowhead=vee label=startToStart] "Conception" -> "RedactionTests" [arrowhead=vee label=startToStart]
"Programmation" -> "RedactionTests" [arrowhead=vee label=finishToFinish] "Programmation" -> "RedactionTests" [arrowhead=vee label=finishToFinish]
} }
\end{textcode} \end{textcode}
\subsection{petriNet $\rightarrow$ tina} \subsection{petriNet $\rightarrow$ tina}
@ -222,10 +255,10 @@ digraph "developpement" {
Enfin, il nous est possible de transformer nos modèles petriNet selon le language de description de réseau de Petri TINA (format .net). Enfin, il nous est possible de transformer nos modèles petriNet selon le language de description de réseau de Petri TINA (format .net).
\begin{textcode} \begin{textcode}
net coolNetwork net coolNetwork
pl debut (1) pl debut (1)
pl fin (0) pl fin (0)
tr debut2fin debut*1 -> fin*1 tr debut2fin debut*1 -> fin*1
\end{textcode} \end{textcode}
\section{Définition de syntaxes concrètes graphiques (avec Sirius)} \section{Définition de syntaxes concrètes graphiques (avec Sirius)}
@ -259,21 +292,21 @@ Dans la continuité de la création d'outils pour manipuler et visualiser nos mo
Ainsi, pour simplePDL, la syntaxe textuelle suivante permet de manipuler nos modèles, sans passer par des outils complexes générés automatiquement par Eclipse. Ainsi, pour simplePDL, la syntaxe textuelle suivante permet de manipuler nos modèles, sans passer par des outils complexes générés automatiquement par Eclipse.
\begin{textcode} \begin{textcode}
process Developpement { process Developpement {
res Crayon 10 res Crayon 10
res Papier 20 res Papier 20
wd Conception wd Conception
req Crayon 10 req Crayon 10
req Papier 5 req Papier 5
wd RedactionTest wd RedactionTest
wd RedactionDoc wd RedactionDoc
wd Programmation wd Programmation
ws f2s from Conception to Programmation ws f2s from Conception to Programmation
ws s2s from Conception to RedactionTest ws s2s from Conception to RedactionTest
ws s2s from Conception to RedactionDoc ws s2s from Conception to RedactionDoc
ws f2f from Conception to RedactionDoc ws f2f from Conception to RedactionDoc
ws f2f from Programmation to RedactionTest ws f2f from Programmation to RedactionTest
} }
\end{textcode} \end{textcode}
\subsection{Éditeur textuel petriNet} \subsection{Éditeur textuel petriNet}