© Éditions Eyrolles
79
chapitre n° 1
Le niveau conceptuel : face à face Merise/UML
Le diagramme 1-83 représente la contrainte prédéfinie UML {complete,disjoint} qui
exprime la partition.
On peut également utiliser une programmation OCL sous la forme de trois notes. La première,
attachée à la classe Client signifierait qu’un client ne peut pas être serveur. Notez l’utilisation
de la fonction allInstances qui retourne pour un type donné l’ensemble de ses instances,
incluant aussi les instances de ses sous-classes.
context Client
inv R1 : Serveur.allInstances.noserie->excludes(self.noserie)
La seconde, attachée à la classe Serveur signifierait, d’une manière symétrique, qu’un
serveur ne peut pas être client.
context Serveur
inv R2 : Client.allInstances.noserie->excludes(self.noserie)
La troisième, attachée à la classe Poste signifierait :
●
qu’un poste est soit de type client, soit de type serveur (par le fait du ou exclusif). La fonction oclIsKindOf permet de statuer à propos de la nature de la classe d’un type passé en
paramètre ;
●
que le numéro de série est l’identifiant (fonction isUnique).
context Poste
inv R3 :
(self.oclIsKindOf(Client) xor self.oclIsKindOf(Serveur)) and
(Poste.allInstances.noserie->isUnique(c | c.noserie))
Figure 1-83 Héritage de partition avec UML
Client
Serveur
Poste_travail
nserie
typeposte
adr-IP
masque
nomserv
disque
{complete,disjoint}
79
chapitre n° 1
Le niveau conceptuel : face à face Merise/UML
Le diagramme 1-83 représente la contrainte prédéfinie UML {complete,disjoint} qui
exprime la partition.
On peut également utiliser une programmation OCL sous la forme de trois notes. La première,
attachée à la classe Client signifierait qu’un client ne peut pas être serveur. Notez l’utilisation
de la fonction allInstances qui retourne pour un type donné l’ensemble de ses instances,
incluant aussi les instances de ses sous-classes.
context Client
inv R1 : Serveur.allInstances.noserie->excludes(self.noserie)
La seconde, attachée à la classe Serveur signifierait, d’une manière symétrique, qu’un
serveur ne peut pas être client.
context Serveur
inv R2 : Client.allInstances.noserie->excludes(self.noserie)
La troisième, attachée à la classe Poste signifierait :
●
qu’un poste est soit de type client, soit de type serveur (par le fait du ou exclusif). La fonction oclIsKindOf permet de statuer à propos de la nature de la classe d’un type passé en
paramètre ;
●
que le numéro de série est l’identifiant (fonction isUnique).
context Poste
inv R3 :
(self.oclIsKindOf(Client) xor self.oclIsKindOf(Serveur)) and
(Poste.allInstances.noserie->isUnique(c | c.noserie))
Figure 1-83 Héritage de partition avec UML
Client
Serveur
Poste_travail
nserie
typeposte
adr-IP
masque
nomserv
disque
{complete,disjoint}
