Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1663 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  OCL et UML : 2 petites questions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

OCL et UML : 2 petites questions

n°592893
Taz
bisounours-codeur
Posté le 17-12-2003 à 21:35:56  profilanswer
 

1) comment exprimer le fait que 2 objets doivent être de type différent ?
pour le moment, sachant qu'il y a une relation 1 à 1..2 de Foo à Bar, Bar étant une classe abstraite, possédant 2 classes d'implémentation Baz1 et Baz2, je veux exprimer le fait que si cette cardinalité est de 2, les deux objets ne doivent pas être de meme type
 
 je fais
 

Code :
  1. context Foo inv;
  2. self.bar->size() = 2
  3. implies
  4.         self.bar->first().oclIsKindOf(Baz1)
  5.             and
  6.         self.bar->last().oclIsKindOf(Baz2)
  7.     or
  8.         self.bar->first().oclIsKindOf(Baz2)
  9.             and
  10.         self.bar->last().oclIsKindOf(Baz1)


 
2) est ce qu'il vaut mieux rajouter un lien de navigation supplémentaire ou une contrainte OCL ?
 
j'ai Foo <-> Bar <-> Baz, je veux exprimer que pour un foo, il n'y a par navigation, qu'un seul baz associé.
 
pour le moment j'ai fait

Code :
  1. context Foo inv;
  2. self.bar.baz->size() = 1

mood
Publicité
Posté le 17-12-2003 à 21:35:56  profilanswer
 

n°592977
Taz
bisounours-codeur
Posté le 17-12-2003 à 23:32:54  profilanswer
 

ok, y a personne qui connaît OCL ici :/

n°592990
nraynaud
lol
Posté le 17-12-2003 à 23:56:23  profilanswer
 

Kad c'est un pro de ça normalement.
Mais le modèle me parraît hautement suspect.


---------------
trainoo.com, c'est fini
n°593010
Taz
bisounours-codeur
Posté le 18-12-2003 à 00:26:38  profilanswer
 

nraynaud a écrit :

Mais le modèle me parraît hautement suspect.

non, il l'est pas. Pour le 1, imagine, tu peux avoir une  collection d'objets sous-type de Bar (genre baz{i}), seulement la contrainte sur cette collection, c'est que deux instances ne soit pas de même types ( typeof(c->at(i))!=typeof(c->at(j)), pour tout i,j)
 
seulement typeof il existe pas en OCL ...

n°593013
Ernestor
modo-coco :o
Posté le 18-12-2003 à 00:32:11  profilanswer
 

Non, il existe pas c'est vrai.  
 
L'expression que tu présentes dans ton premier post semble être correcte pour exprimer cela sinon.


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593015
Taz
bisounours-codeur
Posté le 18-12-2003 à 00:37:00  profilanswer
 

bah je m'en sers, ça va ma collection est petite. mais c'est pas très souple quand même :/
sinon j'aime bien comme petit langage :)

n°593017
Ernestor
modo-coco :o
Posté le 18-12-2003 à 00:39:37  profilanswer
 

Taz a écrit :

2) est ce qu'il vaut mieux rajouter un lien de navigation supplémentaire ou une contrainte OCL ?
 
j'ai Foo <-> Bar <-> Baz, je veux exprimer que pour un foo, il n'y a par navigation, qu'un seul baz associé.
 
pour le moment j'ai fait

Code :
  1. context Foo inv;
  2. self.bar.baz->size() = 1




C'est quoi tes multiplicités sur tes associations ?
 
La tu exprimes avec ton invariant, que l'ensemble formé de tous les Baz en relation avec tous les Bar en relation avec l'objet courant n'a qu'un seul élément.


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593020
Ernestor
modo-coco :o
Posté le 18-12-2003 à 00:46:17  profilanswer
 

Taz a écrit :

bah je m'en sers, ça va ma collection est petite. mais c'est pas très souple quand même :/
sinon j'aime bien comme petit langage :)


C'est sur que c'est pas très élégant de le définir comme ca, mais bon, je vois pas trop sinon :??:
 
Et c'est clair, c'est bien pratique l'OCL si tu veux être rigoureux  :jap:


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593025
Taz
bisounours-codeur
Posté le 18-12-2003 à 01:01:38  profilanswer
 

Ernestor a écrit :


C'est quoi tes multiplicités sur tes associations ?
 
La tu exprimes avec ton invariant, que l'ensemble formé de tous les Baz en relation avec tous les Bar en relation avec l'objet courant n'a qu'un seul élément.

oh là c'est compliqué
 
à un FOO on associe 1..2 BAR
 
à un BAR on associe 1 seul BAZ
il y a une classe d'association SPAM sur le lien BAR<->BAZ
 
le truc c'est que étant donné un FOO, il ne doit y avoir qu'une relation BAR<-(SPAM)->BAZ
 
donc en fait, pour le moment, je dis que
context Foo inv;
self.bar.spam->size() = 1
 
scompliqué  [:xp1700]


Message édité par Taz le 18-12-2003 à 01:36:49
n°593055
nraynaud
lol
Posté le 18-12-2003 à 08:36:12  profilanswer
 

Taz a écrit :

non, il l'est pas.

Tiens c'est super original comme réponse.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 18-12-2003 à 08:36:12  profilanswer
 

n°593193
Taz
bisounours-codeur
Posté le 18-12-2003 à 11:16:29  profilanswer
 

nraynaud a écrit :

Tiens c'est super original comme réponse.

c'est toi qui fait chier. je pose une question et toi direct "c'est mal foutu" alors que j'ai absolument rien dit :o

n°593403
Ernestor
modo-coco :o
Posté le 18-12-2003 à 13:07:37  profilanswer
 

Taz a écrit :

oh là c'est compliqué
 
à un FOO on associe 1..2 BAR
 
à un BAR on associe 1 seul BAZ
il y a une classe d'association SPAM sur le lien BAR<->BAZ
 
le truc c'est que étant donné un FOO, il ne doit y avoir qu'une relation BAR<-(SPAM)->BAZ
 
donc en fait, pour le moment, je dis que
context Foo inv;
self.bar.spam->size() = 1
 
scompliqué  [:xp1700]


J'ai peut etre raté un truc, mais je trouve qu'il y a un truc qui cloche [:spamafote]
 
D'après tes multiplicités, et en naviguant dans le sens que l'on a, il ne peut y avoir par principe qu'un seul Baz et qu'un seul Spam associé à chaque Bar.
 
Donc écrire dans le contexte de Foo que self.bar.spam->size() = 1, ca revient à écrire self.bar -> size () = 1 donc que ta multiplicité de 1..2 entre Foo et Bar du coté de Bar est en fait 1.
 
Voila ce que j'en ai compris en tout cas :D


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593407
Taz
bisounours-codeur
Posté le 18-12-2003 à 13:12:12  profilanswer
 

non. je prends le cas concret.
 
j'ai un Article. sur cet Article il peut y avoir 1..2 Annonces
« à un FOO on associe 1..2 BAR »
 
une Personne peut établir un contrat sur un Article, via une annonce. Mais il ne peut y avoir qu'un seul contrat par Article, même si plusieurs annonces existent pour cet Article
« BAR<-(SPAM)->BAZ »
 
tu comprends le truc ?

n°593418
Ernestor
modo-coco :o
Posté le 18-12-2003 à 13:18:47  profilanswer
 

Je crois :D
 
Mais j'ai pas l'impression que ca corresponde à ce que tu décrivais au-dessus :whistle:
 
Je tente de détailler ca :
 


 
Article ------------ Annonce
1 |     *        1..2
  |
  |  
Personne  


Avec Annonce étant en plus une classe d'association de l'association entre Article et Personne.
 
Si je me gourre, corrige moi ;)


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593421
Taz
bisounours-codeur
Posté le 18-12-2003 à 13:22:21  profilanswer
 

oui mais non.
 
La Personne est associé à une Annonce, ça peut pas changer ça.
 
à la base, tu as un article et des annonces. un gus se pointe, il engage un contrat relatif à une annonce.
 
ma question initiale, c'est est-ce que en plus du
 
Personne <-(Contrat) -> Annonce <-> Article
 
je rajoute un lien Personne<->Article, tout en spécifiant que c'est le même article quelque soit la navigation.
 
ou alors ma contrainte comme actuellement

n°593424
Ernestor
modo-coco :o
Posté le 18-12-2003 à 13:25:32  profilanswer
 

J'essaye de comprendre ton schéma avant de répondre à ta question ;)
 
Si je complète, ca donne ca :
 


Article ------------ Annonce
1 |     *        1..2    | *
  |                      |
  |      1               |
Personne ----------------+- - - - Contrat


 
C'est bon la ?


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593433
Taz
bisounours-codeur
Posté le 18-12-2003 à 13:39:19  profilanswer
 

oui, c'est ça. ma question c'est esque que rajoute le personne-article ou est ce que ma contrainte va ?

n°593441
Ernestor
modo-coco :o
Posté le 18-12-2003 à 13:51:15  profilanswer
 

Je pense que ton diagramme pourrait déjà être amélioré. Ta classe Contrat semble être quand même plus importante que seulement pour rajouter des infos sur l'association entre Personne et Annonce.  
 
Personnelement, je rajouterais donc une association entre Article et Contrat.
 
Et pour l'association entre Personne et Annonce, je mettrais pas de classes d'association. A la limite, je mettrais plutot une association entre Personne et Contrat en mettant Annonce en classe d'Association de cette association.


Message édité par Ernestor le 18-12-2003 à 13:51:43

---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593447
Taz
bisounours-codeur
Posté le 18-12-2003 à 14:00:23  profilanswer
 

Le problème c'est qu'un contrat est intimement lié à une annonce. et que les annonces préexistent au contrats, et que des annonces n'entrainent pas forcément un contrat

n°593449
Ernestor
modo-coco :o
Posté le 18-12-2003 à 14:02:33  profilanswer
 

Il est aussi lié à un Article non ?
Et ça, tu le fais pas apparaître explicitement sur ton diagramme.


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593455
Taz
bisounours-codeur
Posté le 18-12-2003 à 14:11:02  profilanswer
 

ben un contrat est associé à un article oui, mais on a le lien par navigation sans problème (la navigation n'est possible que dans un sens)

n°593462
Ernestor
modo-coco :o
Posté le 18-12-2003 à 14:16:49  profilanswer
 

Oui, tu as le lien par navigation, mais je pense que de le faire ressortir explicitement serait une bonne chose.
 
Le but d'une classe d'association est vraiment de préciser des infos locales à l'association. Déduire des relations entre cette classes en suivant les associations de l'une des deux classes de l'association, c'est pas ce qu'il y a de plus élégant je trouve :/
 
Mais bon, si on reste sur ton diagramme, c'est quoi exactement la contrainte que tu veux écrire ?


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593466
Taz
bisounours-codeur
Posté le 18-12-2003 à 14:21:43  profilanswer
 

ben que par article, il peut y avoir qu'une seule relation Personne-(Contrat)-Annonce

n°593473
Ernestor
modo-coco :o
Posté le 18-12-2003 à 14:28:43  profilanswer
 

Tu peux faire un truc du genre:
 
context Article inv:
personne.contrat -> size() = 1
 
Mais bon, en même temps, en rajoutant un lien Article <--> Contrat avec une cardinalité de 1 je continue à trouver ça plus propre :jap:  
 
En plus sur ton diagramme, t'oblige qu'un contrat soit systématiquement associé entre une Personne et une Article. On peut pas avoir de lien entre Personne et Article sans contrat. C'est ça que tu veux ?


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
n°593502
Taz
bisounours-codeur
Posté le 18-12-2003 à 14:53:18  profilanswer
 

oui. merci de ton aide.

n°593509
Ernestor
modo-coco :o
Posté le 18-12-2003 à 15:07:53  profilanswer
 

Pas de quoi :)


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  OCL et UML : 2 petites questions

 

Sujets relatifs
Questions simplespleins de questions pour mon "futur" site
Questions, simples je pense2 questions PHP : Créer une mini-image / comment faire une redirection
Logiciel pour Developper en C++, et diverses questions.[PHP] Questions sur auto_increment
[Caml] debutant qq questions[ Web / C / Linux / Php ] Une foule de questions...
Jeux Pong questions + download[UML] Quel(s) ouvrage(s)?
Plus de sujets relatifs à : OCL et UML : 2 petites questions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR