ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C



Documents pareils
UML : DIAGRAMME D ETATS

TD/TP PAC - Programmation n 3

Introduction à l héritage en C++

Chapitre 10. Les interfaces Comparable et Comparator 1

Package Java.util Classe générique

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation avec des objets : Cours 7. Menu du jour

Cours 1: Java et les objets

Java Licence Professionnelle CISII,

Une introduction à Java

Programme Compte bancaire (code)

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

TP, première séquence d exercices.

Introduction au langage C

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

TD/TP PAC - Programmation n 3

Programmation Par Objets

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Solutions du chapitre 4

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Gestion distribuée (par sockets) de banque en Java

Projet de programmation (IK3) : TP n 1 Correction

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Programmer en JAVA. par Tama

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Objets et Programmation. origine des langages orientés-objet

Les frameworks au coeur des applications web

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation par les Objets en Java

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

TD3: tableaux avancées, première classe et chaînes

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Corrigés des premiers exercices sur les classes

Design patterns. Design patterns - définition. Design patterns - avantages

GOL502 Industries de services

Programmation d application Bases de données avec Java

RMI le langage Java XII-1 JMF

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Claude Delannoy. 3 e édition C++

Programmation en Java IUT GEII (MC-II1) 1

Généralités sur le Langage Java et éléments syntaxiques.

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Un ordonnanceur stupide

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

INFO-F-105 Language de programmation I Séance VI

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Plan du cours. Historique du langage Nouveautés de Java 7

Corrigé des exercices sur les références

Diagramme de déploiement

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Tp 1 correction. Structures de données (IF2)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Chapitre VI- La validation de la composition.

2. Comprendre les définitions de classes

EXERCICES UML. Modéliser cette situation par un diagramme de cas d utilisation. Consulter planning

Chapitre V. Les classes : Object, Vector, etc.

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Programmation Objet I

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Java c est quoi? Java pourquoi?

Programmation Objet Java Correction

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Programmation Orientée Objet

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Corrigé des exercices avancés sur les structures récursives

Exercices sur les interfaces

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Environnements de développement (intégrés)

Programmation Orientée Objet Java

TP Programmation Java / JDBC / Oracle

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Introduction au langage Java

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction à JDBC. Accès aux bases de données en Java

OpenPaaS Le réseau social d'entreprise

Introduction : les processus. Introduction : les threads. Plan

Pré-conditions : Evénement déclencheur : le client souhaite un virement. Description du déroulement du cas : Description des Use cases

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Création d objet imbriqué sous PowerShell.

Synchro et Threads Java TM

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Transcription:

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C La société C fabrique des pièces métalliques réalisées dans son atelier. La société C est en relation commerciale uniquement avec des clients réguliers. Les factures sont mensualisées : toutes les commandes d un client dans le mois sont facturées à la fin du mois. A la réception d une commande, le secrétariat de la société C édite un bon de fabrication qu elle transmet à l atelier (un double de ce bon de fabrication est envoyé au client). Une fois la pièce fabriquée, l atelier complète le bon de fabrication et le transmet au secrétariat qui enregistre la date de fin de fabrication et informe le client que sa pièce est disponible à l atelier. A la fin du mois, les factures sont éditées. Une facture est éditée pour chaque client ayant effectué une commande dans le mois. Si une facture n est pas payée dans le délai de 10 jours ouvrables alors un courriel de relance est envoyé au client. Tant qu il n aura pas payé sa facture aucune de ses commandes ne sera acceptée : chaque fois qu il effectuera une commande, un courriel de refus lui sera envoyé. Une facture payée est archivée 15 ans et ensuite détruite. Hypothèse : nous considérons que tous les paiements sont corrects : un client paye le total facturé ou il n envoie pas de règlement. Hors Contexte : l enregistrement de nouveau client est hors contexte. UML, C. Johnen 1 IUT de Bordeaux, V1

Le diagramme de classes mescommandes Commande - numcmd : int - datecmd : Date - descpiece : String - totalcmd : float - daterealisation : Date = NULL + nouvellecmd() + ARR_BonFabComplet() + getmontant() + getdaterealisatgion() * mescommandes Facturées * * mesfactures 1..* Facture - numfact : int - /totalfact : float - datefact : Date - daterelance : Date = NULL - datepaiement : Date = NULL - delaipaiement : int = 10 - delaiarchivage : int = 15 + ddefact () + ARR_Paiement() + ARR_DateRelance() + ARR_FinArchivage() + getdatepaiement() - numclt : int - nomclt : String - adrclt : String - etatclt : String 1 Client 1 1 mesfactures payeur * 1 mesfacturespayées es payeur * + ARR_Cmd() + apayer() + estdebiteur() + ARR_FinMois() + estajour() + getnom() La signature des méthodes ( en Java) : ARR_Cmd (descpiece : String, prixcmd : float) : void apayer () : void estdebiteur () : void estajour () : void ARR_FinMois () : void getnom() : String nouvellecmd (clt, descpiece : String, prixcmd : float): void ARR_BonFabComplet () : void getmontant () : float ddefact (clt : Client, listcmd : ArrayList<Commande>) : void ARR_Paiement (sommepayee : float) : void ARR_DateRelance () : void ARR_FinArchivage () : void getdatepaiement() : Date UML, C. Johnen 2 IUT de Bordeaux, V1

Le diagramme de contexte statique ENV_facture ENV_relance ENV_refusCmd ENV_infoPiece ENV_doubleBonFab Gestion des commandes de pièces fabriquées par la société C ENV_ddeTemporisation :ATELIER ENV_bonFab Diagramme des cas d utilisation : CU : Gestion des commandes de pièces fabriquées par la société C Traiter une commande Enregistrer la fin de la réalisation d une pièce :ATELIER Editer les factures Enregistrer un paiement Relancer un client Détruire les factures archivées UML, C. Johnen 3 IUT de Bordeaux, V1

Le diagramme de séquence «Enregistrer une commande acceptée» : :Commande ARR_Cmd nouvellecmd :ATELIER ENV_bonFab ENV_doubleBonFab Le diagramme de communication «Enregistrer une commande acceptée» : 1. ARR_Cmd 1.1. nouvellecmd :Commande 1.1.1. ENV_bonFab 1.1.2. ENV_doubleBonFab :ATELIER UML, C. Johnen 4 IUT de Bordeaux, V1

Le diagramme de séquence «Refuser une commande» : ARR_Cmd ENV_refusCmd Le diagramme de communication «Refuser une commande» : 1. ARR_Cmd 1.1. ENV_refusCmd Le diagramme de séquence «Enregistrer la fin de la réalisation d une pièce» : :ATELIER :Commande ARR_BonFabComplet ENV_infoPiece Le diagramme de communication «Enregistrer la fin de la réalisation d une pièce» : :ATELIER 1. ARR_BonFabComplet :Commande 1.1. ENV_infoPiece UML, C. Johnen 5 IUT de Bordeaux, V1

Le diagramme de séquence «Edition d une facture» : ARR_FinMois ddefact ENV_ddeTemporisation (numclt, arrfinmois, 1 mois) ENV_facture ENV_ddeTemporisation (numfact, ARRDateRelance, 10 jours) Le diagramme de communication «Edition d une facture» : 1. ARR_FinMois 1.1. ddefact 1.2. ENV_ddeTemporisation 1.1.1. ENV_facture (numclt, arrfinmois, 1 mois) 1.1.2. ENV_ddeTemporisation (numfact, ARRDateRelance, 10 jours) UML, C. Johnen 6 IUT de Bordeaux, V1

Le diagramme de séquence «Vérifier qu un client n a pas fait de commande durant le précédent mois» : ARR_FinMois ENV_ddeTemporisation (numclt, arrfinmois, 1 mois) Le diagramme de communication précédent mois» : «Vérifier qu un client n a pas fait de commande durant le 1. ARR_FinMois 1.1. ENV_ddeTemporisation (numclt, arrfinmois, 1 mois) Le diagramme de séquence «Relancer un client qui n a pas payé une facture» : ARR_DateRelance estdebiteur ENV_relance Le diagramme de communication «Relancer un client qui n a pas payé une facture» : 1. ARR_DateRelance 1.1. estdebiteur 1.2. ENV_relance UML, C. Johnen 7 IUT de Bordeaux, V1

Le diagramme de séquence «Enregistrer un paiement d un client non débiteur» : ARR_Paiement apayer ENV_ddeTemporisation (numclt, arrfinarchivage, 15 ans) Le diagramme de communication «Enregistrer un paiement d un client non débiteur» : 1. ARR_Paiement 1.1. apayer 1.2. ENV_ddeTemporisation (numclt, arrfinarchivage, 15 ans) Le diagramme de séquence «Enregistrer du paiement d un client débiteur qui reste débiteur malgré ce paiement» est identique au diagramme de séquence «Enregistrer un paiement d un client non débiteur». De la même manière, le diagramme de communication «Enregistrer du paiement d un client débiteur qui reste débiteur malgré ce paiement» est identique au diagramme de communication «Enregistrer un paiement d un client non débiteur». UML, C. Johnen 8 IUT de Bordeaux, V1

Le diagramme de séquence «Enregistrer du paiement d un client débiteur qui suite à ce paiement est à jour» : ARR_Paiement apayer estajour ENV_ddeTemporisation (numclt, arrfinarchivage, 15 ans) Le diagramme de communication «Enregistrer du paiement d un client débiteur qui suite à ce paiement est à jour» : 1. ARR_Paiement 1.1. apayer 1.2. ENV_ddeTemporisation (numclt, arrfinarchivage, 15 ans) 1.1.1. estajour Le diagramme de séquence «Détruire une facture» : ARR_FinArchivage adetruire Le diagramme de communication «Détruire une facture» : X 1. ARR_FinArchivage 1.1 adetruire UML, C. Johnen 9 IUT de Bordeaux, V1

Le diagramme Etat/Transition de la classe «Commande» : nouvellecmd 1. enregistrée entry / calculer numcmd entry / créer inst classe Commande entry / maj numcmd, datecmd, descpiece, totalcmd entry : créer inst association cmd entry / préparer bon de fabrication entry / ^ENV_bonFab[ :ATELIER] entry / ^ENV_doubleBonFab [ ] ARR_BonFabComplet 2. réalisée entry / maj daterealisation entry / préparer information sur pièce entry / ^ENV_infoPiece [ ] Caractérisation des états de la Classe Commande Commande enregistrée dateréalisation = NULL Commande réalisée dateréalisation NULL UML, C. Johnen 10 IUT de Bordeaux, V1

Le diagramme Etat/Transition de la classe Facture : ddefact 1. enregistrée entry/ maj numfact entry / créer inst FACTURE entry / maj numfact, datefact entry /créer inst association facturation entry /créer inst avec Client entry / calculer totalfact entry / préparer facture à envoyer entry /^ENV_facture [ ] entry /^ENV_ddeTemporisation [ ] ARR_DateRelance 2. impayée entry / maj daterelance entry / préparer relance à envoyer entry / ^ENV_relance [ ] entry:/^ estdebiteur [ payeur:client] ARR_Paiement ARR_Paiement 3. payée entry/ maj datepaiement entry/ ^apayer [ ] entry/ ^ENV_ddeTemporisation [ ] on ARR_FinArchivage / détruire inst association facturation et paiement ^adetruire [lui-même : Facture] adetruire Caractérisation des états de la Classe Facture Facture enregistrée Facture payée Facture impayée datepaiement = NULL datepaiement NULL datepaiement = NULL daterelance = NULL daterelance NULL UML, C. Johnen 11 IUT de Bordeaux, V1

Le diagramme Etat/Transition de la classe Client : 1. créditeur entry / maj etatclt on ARR_Cmd / ^nouvellecmd [à-créer:commande] on ARR_FinMois / s il existe des commandes du client dont la datecmd est du mois courant alors ^ddefact [à-créer ] ; ^ENV_ddeTemporisation [] estdebiteur estajour 2. débiteur entry / maj etatclt on ARR_Cmd / préparer refus de commande à envoyer ; ^ENV_refusCmd[ ] on ARR_FinMois/ s il existe des commandes du client dont la datecmd est du mois courant alors ^ddefact [à-créer ] ; ^ENV_ddeTemporisation[ :Horloge] on apayer/ si toutes les factures du clients sont payées alors ^estajour [lui-même : Client] Caractérisation des états de la Classe Client Client créditeur etatclt = "créditeur" Client débiteur etatclt = "débiteur" UML, C. Johnen 12 IUT de Bordeaux, V1

public class Commande { private int numcmd; private static int nombrecmd=0; private String descriptionpiece; private float totalcmd; private Calendar datecmd; private Calendar daterealisation=null; public Commande(String description, float cout) { numcmd= nombrecmd++; descriptionpiece = description; totalcmd = cout; datecmd = Calendar.getInstance();}; } public float getmontant() {return totalcmd;} public Calendar getdaterealisation() {return daterealisation;} public String tostring() { return(" "+descriptionpiece+" au cout : "+totalcmd);} public void arrbonfabricationcomplet(){ daterealisation = Calendar.getInstance(); System.out.println("ENV information sur realisation "+descriptionpiece);} public class Facture { private int numfacture; private static int nombrefactures = 0; private float totalfacture; private Calendar datefacture, datepaiement=null, daterelance=null; private static int delairelance = 10; private static int delaiarchivage = 15; private Collection<Commande> mescommandes; private Client monpayeur; public Calendar getdatepaiement() { return datepaiement;} public float getmontant() { return totalfacture;} public void arrpaiement(float somme) { if (somme == totalfacture) { datepaiement = Calendar.getInstance(); monpayeur.apayer() ; } } public void arrdaterelance() { if (datepaiement == null) {monpayeur.estdebiteur(); System.out.print("ENV relance de la "); this.affichage();} } public void arrdatefinarchivage() { monpayeur.factureadetruire(this, mescommandes);} public Facture(Client payeur, Collection<Commande> mescmds) { numfacture = nombrefactures++; monpayeur = payeur; mescommandes = mescmds; datefacture = Calendar.getInstance(); totalfacture = 0; for (Commande cmd : mescommandes) totalfacture =+ cmd.getmontant(); System.out.print("ENV facture "); this.affichage(); } private void affichage() { System.out.print("facture à "+monpayeur.getnom()); System.out.println(" d'un montant "+totalfacture); for (Commande cmd : mescommandes) System.out.println(" "+cmd); } } UML, C. Johnen 13 IUT de Bordeaux, V1

public class Client { private int numclt; private static int nombreclients=0; private Collection<Commande> mescommandes; private Collection<Facture> mesfactures; private Collection<Facture> mesfacturespayees; private Collection<Commande> mescommandesfacturees; private String nom; private String prenom; private String adresse; private int etatclient; // = 1 si il est débiteur public String getnom() {return nom;} public Client(String nom) { this.nom = nom; mescommandes = new ArrayList<Commande>(); mesfactures = new ArrayList<Facture>(); mesfacturespayees = new ArrayList<Facture>(); mescommandesfacturees = new ArrayList<Commande>() ; } public void apayer(){ ArrayList<Facture> factures = new ArrayList<Facture>(); for (Facture facture : mesfactures) if (facture.getdatepaiement()!= null) {factures.add(facture); } mesfactures.removeall(factures); mesfacturespayees.addall(factures); if (mesfactures.isempty()) this.estajour(); } public void estdebiteur() {etatclient = 1;} public void estajour() {etatclient = 0; } public void factureadetruire(facture facture, Collection<Commande> mescmds) { mesfacturespayées.remove(facture); mescommandesfacturees.removeall(mescmds);} public Commande arrcommande(string description, float cout){ if (etatclient == 1){ System.out.println("ENV refus Commande à "+nom); return null;} Commande cmd = new Commande(description, cout); mescommandes.add(cmd); System.out.println("ENV Bon fabrication de "+description); System.out.println(" payé par "+nom); return cmd; } } public Facture arrfinmois() { ArrayList<Commande> commandesapayees = new ArrayList<Commande>(); if (mescommandes.isempty()) return null; for (Commande cmd : mescommandes) if (cmd.getdaterealisation()!= null) commandesapayees.add(cmd); if (commandesapayees.isempty()) return null; mescommandes.removeall(commandesapayees); mescommandesfacturees.addall(commandesapayees); Facture fact= new Facture(this,commandesAPayees); mesfactures.add(fact); return fact;} UML, C. Johnen 14 IUT de Bordeaux, V1

public class ClientTest { Client client = new Client("Duval"); Facture facture, factureb; Commande cmd1, cmd2, cmd3; @Test public void testetudiantnom() { assertequals("nom client enregistre", client.getnom(),"duval");} } @Test public void fonction() { // est A Jour client.estajour(); cmd2 = client.arrcommande("desc-piece2",(float)25.5); assertnotnull("accepte commande",cmd2); // Facturation seulement les commandes realisées facture = client.arrfinmois(); assertnull("facturation",facture); cmd2.arrbonfabricationcomplet(); factureb = client.arrfinmois(); assertnotnull("facturation",factureb); assertequals(factureb.getmontant(),cmd2.getmontant(),0); // conséquence d'une relance d'une facture factureb.arrdaterelance(); Commande cmd0 = client.arrcommande("desc-piece0",(float)5.5); assertnull("refus commande",cmd0); // conséquence du paiement des factures factureb.arrpaiement((float)25.5); facture =client.arrfinmois(); assertnull("facturation mensuelle non utile",facture); cmd3 = client.arrcommande("desc-piece3",(float)35.5); assertnotnull("accepte commande",cmd3); } UML, C. Johnen 15 IUT de Bordeaux, V1

Déclaration des classes en C++ (Date.h, Client.h, Commande.h et Facture.h) ================================================================= #ifndef DATE_H #define DATE_H #include <string> #include <vector> using namespace std; class Date { private : int _jour, _mois, _annee; public : Date(int jour, int mois, int annee) ; int getjour(); int getmois(); int getannee(); }; #endif #ifndef CLIENT_H #define CLIENT_H #include <Date.h> class Facture ; class Commande ; class Client { private : int _numclt; string _nomclt, _adrclt, _etatclt; vector<facture> _mesfactures; vector<commande> _mescommandes; public : Client(string nom, string adresse); void arrcommande(string descpiece, float totalcmd) ; void apayer(); void estdebiteur(); void estajour(); void arrfinmois(); }; #endif UML, C. Johnen 16 IUT de Bordeaux, V1

#ifndef COMMANDE_H #define COMMANDE_H #include <Client.h> class Commande { private : int _numcmd; string _descpiece; float _totalcmd ; Date _daterealisation; Date _datecmd; public : Commande() ; Commande(Client clt, string descpiece, float totalcmd) ; void arrbonfabcomplet(date daterealisation); }; #endif ================================================================== #ifndef FACTURE_H #define FACTURE_H #include <Commande.h> class Facture { private : static const int _delaipaiement = 10; // 10 jours static const int _delaiarchivage = 5475; // 15 ans = 5475 jours int _numfact; float _totalfact; Date _datefact, _daterelance, _datepaiement; Client _payeur; vector<commande> _mescommandes; public : Facture (Client clt, vector<commande> mescommandes); void arrpaiement(float somme); void arrdaterelance(); void arrfinarchivage(); }; #endif #include <Facture.h> int main() { Client cl("johnen", "IUT Bordeaux 1"); Commande c(cl, "pieceacolette", 13.3); vector<commande> listecmd(10); listecmd[0] = c; Facture f(cl, listecmd); return 0; } UML, C. Johnen 17 IUT de Bordeaux, V1