23. Un programme objet persistant P P P P P P Enfant College Lycée Enfant Enfant Enfant Usine T T
24.
25.
26.
27.
28. Encapsulation Public : accessible par tout le monde Protected : accessible par l'objet et par les héritiers Private : accessible seulement par l'objet Les accesseurs : SetAttr et GetAttr
30. Polymorphisme Un petit programme : Personne p; Dentiste d; Chirurgien c; p = d; p.Travailler(); p = c; p.Travailler(); Arracher des dents Opérer Faire du pain
31. Les concepts d'une bonne conception Ouverture-Fermeture OCP Inversion des dépendances DIP Substitution de Liskov LSP Séparation des interfaces ISP
45. La modélisation : Pourquoi Une bonne société qui développe des programmes est celle qui fabrique des programmes de qualité qui satisfont les besoins des clients (livraison à temps, utilisation des ressources humaines et matérielles optimales) Le but principal n’est donc pas de produire de beaux documents, ni de conduire de nombreuses réunions, ni de proclamer de beaux slogans, ni de gagner des prix Pulitzer sur les lignes de code; mais simplement de produire des programmes capables de satisfaire le client aujourd’hui et demain. Tout le reste est secondaire UML-User Guide
54. Diagramme de Use case Use Case Un Cas d’utilisation ( use case ) est une fonctionnalité remplie par le système et qui se manifeste par un ensemble de messages échangés entre le système et un ou plusieurs acteurs.
57. Diagramme de Use case Payer cash Payer par carte Manger Demander facture Maitre d'hotel Prendre la commande client Aller au restaurant <<include>> <<include>> Caissier Payer <<include>> <<extend>> Sommelier Commander pinard <<extend>> Serveur Retourner plat en cuisine <<extend>>
58. Utilisation des Use case Manger Distribuer le comportement des fonctionnalités aux méthodes des objets Descriptions
59. Use Case : Ex1 Une société de vente par correspondance vous demande de développer son système informatique. Ce système doit pouvoir prendre en compte des commandes passées par la poste et des commandes passées par internet. Il doit suivre les expéditions qui ne sont effectuées que si le paiement est OK. Les paiements se font par carte bancaire dans le cas d'internet et par chèque dans le cas de la poste. Les paiements sont validés par un système bancaire appartenant à la société et existant. Il faut récupérer ce système. Le nouveau système est chargé aussi de la gestion de stocks, lorsqu'un article atteint un seuil minimal, alors il faut passer une nouvelle commande au fournisseur adéquat. A la réception de la commande, la mise à jour de la base est faite par un employé. Dans le cas d'un paiement accepté et de stock disponible, l'expédition est faite par un robot existant au quel il suffit de passer les coordonnées du client, et la liste des produits achetés. En cas d'indisponibilité, une lettre doit être envoyé au client. Correction
60.
61.
62. Supplément sur UC (2) User Stories et Use Cases formalisent les besoins utilisateurs et sont orientés But Ils font facilement l'objet d'ateliers de travail avec les utilisateurs pour les découvrir, les expliciter Ils vont être priorisés et vont ainsi guider les développements Ils mettent en avant les rôles, les différents profils d'utilisateurs Ils ne traitent que des exigences fonctionnelles (les aspects non fonctionnels sont décrits dans les spécifications supplémentaires (contexte UP) et dans les "Constraints Cards" (contexte XP)) Ils sont textuels et obéissent à des règles de construction très précises Ils ne traitent pas des aspects interface et ergonomie Ils aident à organiser le modèle Ils facilitent le choix du contenu des itérations Ils peuvent être rédigés par les analystes (UC) ou le client (US)
63. Business use case La première étape de la définition d’un système d’information consiste donc à s’interroger sur l’organisation (l’entreprise) pour laquelle ce système d’information fonctionne, sur son identité, sur ce qui en fait partie et sur ce qui n’en fait pas partie business actor1 business use-case realization business entity business actor business worker business use case
64. Business use case Une extension UML Que fait l’entreprise Comment fait l’entreprise Sur quoi travaille l’entreprise Qui travaille dans l’entreprise business actor1 business use-case realization business entity business actor business worker business use case Qui utilise l’entreprise Qui est utilisé par l’entreprise (en externe)
68. Diagramme de classe Les classes Abstrait Nom : type [= Initialisation] Syntaxe libre Attribut dérivé Attribut de classe Opération de classe Responsabilité {abstract}
71. Diagramme de classe Héritage et agrégation 1 0..32 0..32 Composition Agrégation Héritage Cardinalité multiplicité Héritage = Est un Composition et Agrégation = Est composé de
88. Diagramme de classe Classe d'association Où mettre le salaire??? La classe ContratTravail est une classe normale qui peut hériter, être associée à d'autres classes, …. L'association et la classe ne forme qu'un élément
96. Diagramme de classe Dépendance Depenser i = Banque::GetInstance()->DonnerSolde(); Acheter(i); Voler b = new Banque(); i = b->DonnerSolde(); Economiser (p : Banque) p->Deposer(10000);
100. Diagramme de packages On peut montrer ce qu’il y a à l’intérieur du package Une classe appartient à un package et un seule, mais peut être utilisée dans d'autres package. Un package est un regroupement des éléments du model. Cela s’applique à tous les éléments UML ainsi qu’aux différents diagrammes. Les packages sont la base de la gestion de configuration P.13
111. Dépendances circulaires (RMQ 1) Rmq1 : L'objet A ne doit pas créer l'objet B Rmq2 : L'objet B ne doit pas créer l'objet A Rmq3 : Si nécessaire, on peut laisser l'un des deux Rmq1 Rmq2
120. Diagramme de classe Exo4 Immeuble Famille Appartement Pièce Cuisine Salon Gardemanger Chien Chat Animal Locataire Proprietaire Nourriture Lapin Whisky Mariage CompteBanquaire Personne
121. Diagramme de classe Exo4 Immeuble Famille Appartement Pièce Cuisine Salon Gardemanger Chien Chat Animal Locataire Proprietaire Nourriture Lapin Whisky Mariage CompteBanquaire Personne
136. Automate État & Transition Événement qui déclenche la transition Garde Action effectuée sur la transition Envoie de Ev2 à un objet Cible Action en entrant dans l'état Action en sortant de l'état Action déclenchée sur réception de Ev1 Activité
160. La notation UML Les diagrammes (1) ==> Les fonctionnalités vues de l'extérieure du système ==> Les choses qui existent à l'intérieure du système ==> Distribution des fonctionnalités aux choses qui existent. Découverte des opérations des classes, de nouvelles classes, …. Diagramme d'activité ==> Description des opérations complexes Diagramme de UC Diagramme de classe Diagramme d'interaction
161. La notation UML Les diagrammes (2) Diagramme Automate ==> Comportement des classes complexes ==> Validation des diagrammes de classe ==> Description des fichiers contenant l'application (source, exe, …) ==> Les machines supportant l'application Diagramme d'instance Diagramme de composants Diagramme de déploiement
162. Cinématique des diagrammes UML Interaction Diagram Requirements Sequence Collaboration Use Cases GUI Class diagram State Activity Implementation Component Deployment Code Code Code Code Tests
163. La démarche Process Process Qui Quoi Quand Méthode Comment Langage Avec quoi UML Outils Hommes UP XP: Binôme TD Scrum
177. Processus : le RUP Analyse et conception Mettre en place les mécanismes de persistance Méthode Concepteur BD Concepteur Analyste Architecte Architecte Architecte Trouver et spécifier avec des responsabilités les classes Boundary-Control et entité Trouver les abstractions clés Faire le mapping objet BDR
178.
179. Méthode Persistance (1) Mapping objet vers Table relationnelle fait automatiquement par les outils (choix de l'architecte) T_B a c T_B_ID b 50 Raymonde 0 1 55 Casta 1 1 45 Simone 2 1 T_A a c T_A_ID b 55 Robert 0 0 60 Haddock 1 0 35 0 Tintin 2 T_0 T_A_ID T_B_ID 0 1 0 1 1 0 0 2
196. Chain of Resp : Exemple Président <100000 Vice-président <25000 Directeur <10000 Comité >=100000 Director grouillot = new Director(); VicePresident Sam = new VicePresident(); President Tammy = new President(); Grouillot.SetSuccessor(Sam); Sam.SetSuccessor(Tammy); Purchase p = new Purchase( 350.00, "Formation"); Grouillot.ProcessRequest(p); p = new Purchase( 24000, "Voiture"); Grouillot.ProcessRequest(p); p =new Purchase ( 99000, "Maison"); Grouillot.ProcessRequest(p); p = new Purchase( 122100.00, "Usine"); Grouillot.ProcessRequest(p); U M V F
201. Decorator : UML Decorateur.Operation(): fait qq chose super.Operation() Cela revient à rajouter une responsabilité à une classe mais sans en changer l'interface. Comparer avec le composite ComposantConcret.Operation : fin de la chaîne Decorateur.Operation() : monComposant.Operation()
205. Flyweight : Poids mouche :UML Utilisation : beaucoup de petits objets à se partager à plusieurs. Exemple : les caractères d'un document PluriGleton
210. Fabrication Abstraite : motivation Application IHM Motif IHM windows Application IHM IHM Motif IHM windows L’application utilise IHM sans savoir si il s ’agit de Motif ou bien de Windows
235. Diagramme de classe Correction Exo3 (2) {or} Construction ContratSimple ContratDouble Contrat Vehicule Maison Couple Roue Personne 0..* 0..* 2 2 Entreprise Voiture 4 4
244. Les développeurs Français Comment revaloriser le métier d'informaticien et d'ingénieur ? Je crois qu'il est important de mieux expliquer ce qu'est le logiciel. Car c'est encore trop abstrait pour beaucoup de monde. Il faut expliquer que c'est une véritable industrie (qui demande donc des investissements et une approche industrielle..) mais également en quelque sorte un art (car les talents sont clés). Ensuite il faut rappeler qu'il y aura plus d'innovation dans les 30 ans qui viennent que dans les 30 ans passés - et que nous sommes donc au cœur d'une industrie qui va générer de la croissance et des emplois . Enfin il faudrait refaire rêver sur les perspectives d'une carrière dans l'informatique et revaloriser les filières techniques . Nous avons chez Microsoft des architectes logiciels qui sont à des niveaux hiérarchiques supérieurs à des managers de grandes divisions. Cette révolution "culturelle" n'a pas encore eu lieu en France mais nous sommes optimistes.
245.
246.
247. Supplément sur UC (2) User Stories et Use Cases formalisent les besoins utilisateurs et sont orientés But Ils font facilement l'objet d'ateliers de travail avec les utilisateurs pour les découvrir, les expliciter Ils vont être priorisés et vont ainsi guider les développements Ils mettent en avant les rôles, les différents profils d'utilisateurs Ils ne traitent que des exigences fonctionnelles (les aspects non fonctionnels sont décrits dans les spécifications supplémentaires (contexte UP) et dans les "Constraints Cards" (contexte XP)) Ils sont textuels et obéissent à des règles de construction très précises Ils ne traitent pas des aspects interface et ergonomie Ils aident à organiser le modèle Ils facilitent le choix du contenu des itérations Ils peuvent être rédigés par les analystes (UC) ou le client (US)
Nous nous inspirons de l’exemple de la figure 70 pour réaliser une structure de classes respectant le concept d’encapsulation. Les propriétés sont privées et accessibles par des opérations. L’opération ageDansFourchette() permet de déterminer si un livre convient à un enfant dont l’âge est passé en paramètre. Créez un nouveau modèle ou projet. Créez un nouveau diagramme de classes correspondant à la généralisation ci-dessus. Créez les attributs et opérations donnés en exemple.
Les propriétés de Y et Z sont protégées. T hérite simultanément des propriétés de Y et Z.
Le diagramme de classes ci-dessus modélise l’ensemble naturel des papillons. Chaque papillon du monde réel sera un objet de la classe Papillon.
Pour que la classe Z hérite des propriétés de X et Y, les propriétés de X et Y doivent être publiques ou protégées. La classe Z possède 2 attributs A hérités de 2 super-classes différentes!
Les 2 représentations ci-dessus reflètent le même contenu du modèle. Rational Rose montre la relation entre la classe Ville et l’interface Representable sous forme de relation de couplage ou de relation de réalisation selon le mode d’affichage choisi pour l’interface. La relation que nous avons intitulée « de couplage » n’est qu’une représentation externe, via le diagramme, de la relation de réalisation. La représentation iconographique de l’interface Representable montre le comportement visible de la classe Ville au travers d’une relation de couplage. La représentation stéréotypée de l’interface Representable montre l’implantation par la classe Ville au travers d’une relation de réalisation.
La classe Animal est un exemple de classe abstraite telle que décrite en [PAM-00 p53]. Une classe abstraite est notée en italique. L’opération dormir() de la classe Animal est abstraite; elle est polymorphe et réalisée par chacune des sous-classes Lion, Tigre et Ours. Nous avons complété l’exemple de la figure 98 pour en faire un exercice plus complet, la classe Animal comporte: Une propriété privée Nom Une opération protégée tonNom() qui permet à chacune des sous-classes de récupérer le nom de l’animal. Le nom de chacun des animaux est enregistré par les constructeurs qui ne sont pas indiqués comme opérations dans ce diagramme. Créez un nouveau modèle ou projet. Créez un nouveau diagramme de classes correspondant à la spécialisation ci-dessus.
L’utilisation du qualificateur a permis de réduire la cardinalité des instances de la classe Siege. L’utilisation du qualificateur a permis de ne prendre ici qu’un sous-ensemble de sièges réduit à un seul élément. Le rôle du qualificateur est de réduire la cardinalité d’une association. Ainsi, la cardinalité de Siege est passée de plusieurs à 1. Ce n’est pas toujours le cas. Nous rendons, encore une fois, le lecteur attentif à l’introduction de concepts qui nous semblent intéressants dans une vision de « programmation objet » mais sujette à remettre en cause tous les concepts des bases de données relationnelles qui actuellement garantissent la persistance de la majorité des systèmes d’information à base d’objets. Christian Soutou, dans l’ouvrage [SOU-99], propose de considérer le diagramme de classes comme un niveau de représentation conceptuelle et propose un niveau navigationnel à base de pointeurs pour gérer les associations entre classes. La construction de ce niveau navigationnel est inspiré du modèle relationnel et nous semble plus à même de concilier les besoins de la programmation objet et les besoins de persistance des objets par les bases de données relationnelles. Cette représentation à 2 niveaux est mise en œuvre dans l’atelier de génie logiciel d’Oracle, Designer/2000.
Le qualificateur permet de partitionner l’ensemble des instances possibles de Siege suivant un critère indiqué par le qualificateur rangee . Le qualificateur est utile lors de la conception et de l’implémentation, il suggère: l’utilisation d’un dictionnaire dans la classe portant le qualificateur, ce dictionnaire étant composé de couples qualificateur(s) objet ( s ) qualifié(s): 1 siège1, 2 siège2, 3 siège3 etc.; La mise en place de clés primaires lors de l’élaboration du modèle de bases de données. Une partition est la décomposition d’un ensemble E en sous-ensembles disjoints (c’est-à-dire qu’aucun élément n’appartient à deux sous-ensembles) dont la réunion forme l’intégralité de l’ensemble E. Un dictionnaire est une collection d’éléments, chaque élément étant une association entre une clé et une valeur. Une clé primaire est un identifiant unique pour un enregistrement d’une base de données.
[RV-00 p147] Où placer l’attribut matricule ? A première vue, il s’agit de la propriété de la classe Personne. Mais en fait, une personne possède un matricule pour chacun de ses employeurs. Il s’agit donc plutôt d’un attribut de l’association, que nous pouvons placer dans la classe Emploi. Créez un nouveau modèle ou projet. Créez le modèle ci-dessus.
[RV-00 p147] Poussons l’analyse encore un peu plus loin: à quoi sert l’attribut matricule sinon à référencer un employé au sein de son employeur? Il s’agit d’un identifiant relatif, dont la valeur permet d’accéder à une instance particulière de Personne, pour une (instance de) Société donnée. C’est exactement la notion de qualificatif en UML. Un objet Société doté d’une valeur particulière du qualificatif matricule a accès à un objet Personne au plus, car la multiplicité a été réduite à « 0..1 ». Il peut y avoir des numéros de matricule inutilisés, d’où la limite inférieure à 0. Copiez le modèle précédent sous un nouveau nom de fichier. Adaptez-le pour mettre en place la qualification comme ci-dessus.
Créez un nouveau modèle ou projet. Créez les paquetages et les dépendances comme ci-dessus. Spécifiez le paquetage Erreur comme étant d’utilisation globale.