[UML] Diagramme de classes

Résolu/Fermé
Utilisateur anonyme - 20 févr. 2008 à 12:13
 Xboss - 2 mai 2008 à 03:43
Bonjour,

Je souhaite préparer un diagramme de classes d'une machine de distribution des boissons, je n'ai aucun texte sur lequel je pourrais m'appuyer. Je me suis lancée et j'ai fourni deux classes qui sont :

pièce de monnaie ayant les attributs : valeur et quantité en stock,
et boisson ayant les attributs code, nom, quantité en stock et prix,

Est-ce que les instances de la classe boisson (coka cola, capuccino, ice tea...) devront figurer dans le diagramme de classes en tant que classes ? Le type de relation leur reliant à la classe boisson serait de type généralisation (le petit triangle blanc) ? Leur présentation sera ainsi : coka cola : boisson ? Sera-t-il le même cas pour les pièces de monnaie (millimes, dinars) ?

Normalement un opérateur (manutentionnaire qui est l'administrateur aussi) devrait intervenir pour recharger la machine à boissons ainsi qu'un utilisateur de cette machine, seront-ils considérés comme des classes ?

Je suis un peu confuse :(

Merci de votre aide :)

13 réponses

SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
20 févr. 2008 à 12:45
non, tu ne mets pas tes instances dans ton diagramme, sauf si elles font partie de ton programme en tant que variable membre dans une classe x ou y apparaissant elle-même dans ton diagramme. mais ça me semble peu probable.
2
Utilisateur anonyme
20 févr. 2008 à 12:57
Merci de ta réponse.

L'instance coka cola par exemple est une instance de la classe boisson. Je pourrais pas la considérer comme variable membre de la classe boisson ?

Pourrais-je prévoir une classe boisson-prix qui permet de créer des couples boisson-prix ou bien ça ne vaut pas la peine ?

Bonne après-midi :)
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
20 févr. 2008 à 13:09
les différentes boissons, à priori, peuvent ou ne peuvent pas exister.
prenant en compte cette indétermination, tu ne peux pas les intégrer dans ton diagramme de classe.
de plus, Coca étant une boisson, créer une instance de coca dans boisson reviendrait à créer une instance boisson dans une instance boisson, qui créérait à son tour une instance boisson qui... etc...
tu peux gérer ça par des pointeurs, mais c'est plutôt au système de gestion de la machine de gérer les différentes boissons, pas à la classe boisson elle-même. la classe boissons est là pour permettre l'existence des boissons, rien de plus.

Par ailleurs, si tu déclare une instance coca de ta classe boisson en tant que variable membre de l'une des classes de ton programme, qu'advient-il de cette instance le jour ou il n'y a plus de coca dans le distributeur? le jour ou la société à qui appartient le distributeur décide de ne plus gérer de stocks de coca? etc...
le fait qu'il y ait une instance "coca" t'oblige à toujours avoir du coca dans ta machine.
pour coca, qui est un produit très prisé, ça ne pose pas de problème, mais pour les autres produits, moins prisés?..

il te faut une classe qui gère les stocks de boisson, qui a des listes de boissons, remplies avec des instances de la classe boisson. ainsi, tu peux avoir des listes vides et tu peux rajouter toutes les boissons que tu veux, tu peux ne pas y mettre certaines, etc...

il te faut aussi une classe contenant les différentes fonctions gérant le comportement de ta machine (avec un main qui va être le fondement du fonctionnement de ta machine), et qui va bontenir ta liste de boissons, ta liste de pièces, etc...

n'oublie pas de gérer les erreurs et les exceptions... (pièce coincée, canette coincée, plus de monnaie pour le rendu de monnaie, demande d'une boisson qui n'est plus en stock, etc...)

avec ça, tu as moyen de faire un beau petit soft.
0
Utilisateur anonyme
20 févr. 2008 à 13:58
Re,

Merci de ton ample explication :)

J'ai bien compris le fait de ne pas devoir créer des classes instances (Coca Cola, ice-tea...).

il te faut une classe qui gère les stocks de boisson, qui a des listes de boissons, remplies avec des instances de la classe boisson. ainsi, tu peux avoir des listes vides et tu peux rajouter toutes les boissons que tu veux, tu peux ne pas y mettre certaines, etc... --> Je vais prévoir une classe tiroir qui va classer les boissons.

il te faut aussi une classe contenant les différentes fonctions gérant le comportement de ta machine (avec un main qui va être le fondement du fonctionnement de ta machine), et qui va bontenir ta liste de boissons, ta liste de pièces, etc... --> Je vais créer une classe appelée main ou unité centrale , cette classe aurait les méthodes suivantes :

get liste_prix() : pour obtenir la liste des couples boisson/prix.
cancel() : en cas où l'utilisateur renonce à l'opération d'achat et voudrait restituer son argent.
distribuer_boisson(),
ajouter_boisson(),
et ajouter_tiroir().

:)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
20 févr. 2008 à 14:22
c'est peut-être pas une bonne idée de créer une classe tiroir, à moins que le tiroir ne soit un élément du distributeur.
les classes "fourre-tout" sont une très mauvaise idée, en général.
créé-toi plutôt une variable membre dans la classe qui va bien qui sera une liste ou un vecteur qui contiendra les différentes boissons que tu as en stock ou que tu es sensé avoir si les stocks sont vides, et navigues dans ces listes en fonction de tes besoins. ça sera beaucoup plus rigoureux.
0
Utilisateur anonyme
20 févr. 2008 à 20:02
Bonsoir,

D'après ce que j'ai compris, il faut que j'ajoute un attribut de type liste ou vecteur dans la classe boisson, qui servira à parcourir les différentes boissons en stock. Cet attribut remplacera l'idée de créer une classe tiroir ; c'est bien ça ?

Autre question s'il te plait : la classe prix_boisson dont je t'ai parlé ne peut pas être envisageable ?

A la fin, j'aurai 6 classes à savoir : piece_de_monnaie, boisson, utilisateur, manutentionnaire, unite_centrale et boisson_prix.

Merci de ton aide.

Bonne soirée :)
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
21 févr. 2008 à 09:37
l'asssociation prix/boisson est à faire plus dans une table de base de données ou à stocker dans une liste comme structure plutôt que classe. mais je ne vois pas pourquoi, avec la boisson, tu ne mets pas un attribu prix... une boisson n'a qu'un seul prix, et elle a toujours un prix, à priori.

petites questions techniques : pour toi, c'est quoi une liste ou un vecteur? qu'est-ce que tu connais à l'allocation dynamique de mémoire?
0
Utilisateur anonyme
21 févr. 2008 à 10:18
Dans la classe boisson, j'ai bien mis un attribut qui s'appelle prix :)

D'après mes humbles connaissances, la liste est une sorte de tableau prédéfini et qui comporte d'avance des méthodes (remplir, initialiser...). Avant, on était obligés de déclarer un tableau ainsi :

int* tab; //créer le pointeur
tab = new int[10]; // allocation de l'espace mémoire


Mais avec la classe liste, qui comporte toutes les méthodes usuelles des tableaux, ça facilite les choses. Nous aurons juste besoin d'appeler une méthode sous cette forme :
objet.methode();


Pour boisson_prix, je vais l'ajouter en tant que liste dans la classe boisson, cela me parait logique.

Bonne journée.
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
21 févr. 2008 à 11:15
je reviens vers ma remarque à propos des ptix et des boissons : si tu mets ta liste d'association prix/boisson dans ta classe boisson, tu sera obligé de passer par une instance de ta classe boisson pour obtenir un prix
par ailleurs, tu auras une liste créée par instance de boisson, et tu auras donc autant de listes créées que ce qu'il existe de boissons dans ton distributeur, ajouté à celà que chacune de ces listes peut être remplie de façon différente des autres... alors au final, on se réfère à laquelle?
Donc, cette liste, il t'en faut une et une seule, contenant l'association de tout les prix avec toutes les boissons
donc ça n'est pas la bonne solution

le plus compliqué n'est pas forcément ce qui marche le mieux... au contraire ;o)
0
Utilisateur anonyme
23 févr. 2008 à 09:47
Je vais essayer de préparer un bon plat pendant le week end avec tout ça, quelques "épices" et ça sera bien cuit...

Cordialement :)

MERCI INFINIMENT
0
Utilisateur anonyme
28 mars 2008 à 12:03
Re,

Je joins le diagramme de classe dessiné à l'aide de Objecteering :
https://www.cjoint.com/?dCmdrD14Dh

Si tu trouves encore des "gaucheries", les signaler me sera d'une grande utilité.

Merci bien.
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
28 mars 2008 à 12:23
ça m'a l'air pas mal...
tu gères les erreurs? somme incomplète, rendu monnaie, plus de monnaie pour le rendu, demande d'une boisson pas en stock, boisson coincée (tout le monde connait :-/ ), etc...
0
Utilisateur anonyme
28 mars 2008 à 13:01
Non, je n'ai pas encore géré les erreurs :(

Il faut qu'elles soient des méthodes au sein des classes ? :S

J'ai une question s'il te plait : Quand je commence à coder mon programme, toute classe dans le diagramme de classes sera convertie en une classe en C++ (je coderai en C++) ? J'aurai plein de fichier dans ce cas : achat.h, achat.cpp, boisson.h, boisson.cpp...
0
Xboss > Utilisateur anonyme
2 mai 2008 à 03:43
Salut j arrive plus a acceder au iagramme de classe si vous pouviez le remettre c est assez urgent merci
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
28 mars 2008 à 13:20
effectivement, c'est généralement ce qui se fait.
tu peux faire plusieurs classes par fichier, mais c'est déconseillé, on s'y perd vite.
pour les méthodes de gestion d'erreur, il faut qu'elles soient implémentées dans la classe qui reçoit l'erreur... le reste est une question de logique.
0