EXEMPLE PROJET Objectifs de la séance : De l analyse à la conception Passage de l UML au Site Web
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 2 Projet Objectifs Mettre en application les concepts vu en cours Mise en application de l informatique Compréhension de la complexité de mise en œuvre d une solution informatique A quoi va nous servir UML dans le projet? Besoins et fonctionnalités attendues à Cas d utilisation Quels sont les besoins de mon «entreprise» pour le site? Quelles sont les fonctionnalités attendues dans le site? Processus à Diagrammes d activités Description de l ensemble de processus métier liés au site Différents modes de navigation dans le site Algorithmes pour la mise en œuvre (notamment accès BdD) Informations manipulées à Diagramme de classes Identification des concepts (entités) manipulés par le site Architecture à Diagramme de classes Description de la structure du site et de ses pages
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 3 Exemple : Association DVDs Exemple : site d une association d échange de DVDs d occasion Créer un site vitrine permettant de faire connaître les DVDs disponibles à travers l association Permettre aux internautes de rechercher un film qui les intéresse dans la base de l association
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 4 Exemple : Association DVDs Démarche : Toujours commencer par les besoins On doit être capable de rechercher un film par son titre On doit être capable de feuilleter le catalogue de DVDs disponibles Pour chaque film, on doit être capable de voir les détails concernant le film (titre originel, genre, directeur ) Diagramme de cas d utilisation identifier les acteurs identifier les besoins, puis les fonctionnalités attendues pour chaque acteur
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 5 Exemple : Association DVDs Fonctionnalités à diagramme de cas d utilisation sual Paradigm for UML Community Edition [not for commercial use] Rechercher un titre <<Include>> Afficher les résultats <<Extend>> Internaute Feuilleter catalogue <<Extend>> Afficher détails du film
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 6 Exemple : Association DVDs Démarche : comprendre le fonctionnement On ne sait toujours pas comment faire le site L Pour être capable de comprendre comment ça devrait marcher, il faut comprendre les processus Comprendre la dynamique pour mieux comprendre ce qu il y a à faire Diagramme d activités Processus permettant la réalisation des fonctionnalités prévues
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 7 Exemple : Association DVDs Spécifier le processus de navigation Comprendre comment devrait fonctionner le site Titre Titre Titre bla bla bla Titre OK Titre n xx yy zz titre xxx yyy zzz Titre n xx yy zz titre xxx yyy zzz n : xx Titre : xxx Genre :
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 8 Diagramme d activités : processus de navigation
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 9 Exemple : Association DVDs Une fois les processus maîtrisés, nous pouvons déterminer les informations et les responsabilités Trouver les informations qu on va manipuler Premier diagramme de classes avec les entités de la BdD Identification des classes «entity» Identifier les composants principaux de notre architecture Enrichir le diagramme de classes avec les classes «contrôle» et «dialogue» Ok, mais comment?? L
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 10 Exemple : Association DVDs Démarche : identification des concepts métier Pour être capable de remplir ces fonctionnalités, de quoi avons-nous besoin? 1 er diagramme de classes Concepts manipulés Films : titre, directeur, genre Acteurs : nom, prénom Les acteurs jouent dans les films Les directeurs et les acteurs sont des personnes
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 11 Exemple : Association DVDs Diagramme de classes : concepts manipulés Visual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) Film -nfilm : Integer -titre : String -genre : String * * dirige 1 dir * joue * acteur Personne -npers : Integer -nom : String -prénom : String Catalogue +recherche(titre) : Film [0..*] +recuperecatalogue() : Film [0..*]
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 12 Exemple : Association DVDs Mise en relation entre les données manipulées et le processus? comment exploiter ces données dans le site? comment réaliser le site?? L Retour sur le processus de navigation identifier les blocs d actions / activités identifier qui peut faire quoi Identifier les composants de notre architecture identifier les responsabilités de chaque bloc une responsabilité à une classe Enrichir le diagramme de classes avec les classes «contrôle» et «dialogue»
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 13 Diagramme d activités : processus de navigation Pages statiques (page accueil, formulaire de recherche) Recherche titre Récupérer catalogue Détails Film
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 14
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 15 Exemple : Association DVDs Architecture à structure de l application Une fois que les responsabilités sont identifiées, on peut les organiser dans l architecture Identifier les éléments d interaction avec les acteurs Identifier les éléments responsables de logique applicative Etablir les relations entre ces éléments et les concepts métiers Réalisation d un 2 ème Diagramme de classes
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 16 Exemple : Association DVDs 2 ème Diagramme de classes : structure de l application
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 17 Mise en œuvre Exemple : Association DVDs comment passer des processus et classes à un site? mise en œuvre des processus identification des actions / activités à programmer à pages Web dynamiques penser l algorithme pour ces actions Exemple page ctlcatalogue récupérer les titres dans le catalogue les afficher dans une page
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 18 Exemple : Association DVDs Mise en œuvre affichage du catalogue objectif : afficher le contenu du catalogue on se concentre dans une action à la fois sual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) AfficherCatalogue Récupérer titres catalogue Afficher catalogue [else] [clic film] Afficher détails film
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 19 Exemple : Association DVDs Mise en œuvre affichage du catalogue on se concentre dans une action/activité à la fois que me faut-il pour réaliser l action / activité? quelles étapes doit-on réaliser? Algorithme! Activité «Récupérer titres catalogue» Objectif : récupérer les films de la base de données étapes à réaliser : connexion à la BdD réaliser une requête SQL pour récupérer les films récupérer les résultats ils affichés par l action afficher catalogue
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 20 Exemple : Association DVDs Mise en œuvre activité «Récupérer titres catalogue» Visual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) RécupérerTitres Ouvrir connexion à la BdD connexion Si [ erreur de connexion ] [ else ] afficher message sql="select titre From Film;" arrêter le programme envoyer requête à la BdD résultats Mais en PHP ça donne quoi??
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 21 Exemple : Association DVDs On cherche la traduction en PHP Comment ouvrir une connexion avec une BdD? Classe «mysqli» Besoin de certaines informations user, host, mot de passe et base de données autant de variables nécessaires si la connexion ne marche pas, on aura un code d erreur RécupérerTitres $mysqli->connect_errno Visual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonn Ouvrir connexion à la BdD
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 22 Exemple : Association DVDs La fonction «die» arrête l exécution de PHP <html> <head> </head> <body>... La création d un objet «mysqli» <?php entraîne l ouverture de la $user="uml"; connexion avec la BdD $host="localhost"; $password="uml"; $database="collectdvd"; $mysqli = new mysqli($host, $user,$password, $database); if ($mysqli->connect_errno) { die ("Echec lors de la connexion à MySQL : ". $mysqli->connect_error); } echo "<p> connecté </p>" ;?> La propriété «connect_errno» de l objet «mysqli» indique s il y a eu une erreur
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 23 Exemple : Association DVDs On cherche la traduction en PHP ual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) Comment on envoie une requête SQL à la BdD? RécupérerTitres On va utiliser la classe «mysqli» Ouvrir connexion Opération «query ( sql )» à la BdD Besoin de préparer la requête SQL on cherche des informations à requête SELECT SELECT titre FROM Film connexion On obtient un objet contenant les résultats si pas de résultats, on obtient un objet «vide» Si [ erreur de connexion ] [ else ] sql="select titre From Film;" envoyer requête à la BdD
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 24 Exemple : Association DVDs... <?php La variable $sql contient notre requête SQL $sql = "SELECT titreorig FROM Film f" ; $res = $mysqli->query($sql); if (!$res) { die ("<p>pas de film disponible. </p>") ; } echo "<p> On a ". $res->num_rows. " lignes </p>" ; L opération «query» de l objet «mysqli» permet d envoyer la requête à la BdD?> L objet «$res» contient tous les résultats, y compris le nombre de lignes (propriété «num_rows»)
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 25 Exemple : Association DVDs Mise en œuvre affichage du catalogue ü récupérer titres catalogues on se concentre désormais sur l action «afficher catalogue» sual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) AfficherCatalogue Récupérer titres catalogue Afficher catalogue [else] [clic film] Afficher détails film
Afficher d 20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 26 Exemple : Association DVDs Activité «Afficher catalogue» Objectif : afficher les résultats obtenus de la BdD étapes à réaliser : on veut afficher le résultats dans une liste (ou tableau) à afficher la balise pour démarrer la liste (ou tableau) Visual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) pour chaque film dans le résultats, afficher le titre AfficherCatalogue afficher la balise de fin de liste Récupérer titres catalogue Afficher catalogue
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 27 Exemple : Association DVDs ual Paradigm Professional Edition(Université Paris 1 Panthéon Sorbonne) AfficherTitres afficher balise fin de liste résultats Afficher balise début liste Tant [ else ] [ il reste de films] récupérer prochain film afficher titre
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 28 Exemple : Association DVDs On cherche la traduction en PHP Comment ouvrir on affiche une balise HTML en PHP? echo «balise» ; J Comment on récupère chaque film? l objet «res» contenait tous les résultats opération «fetch_object» permet de récupérer un à un les résultats besoin d une boucle pour parcourir ces résultats while ( $ligne = $res->fetch_object() ) la variable $ligne reçoit les informations de chaque film
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 29... <?php echo "<ul>"; Exemple : Association DVDs La fonction echo permet d afficher dans la page les balises HTML/CSS while ( $ligne = $res->fetch_object() ) { echo "<li>" ; echo " $ligne->titreorig " ; echo "</li>" ; } echo "</ul>" ;?> L opération «fetch_object» de l objet «$res» permet d obtenir le prochain résultat Chaque attribut de notre requête SQL («titreorig» ici) devient une propriété de l objet dans «$ligne» L objet «$res» qu on a récupérer de l activité précédente, contient tous les résultats, on doit juste les récupérer un par un
20/03/16 Manuele Kirsch Pinheiro - CRI/UP1 - mkirschpin@univ-paris1.fr 30 Exemple : Association DVDs Pour faire la recherche d un film précis, c est pareil, seule la requête SQL change ouverture de connexion préparation de la requête envoie de la requête récupération des résultats afficher les résultats On peut donc organiser tout cela dans une classe classe Catalogue
Diagramme de classes final Revisité après la mise en œuvre Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 31
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 32 Documents créés : Exemple : implémentation mysite.css feuille de style index.html page d accueil recherche.html formulaire recherche navigation.html bloc de navigation head.html entête ctlcatalogue.php page catalogue ctlrecherche.php résultat recherche ctlfilm.php page détails produit Catalogue.php classe catalogue (accès BdD)
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 33 Exemple : implémentation Page d accueil <head> <ar.cle> <nav> <footer>
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 34 Page d accueil Exemple : implémentation <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="author" content=" " /> <@tle>associa@on DVD</@tle> <link href="css/mysite.css" rel="stylesheet" /> </head> <body> <header> <h1>associa@on DVD</h1></header> <nav> <p><a href="index.html">accueil</a></p> <p><a href="ctlcatalogue.php">nos DVDs</a></p> <p><a href="recherche.html">recherche</a></p> </nav> <sec@on> <ar.cle> <h2 class=imp> Bien </h2> <p>...</p> <p> </p> </ar.cle> </sec@on> <footer> <p>ceci </p> </footer> </body> </html>
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 35 Feuille de style : mysite.css Menu (nav) Float : left Width : 20% Contenu (article) Flottement Width : 80 % Height : 15% a:hover Lien survolé tr:nth-child(even) Lignes paires tableau Exemple : implémentation
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 36 Exemple : implémentation fonctionnalité «feuilleter catalogue» : Page ctlcatalogue.php
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 37 Exemple : implémentation Page ctlcatalogue.php <head> <?php include_once ("head.html"); include_once ("Catalogue.php");?> </head> <body> <?php include ("navigation.html");?> <section> <article> <?php $catalogue = new Catalogue(); $catalogue->connexion(); $catalogue->recuperecatalogue(); affichercatalogue($catalogue); $catalogue->deconnexion();. head.html <title>ma Librarie</title> <link href="css/mysite.css" rel="stylesheet" /> navigation.html <header> <h1> </h1> </header> <nav> <p><a href= " ">Accueil </a></p>... </nav> La classe Catalogue s occupe le l accès à la BdD Classe Catalogue Catalogue.php
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 38 Exemple : implémentation Page ctlcatalogue.php function affichercatalogue($catalogue) { echo "<table>" ; echo "<thead> <tr> "; echo "<th> N Film </th>" ; echo "<th> Titre </th> ; echo " </tr> </thead> <tbody> "; } //on recupere chacune des lignes while ( $ligne = $catalogue->prochainfilm() ) { echo "<tr>" ; echo "<td> ". $ligne->nfilm." </td>" ; } echo "<td> <a href='ctlfilm.php?nfilm=". $ligne->nfilm. "'</a>. $ligne->titreorig. " </td>" ; echo "</tr>" ; echo "</tbody> </table>" ; On prépare les balises pour l affiche d abord les entêtes On utilise la classe Catalogue on récupère film par film On récupère les données du film et on fait un lien vers la page donnant plus de détails
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 39 Exemple : implémentation Classe Catalogue : connexion à la BdD <?php class Catalogue { private $user="uml"; private $host="localhost"; private $password="uml"; private $database="collectdvd»; private $mysqli ; private $res ; func.on connexion() { $this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->database); } func.on deconnexion() { $this->mysqli->close(); } Données nécessaires à la connexion Objets connexion (mysqli) et requête (res) Opéra>on pour l ouverture de connexion opération de fermeture de connexion
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 40 Exemple : implémentation Classe Catalogue : exécution d une requête On prépare la requête SQL func.on recuperecatalogue() { $sql = "SELECT f.nfilm, f.@treorig, f.genre, f.dir FROM Film f" ; $this->res = $this->mysqli->query($sql); if (!$this->res) { die ("<p>pas de film disponible. </p>") ; }... } func.on prochainfilm() { if (! $this->res ) { return null; } return $this->res->fetch_object() ; }... et on la soumet à la BdD à travers la connexion Si ça ne marche pas, on s arrête Si on n a pas de résultats d une requête, il n y a rien à récupérer On récupère les résultats sous la forme d objets
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 41 Exemple : implémentation Page Recherche
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 42 Exemple : implémentation Page recherche.html <head>... <link href="css/mysite.css" rel="stylesheet" /> </head> <body> <header> <h1> </h1> </header> La soumission du formulaire <nav>... </nav> envoie les données à <sec@on> <ar.cle> ctlrecheche.php <h2>rechercher un @tre</h2> <form ac.on="ctlrecherche.php" method="post"> <input type="text" size="30" name="mot" /> <input type="submit" value="rechercher" /> <input type="reset" value="restaurer"/> </form> </ar.cle> </sec@on>... </body>
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 43 Exemple : implémentation Page ctlrecherche.php Rechercher un produit par un mot du titre Structure similaire à ctlcatalogue.html Différence sur la requête à la classe Catalogue Récupération information du formulaire de recherche Usage tableau global $_POST
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 44 Exemple : implémentation Page ctlrecherche.php <?php $mot = $_POST['mot']; echo "<h2 class=imp>recherche de $mot : </h2>"; On récupère le mot du formulaire $catalogue = new Catalogue(); $catalogue->connexion(); $catalogue->recherche($mot); On u>lise la classe Catalogue pour l accès à la BdD $nblignes = $catalogue->nombrefilms(); if ($nblignes > 0) {. afficherfilms($catalogue); } else { affichermessageerreur($mot); } $catalogue->deconnexion();
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 45 Exemple : implémentation Page ctlrecherche.php func.on afficherfilms($catalogue) { echo "<table>" ; echo "<thead> <tr> "; echo "<th> N Film </th>" ; echo "<th> Titre </th> ; echo " </tr> </thead> <tbody> "; On récupère auprès du catalogue chacun de films sélec>onnés } while ( $ligne = $catalogue->prochainfilm() ) { echo "<tr>" ; echo "<td> ". $ligne->nfilm." </td>" ; echo "<td> <a href='ctlfilm.php?nfilm=". $ligne->nfilm. "'</a>". $ligne->.treorig. " </td>" ; echo "</a>" ; echo "</tr>" ; } echo "</tbody> </table>" ; et on fait un lien vers la page des détails. on affiche ses données
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 46 Exemple : implémentation Opération recherche(mot) sur Catalogue.php Même procédure que recuperecatalogue, requête SQL différente class Catalogue {... On prépare la requête SQL func.on recherche($mot) { $sql = "SELECT f.nfilm, f..treorig, f.genre, f.dir FROM Film f WHERE f..treorig LIKE \"%$mot%\" "; }... $this->res = $this->mysqli->query($sql); On soumet la requête if (!$this->res) { die ("<p>pas de film disponible. </p>") ; } et si ça ne marche pas, on termine.
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 47 Exemple : implémentation Détails sur un produit ctlfilm.php
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 48 Exemple : implémentation Page ctlfilm.php Lorsqu on clique sur un produit Nouvelle recherche sur la base de données toujours à l aide de la classe Catalogue Trouver les informations sur un produit précis Usage tableau global $_GET Paramètre nfilm=n à paramètre numéro du film ctlproduit?nfilm=1
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 49 Page ctlfilm.php... <?php $nfilm = $_GET['nfilm'];... $catalogue = new Catalogue(); $catalogue->connexion();?>... Exemple : implémentation $film = $catalogue->recupererfilm($nfilm); $colonnes = $catalogue->colonnes() ; afficherdetails($film, $colonnes); $catalogue->deconnexion(); On récupère le numéro de film (paramètre nfilm) On u>lise la classe Catalogue pour trouver le film on récupère le film et ses aqributs (colonnes) function afficherdetails($film, $colonnes) { echo "<ul>"; foreach($colonnes as $col) { $attr = $col->name ; echo "<li> <b class=imp> $attr : </b> "; echo $film->$attr. " </li> " ; } echo "</ul>"; }
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 50 Exemple : implémentation Opération recupererfilm dans classe Catalogue... func>on recupererfilm($nfilm) { $sql = "SELECT f.nfilm, f.>treorig, f.genre, le mécanisme est toujours le même, ce qui change est la requête SQL (Select p.nom From Personne p Where P.npers=f.dir) As 'dir' FROM Film f WHERE f.nfilm=". $nfilm ; }... $this->res = $this->mysqli->query($sql); if (!$this->res) { die ("<p>pas de film $nfilm connu. </p>") ; } $film = $this->res->fetch_object(); return $film; on soumet la requête et on récupère l objet contenant les données du film
INFORMATIQUE MODÉLISATION UML Objectifs : Exemple de projet en VBA
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 52 Exemple en VBA Exemple de projet Un employé d une société de vêtements a besoin d un petit système pour l aider à gérer les commandes qu il passe auprès des fournisseurs Le système doit enregistrer les produits et les commandes Si le stock est inférieur à un seuil (50 produits), le système doit conseiller l employé à passer une commande L employé doit être capable d enregistrer un nouveau fournisseur lors qu il passe une commande
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 53 Diagramme de Cas d Utilisation : fonctionnalités Exemple en VBA
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 54 Exemple VBA Puisqu on va réaliser notre projet dans MS Access (un système de BdD), on va d abord réfléchir sur les données Données manipulées à 1 er Diagramme de classes : Identification des concepts métiers nécessaires à la réalisation des fonctionnalités Ø Base de données
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 55 Exemple VBA Processus de manipulation de ces données à diagramme d activités : Comprendre les processus en place pour comprendre comment les mettre en œuvre Plusieurs processus nécessaires aux différentes fonctionnalités Editer d un produit Passer une commande
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 56 Exemple VBA Diagramme d activités : éditer produits
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 57 Exemple VBA Diagramme d activités : Passer une commande
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 58 Exemple VBA Début de la mise en œuvre à identification des composants Identifier les éléments (et donc les classes) qui pourront mettre en œuvre les différentes actions Formulaires et états pour l interaction avec l utilisateur Module de classe pour la réalisation des fonctionnalités transversales 2 ème Diagramme de classes : classes applicatives Placer les différentes actions nécessaires sur les différentes classes
Exemple VBA Diagramme de classes revisité Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 59
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 60 Passage du projet à VBA Exemple VBA Création de la base de données Les tables correspondent aux classes de données Création des formulaires Correspondant aux classes Form Création des modules de programmation Module de classe à correspond à la notion de classe CtlStock : définition du seuil et vérification du stock Module à ensemble d objets et d opérations ModueGlobal : calculs variés (ex. : calculer total commande)
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 61 Exemple VBA Une «application» VBA s utilise un document MS Office, une base MS Access dans ce cas Création des tables et formulaires prévus dans le diagramme de classes dans Access
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 62 Exemple VBA Formulaires : Produit
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 63 Exemple VBA Formulaires : Commande
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 64 Exemple VBA Formulaires : Fournisseur
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 65 Exemple VBA VBA va nous permettre de programmer les vérifications qu on a indiqué dans les diagrammes d activités
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 66 Exemple VBA Vérification stock lors de l édition des produits Avertissement à l entrée de FormProduit Avertissement dans FormProduit si stock < seuil
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 67 Exemple VBA Code VBA pour FormProduit Pour chaque produit on vérifie le stock À l ouverture du formulaire, on vérifie également Et lorsqu on modifie un produit, on avertit aussi si stock<seuil
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 68 Exemple VBA Le seuil est le même pour toute l application : Objet «controle» dans ModuleGlobal Dans les modules, on peut aussi ajouter les fonctions (opérations) qu on n arrive pas à mettre dans les formulaires
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 69 Exemple VBA Les «Modules de Classe» correspondent à la notion de classe. On y définit des propriétés et des opérations Constructeur : création des objets Getter (Get) et Setter (Let) pour la propriété stockmin Si on fait contrôle.stockmin = 30 on passe par le Let Opération CheckStockMin
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 70 Exemple VBA Code VBA pour la ligne de commande À chaque mise à jour, on actualise la commande On vérifie le stock à chaque nouvelle ligne et on averti l utilisateur si le stock>seuil Les lignes de commande concernent la commande affichée
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 71 Exemple VBA Code VBA pour FormCommande Possibilité d impression Calcul total de la commande, effectué concrètement dans le ModuleGlobal
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 72 Exemple VBA Code VBA pour FormCommande Pour imprimer, on va utiliser un état capable d afficher la commande
Manuele Kirsch Pinheiro - UP1 / CRI / UFR06 Gestion 73 Exemple VBA Code VBA pour FormCommande Pour imprimer, on va utiliser un état capable d afficher la commande