added preconditions for boat type limits and updated state change operation

This commit is contained in:
Lukian 2025-01-18 18:23:55 +01:00
parent 22408c8fec
commit 4b2c5d16f2
2 changed files with 133 additions and 127 deletions

View file

@ -77,12 +77,17 @@ attributes
nom: String
operations
tirer(case: String): TypeCoup
-- pre libre: plateau.cases.
tirerRobot(): TypeCoup
end
class Flotte
operations
ajouterBateau(bateau: Bateau)
pre torpilleur: bateau.type = TypeBateau::Torpilleur implies bateaux->select(b: Bateau | b.type = TypeBateau::Torpilleur)->size() < 1
pre contre_torpilleur: bateau.type = TypeBateau::Contre_Torpilleur implies bateaux->select(b: Bateau | b.type = TypeBateau::Contre_Torpilleur)->size() < 2
pre croiseur: bateau.type = TypeBateau::Croiseur implies bateaux->select(b: Bateau | b.type = TypeBateau::Croiseur)->size() < 1
pre porte_avions: bateau.type = TypeBateau::Porte_Avions implies bateaux->select(b: Bateau | b.type = TypeBateau::Porte_Avions)->size() < 1
constraints
-- Contraintes qui vérifient le nombre de bateaux par type
inv torpilleur: bateaux->select(b: Bateau | b.type = TypeBateau::Torpilleur)->size() = 1
@ -109,7 +114,9 @@ attributes
y: Integer
type: TypeCase
operations
changerEtat(nouveauEtat: TypeCase)
changerEtat(nouveauEtat: TypeCase)
pre different: not(nouveauEtat = type)
post change: type = nouveauEtat
getEtat(): TypeCase
constraints
-- Contrainte qui vérifie qu'il n'y a pas deux cases au même endroit

View file

@ -3,73 +3,73 @@
<diagramOptions>
<autolayout>false</autolayout>
<antialiasing>false</antialiasing>
<showassocnames>false</showassocnames>
<showassocnames>true</showassocnames>
<showattributes>true</showattributes>
<showmultiplicities>true</showmultiplicities>
<showoperations>false</showoperations>
<showoperations>true</showoperations>
<showrolenames>true</showrolenames>
<showgrid>false</showgrid>
</diagramOptions>
<node id="Plateau" sizeCalculated="true" type="Class">
<name>Plateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>303.0</x>
<y>283.0</y>
<x>362.0</x>
<y>241.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="Flotte" sizeCalculated="true" type="Class">
<name>Flotte</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>201.0</x>
<y>365.0</y>
<x>370.0</x>
<y>385.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="Coup" sizeCalculated="true" type="Class">
<name>Coup</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>234.0</x>
<y>72.0</y>
<x>280.0</x>
<y>73.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="Bateau" sizeCalculated="true" type="Class">
<name>Bateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>396.0</x>
<y>371.0</y>
<x>640.0</x>
<y>382.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="Jeu" sizeCalculated="true" type="Class">
<name>Jeu</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>33.0</x>
<y>90.0</y>
<x>25.0</x>
<y>85.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="Joueur" sizeCalculated="true" type="Class">
<name>Joueur</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>97.0</x>
<y>216.0</y>
<x>122.0</x>
<y>289.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="Case" sizeCalculated="true" type="Class">
<name>Case</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>457.0</x>
<y>190.0</y>
<x>566.0</x>
<y>73.0</y>
</strategy>
<hidden>false</hidden>
</node>
<node id="TypeCoup" sizeCalculated="true" type="Enumeration">
<name>TypeCoup</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>705.0</x>
<x>857.0</x>
<y>36.0</y>
</strategy>
<hidden>false</hidden>
@ -77,7 +77,7 @@
<node id="TypeCase" sizeCalculated="true" type="Enumeration">
<name>TypeCase</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>705.0</x>
<x>857.0</x>
<y>346.0</y>
</strategy>
<hidden>false</hidden>
@ -85,7 +85,7 @@
<node id="EtatBateau" sizeCalculated="true" type="Enumeration">
<name>EtatBateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>705.0</x>
<x>857.0</x>
<y>260.0</y>
</strategy>
<hidden>false</hidden>
@ -93,7 +93,7 @@
<node id="TypeBateau" sizeCalculated="true" type="Enumeration">
<name>TypeBateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyFixed">
<x>705.0</x>
<x>857.0</x>
<y>137.0</y>
</strategy>
<hidden>false</hidden>
@ -146,19 +146,6 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Repartit::source::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>cases</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>8.0</userOffsetX>
<userOffsetY>6.0</userOffsetY>
<attached>Repartit::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Repartit::source::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="true" visible="true">
@ -173,6 +160,19 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Repartit::source::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>cases</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>8.0</userOffsetX>
<userOffsetY>6.0</userOffsetY>
<attached>Repartit::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
</properties>
<waypoints>
<edgeproperty id="Repartit::WayPoint::0"
@ -207,6 +207,19 @@
<target>Plateau</target>
<name>Compose</name>
<properties>
<edgeproperty id="Compose::target::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>plateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-17.0</userOffsetX>
<userOffsetY>-5.0</userOffsetY>
<attached>Compose::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Compose::target::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="false" visible="true">
@ -221,19 +234,6 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Compose::target::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>plateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-17.0</userOffsetX>
<userOffsetY>-5.0</userOffsetY>
<attached>Compose::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Compose::AssociationName"
sizeCalculated="true" type="associationName"
userDefined="false" visible="true">
@ -250,19 +250,6 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Compose::source::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>cases</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-6.0</userOffsetX>
<userOffsetY>-17.0</userOffsetY>
<attached>Compose::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Compose::source::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="true" visible="true">
@ -277,6 +264,19 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Compose::source::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>cases</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-6.0</userOffsetX>
<userOffsetY>-17.0</userOffsetY>
<attached>Compose::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
</properties>
<waypoints>
<edgeproperty id="Compose::WayPoint::0"
@ -413,19 +413,6 @@
<target>Flotte</target>
<name>Appartient</name>
<properties>
<edgeproperty id="Appartient::target::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>flotte</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-3.0</userOffsetX>
<userOffsetY>15.0</userOffsetY>
<attached>Appartient::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Appartient::target::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="true" visible="true">
@ -440,6 +427,19 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Appartient::target::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>flotte</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-3.0</userOffsetX>
<userOffsetY>15.0</userOffsetY>
<attached>Appartient::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Appartient::AssociationName"
sizeCalculated="true" type="associationName"
userDefined="false" visible="true">
@ -517,27 +517,12 @@
<target>Plateau</target>
<name>Utilise</name>
<properties>
<edgeproperty id="Utilise::target::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="false" visible="true">
<name>1</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>0.0</userOffsetX>
<userOffsetY>0.0</userOffsetY>
<attached>Utilise::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>BOTTOM</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Utilise::target::rolename"
sizeCalculated="true" type="rolename"
userDefined="false" visible="true">
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>plateau</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>0.0</userOffsetX>
<userOffsetY>0.0</userOffsetY>
<userOffsetX>-2.0</userOffsetX>
<userOffsetY>-23.0</userOffsetY>
<attached>Utilise::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
@ -545,6 +530,20 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Utilise::target::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="true" visible="true">
<name>1</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>26.0</userOffsetX>
<userOffsetY>9.0</userOffsetY>
<attached>Utilise::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>BOTTOM</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Utilise::AssociationName"
sizeCalculated="true" type="associationName"
userDefined="false" visible="true">
@ -565,8 +564,8 @@
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>joueur</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-1.0</userOffsetX>
<userOffsetY>7.0</userOffsetY>
<userOffsetX>12.0</userOffsetX>
<userOffsetY>24.0</userOffsetY>
<attached>Utilise::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
@ -622,19 +621,6 @@
<target>Jeu</target>
<name>Joue2</name>
<properties>
<edgeproperty id="Joue2::target::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>jeu2</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-10.0</userOffsetX>
<userOffsetY>7.0</userOffsetY>
<attached>Joue2::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Joue2::target::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="false" visible="true">
@ -649,6 +635,19 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Joue2::target::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>jeu2</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-10.0</userOffsetX>
<userOffsetY>7.0</userOffsetY>
<attached>Joue2::WayPoint::1</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>TOP</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Joue2::AssociationName"
sizeCalculated="true" type="associationName"
userDefined="false" visible="true">
@ -670,8 +669,8 @@
userDefined="true" visible="true">
<name>1</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-7.0</userOffsetX>
<userOffsetY>4.0</userOffsetY>
<userOffsetX>15.0</userOffsetX>
<userOffsetY>-15.0</userOffsetY>
<attached>Joue2::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
@ -683,8 +682,8 @@
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>joueur2</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>-16.0</userOffsetX>
<userOffsetY>34.0</userOffsetY>
<userOffsetX>-10.0</userOffsetX>
<userOffsetY>13.0</userOffsetY>
<attached>Joue2::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
@ -889,8 +888,8 @@
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>joueur1</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>62.0</userOffsetX>
<userOffsetY>-25.0</userOffsetY>
<userOffsetX>6.0</userOffsetX>
<userOffsetY>-5.0</userOffsetY>
<attached>Joue1::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
@ -933,7 +932,7 @@
<edgeproperty id="Tire::target::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="false" visible="true">
<name>1</name>
<name>0..100</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>0.0</userOffsetX>
<userOffsetY>0.0</userOffsetY>
@ -973,20 +972,6 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Tire::source::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="false" visible="true">
<name>*</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>0.0</userOffsetX>
<userOffsetY>0.0</userOffsetY>
<attached>Tire::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>BOTTOM</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Tire::source::rolename"
sizeCalculated="true" type="rolename" userDefined="true" visible="true">
<name>joueur</name>
@ -1000,6 +985,20 @@
</strategy>
<hidden>false</hidden>
</edgeproperty>
<edgeproperty id="Tire::source::multiplicity"
sizeCalculated="true" type="multiplicity"
userDefined="true" visible="true">
<name>1</name>
<strategy type="org.tzi.use.gui.views.diagrams.elements.positioning.StrategyRelativeToAttached">
<userOffsetX>6.0</userOffsetX>
<userOffsetY>-8.0</userOffsetY>
<attached>Tire::WayPoint::0</attached>
<offset_x>8</offset_x>
<offset_y>8</offset_y>
<placement>BOTTOM</placement>
</strategy>
<hidden>false</hidden>
</edgeproperty>
</properties>
<waypoints>
<edgeproperty id="Tire::WayPoint::0" sizeCalculated="true"