Rechercher : dans
Par :

[UML] Diagramme de classes

Dernière réponse le 2 mai 2008 à 03:43:40 khaoula.85, le 20 fév 2008 à 12:13:53 
 Signaler ce message aux modérateurs

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 :)

Meilleures réponses pour « [UML] Diagramme de classes » dans :

1

SebManfred, le 20 fév 2008 à 12:45:17
  • +1

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.

Répondre à SebManfred

2

khaoula.85, le 20 fév 2008 à 12:57:34

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 :)

Répondre à khaoula.85

3

SebManfred, le 20 fév 2008 à 13:09:36

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.

Répondre à SebManfred

4

khaoula.85, le 20 fév 2008 à 13:58:59

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().

:)

Répondre à khaoula.85

5

SebManfred, le 20 fév 2008 à 14:22:15

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.

Répondre à SebManfred

6

khaoula.85, le 20 fév 2008 à 20:02:54

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 :)

Répondre à khaoula.85

7

SebManfred, le 21 fév 2008 à 09:37:53

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?

Répondre à SebManfred

8

khaoula.85, le 21 fév 2008 à 10:18:00

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.

Répondre à khaoula.85

9

SebManfred, le 21 fév 2008 à 11:15:37

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)

Répondre à SebManfred

10

khaoula.85, le 23 fév 2008 à 09:47:01

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

Répondre à khaoula.85

11

khaoula.85, le 28 mar 2008 à 12:03:46

Re,

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

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

Merci bien.

Répondre à khaoula.85

12

SebManfred, le 28 mar 2008 à 12:23:35

ç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...

Répondre à SebManfred

13

khaoula.85, le 28 mar 2008 à 13:01:54

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...

Répondre à khaoula.85

15

 Xboss, le 2 mai 2008 à 03:43:40

Salut j arrive plus a acceder au iagramme de classe si vous pouviez le remettre c est assez urgent merci

Répondre à Xboss

14

SebManfred, le 28 mar 2008 à 13:20:34

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.

Répondre à SebManfred