Résumé des épisodes précédents Méthodologies agiles Cinquième et dernière partie Contexte : projets informatiques Problématique : Changements permanents : fonctionnels et technologiques => réactivité & qualité Méthodologies classiques : trop rigides, lourdes, chères Solutions (méthodologies) OOP : Java UML (modèle visuel) : formalisme très riche Patterns : micro-solutions réutilisables. Exemple : Composite. Offre méthodologique : RUP, ICONIX, FDD, ZOE, (XP) XP : une introduction. Pratiques. Tests unitaires et refactoring : illustration. Chemin de l adoption : dialogue virtuel, ROI, limites : blocages Biblio commentée et annexes Itérations agiles Gestion des exigences. CaliberRM. Articulation avec la modélisation. Gestion de Configuration Logicielle. Flux tendu. Intégration Revisions + info. StarTeam. Cycle de vie agile : miniprocess. High-tech vs low-tech. Design Patterns (DP) Défauts classiques, patterns, classification des DP Structure, catalogue : proxy, stratégie, façade, adaptateur, composite, Patterns J2EE, Analysis Patterns (Fowler), Construction d un pattern (Bergin) Conclusion : difficultés d adoption (dogmatisme, abstraction forte, outillage) MAN : junit / IDE & BlueJ MAN2 : CVS / cmd & IDE 2 Argument Constat Ces méthodologies semblent répondre à la problématique du changement, mais Questions Quelle courbe de l apprentissage? Ne sont-elles pas trop nombreuses? Comment les articuler efficacement? Retour sur investissement dès le premier usage (projet, exemple, cours)? ROI étudiant? Sont-elles vraiment agiles? Ce cours n est-il pas dogmatique à son tour? Objectifs Synthétiser, articuler (colle et compléments), simplifier, démystifier & démasquer les rigidités restantes, illustrer des perspectives (technologies adaptées) et vous libérer du poids dogmatique de nos enseignements éphémères Plan Exigences EOO 5. Itinéraire d un objet gâté Analyse et conception Implémentation UML+DP OOP XP SCM 5. Modélisation agile UML : exemple, méta, plan de route minimaliste, couleurs Coad / archétypes, stéréotypes / navigation IHM Metapatterns [Pree]. Exemple évolutif : startup. 5.2 Implémentation agile Correspondance UML-Java Métriques, exemple de découplage : Loi Demeter Modéliser une BD relationnelle : placement / Newton ;-) Technologies agiles : AOP, MDA, XUML, DCC 5.3 Conclusion : bilan et perspectives Bilan et perspectives de l agilité Nos attentes & devoir [Biblio : le kit de survie] Déploiement 3 () toute ressemblance avec des personnes physiques suivant ce cours est évidement fortuite 4
UML 5. Modélisation agile UML & DP Complexité? Dans UML. => 23 concepts (classe de MM) Comment apprendre et retenir rapidement et efficacement les symboles et les concepts UML? Mes astuces Représenter visuellement (dessins) : parce que je le vaux bien. Effectuer / tourner des exemples Métamodéliser : modéliser les concepts et leurs connexions (UML), même si c est incomplet Placement de symboles unifiés et adaptés (loi de Newton) Couleurs de Peter Coad. IHM : diag. robustesse Articuler avec les éléments connus : java => 5.2 (implem agile) 5 6 Exemple UML : jeu de dès Méta-uml UML en UML (modélisation sélective et naïve) Dynamique minimaliste : chemins microscopiques 7 8
Un plan de route minimaliste Répertorier les interactions typiques (acteurs & use cases / scripts) Couleurs de Peter Coad Use Case Activité Glossaire Classe Script Collaboration Dynamique Séquence Composants Déploiement Applicabilité.PAS.H,.CPP.JAVA Etat-transition irreversibilité?.exe,.dll 9 A green party-place-thing A yellow role A pink moment-interval A blue description Structuration / découpage (Personne vs. Client) par nature : archetype Méthodes & attributs prédéfinis (date, etc.) Met de l ordre dans le diag de classe Accessible pour le client Facilite la lecture / vérification Adapté à la modélisation du métier => contexte Indépendant du métier / problème => technique réutilisable 0 Interacts with its yellow roles or its pink moment-intervals Interacts with its green parties or its pink momentintervals Interacts with its pink moment-intervals serialnumber name address customvalue <<party>> Party assessacrossroles getcustomelsedefaultvalue listroles listparties assessacrossparties 0.. <<role>> PartyRole assignednumber status assessacrossmis listmis listroles assessacrossroles 0..* Components The domain-neutral component type description itemnumber defaultvalue <<description>> PartyDescription assesswithpluginelsedefault assessacrossparties findavailable calcqtyavailable calctotalfor listparties listdescs assessacrossdescs 0.. 0..* <<moment-interval>> PriorMI interface <<plug-in point>> assess IAssess Interacts - With its pink mi-details - With its pink prior moment-intervals - With its pink next moment-intervals - With its coresponding yellow roles, green party/place/things, or blue descriptions 0..* interface <<moment-interval>> number MomentInterval dateordatetimeorinterval priority total status makemomentinterval adddetail calctotal recalctotal complete cancel mi_generatenext mi_assesswrtprior mi_assesswrtnext mi_compareplanvsactual listmis <<plug-in point>> IMakeMomentInterval makemomentinterval assessacrossmis..* <<mi-detail>> actual 0.. MomentIntervalDetail qty calctotal http://www.togethersoft.com/services/tutorials/jmcu/ plan 0..* 0..* 0..* 0..* serialnumber name address customvalue 0..* 0.. <<moment-interval>> NextMI <<place>> Place assessacrossroles getcustomelsedefaultvalue listroles listplaces assessacrossplaces <<role>> PlaceRole assignednumber status assessacrossmis listmis listroles assessacrossroles serialnumber name address customvalue <<thing>> Thing assessacrossroles getcustomelsedefaultvalue listroles listthings assessacrossthings 0.. <<role>> ThingRole assignednumber status assessacrossmis listmis listroles assessacrossroles 0..* 0..* type description itemnumber defaultvalue type description itemnumber defaultvalue 0.. <<description>> ThingDescription assesswithpluginelsedefault assessacrossthings findavailable calcqtyavailable calctotalfor listthings listdescs <<description>> PlaceDescription assesswithpluginelsedefault assessacrossplaces findavailable calcqtyavailable calctotalfor listplaces listdescs assessacrossdescs assessacrossdescs 0.. interface <<plug-in point>> assess interface <<plug-in point>> assess IAssess IAssess Exercice Afin de tester la pertinence des archétypes, proposer des noms de classes pour le diagramme anonyme suivant : << Party >> << Desc >> << Role >> << MI >> << MI-D >> << Place >> << Desc >> << Role >> << Role >> << Desc >> << Thing >> 2
Les 0 meilleures façons de rater un projet objet [Rosenberg] 0.Commencez par un projet critique. 9.Assurez-vous qu il n y a pas de compétences OO dans votre équipe 8.Ne testez surtout pas les classes unitairement, ne testez que l intégration et croisez les doigts. 7.Confiez la réalisation des use cases aux expérimentés et les séquences aux débutants. 6.Ne perdez pas le temps avec la revue des modèles. 5.Séparez soigneusement use case et modèle de classe. Nous savons tous que les UC n affectent pas le code. 4.Implémenter les parties les plus faciles aux début et laissez les plus difficiles à la fin, juste avant le terme. 3.Prenez une équipe de 20 développeurs VB, confiez-leur un compilateur C++ et un outil visuel de modélisation puis laissez-les se débrouiller. 2.Ignorez le modèle d analyse et de conception. Ecrivez le code, et générez un modèle global par reverse engineering. Personne ne s en apercevra..partez de l idée que l outil de modélisation générera un excellent code pour vous et embauchez plein de stagiaires non diplômés pour s occuper du codage. Spécialisation emprunt Classe métier + Use Case = << boundary >> + << controler >> + << entity >> 3 Ex : adaptation pour IHM 4 Spécialisation - IHM Metapatterns Dérouler les scénarii décrits par les Use Case La généralisation de la modélisation objet Contexte actuel : frameworks et objets métier Qualités visées pour les modèles Généralité, robustesse, flexibilité Réutilisabilité, maintenabilité, évolutivité Résultat : notoriété croissante UML et Design Patterns (DP) Malgré tout, des obstacles subsistent Approche souvent dogmatique Solutions «miraculeuses» Cette section Démystification : principes fondateurs des DP Montre comment bien modéliser avec encore moins d effort à travers les metapatterns Prétexte => patterns 5 6
Classification des patterns Analyse Peter Coad, Martin Fowler Conception Gamma, Vlissides Programmation Coplien, Beck Anti-patterns Mauvaises solutions Meta-patterns Aspect rédactionnel [Meszaros/Doble98] Aspect «modélisationnel» [Pree95] 7 Metapatterns [Pree95] Méta-X Au dessus, avec recul, plus abstrait, mais reste un X à son tour par rapport au niveau inférieur Patterns sur patterns = Métapatterns Patterns = cas d école Classes métier ou framework Matière première des métapatterns Classes, méthodes, associations, appels de méthode Granularité fine : blocs élémentaires de conception Avantage visé (rappel) «Sagesse» hyper-concentrée et ré-applicable plus aisément, sans dogme recul 8 Métapatterns Repère fondamental modélisation/patterns Distinction entre stabilité et variabilité [Pree] Points névralgiques dans un framework Points rigides : méthodes «template» Points flexibles : méthodes «hook» Hooks: points prédéfinis de spécialisation Whitebox : par héritage (et redéfinition de méthode) ou par la réalisation d une interface (Java) => par le bas Blackbox : par composition (et délégation) => par le côté Exemple [Pree99] m : template (méthode complexe) La pièce rigide m2, m3 : hooks (points d extensibilité) Delphi : override; 9 20
Unification Conventions «T» et «H» Méthodes Classes Variations A. Unification vs. Séparation B. Récursivité (ou pas) Métapattern Toute combinaison de T-H selon les variations citées Factory method (VCL) «Définir une interface pour créer un objet, mais laisser les sous-classes décider quelle classe instancier» [GoF] Autre exemple : TTreeView en D6! 2 22 Séparation Récursivité Exemples Abstract factory, Bridge, Builder, Command, Interpreter, Observer, Prototype, State et Strategy : vs. :N Commande [GoF95] Rappel : les noms des DP GoF => selon la variabilité (H) Le composite [GoF95] Composer des objets en structures arborescentes pour représenter des hiérarchies «ensemble-partie». Le composite autorise les clients de traiter des objets individuels et des compositions d objets de façon uniforme. «H» [GoF95] «T» «H» [GoF95] «T» Participants 23 composant, composite, feuille et client 24
Stratégie d application des MP Phase. Start-up Bilan métapatterns «Une méthode (T) appelle une autre (H)». Pffff Utilité Application microscopique des principes des DP Mieux découvrir, comprendre, reconnaître et appliquer les DP C est tout? Le quotidien du développement objet Organisation initiale vs. évolution coûteuse Minimiser le poids de l investissement initial Découpage en classes, accesseurs, interfaces, etc. L opportunisme éclairé appliqué aux métapatterns Evolution incrémentale Refactoring : «Just-in-time modeling» Un cas d école 25 26 Phase 2. Start-up++ Phase 2. Start-up++ Reproductibilité Reproductibilité 27 28
Phase 3. Développement Phase 3. Développement refactoring et hétérogènes et hétérogènes Industrialisation Industrialisation 29 30 Phase 3. Développement Phase 4. Fusion-rachat «TH» et hétérogènes «T» «TH» «H» Industrialisation 3 32
Phase 5. Vers la mondialisation Phase 6. Flexibilité «H» «T» 33 34 Traduction en métapatterns Evolution des classes TH => T-H => T-TH-H => T-TH- >-H Transformations opportunistes Refactoring => préservation de sémantique Avant ou après changement de spécification Remise en cause des points rigides? Même technique! 35 Conclusion MP Modélisation objet des frameworks Pâte à modeler gestes élémentaires avec effet progressif Les éléments (méthodes et classes) N ont pas de densité uniforme Classification par stabilité (T ou H) Assumée a priori, mais peut être remise en cause Les «T» peuvent devenir des «H» Mais au «bon» moment 36
Correspondances UML-Java UML Java 5.2 Implémentation agile Test Du modèle au code : UML Java Métriques (Loi Demeter) BD relationnelle Technologies agiles : AOP, MDA, XUML < < U n i t> > C lie n t C l ie n t. ja v a 37 38 Client + calcca() +cli passe Commande +cde - date : Date n + calctotal() +cde 0..n UML Correspondances UML-Java Java GrandCompte - nom : String + calcca() CommandeElementaire 0.. +cdecplx CommandeComplexe + calctotal() Classe Attribut Tag values Opération Interface Association Nom Rôle Multiplicité (conteneur) Classe Variable (field) Set/Get Méthode Interface Pas de lien direct Rien! Variable (si navigable) Valeur unique / multiple (tableau, vecteur, ) 39 40
UML Correspondances UML-Java Java Métriques Généralisation Réalisation Classe d association Transformation préliminaire => deux associations Tag-values ====== Extends Implements Autres éléments Découplage : Loi de Demeter loi de Demeter - (987) Ian Holland Le résumé en est Do not talk to strangers. class Demeter { private : A *a; int func() { public example(b& b) { C c; int f = func(); b.invert(); A = new A(); a->setactive(); c.print(); La loi du Demeter pour les fonctions Toute méthode d un objet ne doit appeler que des méthodes apparentant : à soi-même aux objets reçus en paramètre à tout objet créé par soi-même à tout objet possédé directement www.pragmaticprogrammer.com 4 42 TCC / Métriques Métriques orientées objet 43 44
Modélisation d une BD relationnelle Tables Attributs et clés (pk) Références Clés étrangères (fk) Placement Loi de Newton [MZ] Mapping O/R Associations : => même table (ou pas) :N => tables distinctes N:N => table d association Ambler, Keller http://www.agiledata.org/essays/mappingobjects.html Outils TopLink, JDO, Hibernate Technologies agiles Contrainte Résultats optimisés à long, moyen ET court terme Exemples XUML MDA AOP DCC - Assemblage dynamique 45 46 ModelRun/BoldSoft XUML Borland Studio / Delphi / Architect ModelRun/BoldSoft XUML Borland Studio / Delphi / Architect 47 48
www.neosight.com 49 MDA : Architecture pilotée par le modèle Le MDA est une nouvelle façon d écrire des spécifications pour développer des applications, basée sur un modèle indépendant de plateforme (PIM) et accompagné d un ou plusieurs modèles spécifiques à des plateformes (PSM) et d ensembles de définition d interfaces, chacune décrivant comment le modèle de base est implémenté sur chaque plateforme différente. Cibles : CORBA, EJB, MTS, etc. Exemples : IO, Kennedy Carter, Kabira, Secant, Metys Borland Together Architect 2006 Support MDA : UML 2.0, OCL 2.0, QVT, XMI 2.0 50 Transformer un modèle Business Process en un modèle UML Exemple simple Together - Script QVT Couloirs (BPD) => Acteurs UML Tâches => Use Cases 5 52
Exécuter une transformation Model-to-Model Transformation effectuée Acteurs & Use Cases Dans le modèle cible 53 54 Quel est l intérêt de QVT? QVT QVT fournit le socle des transformation model-to-model pour MDA Un langage standardisé pour exprimer les transformations intégrables dans les outils et manipulables par les [sur]humains Together La toute première implémentation QVT commerciale disponible sur le marché et bientôt au CRIO UNIX Fournit un environnement de développement robuste pour les architectes Editeur QVT syntaxe en couleurs, code completion, vérification d erreurs Debuggage interactif Usage facile de QVT dans le workspace Déploiement simplifié Génération du fichier de trace automatisé Navigation dans le modèle depuis le viewer de trace Facilement partageable avec le rôle Designer 55 AOP : Aspect Oriented Programming Avant class Line { private Point p, p2; Point getp() { return p; Point getp2() { return p2; void setp(point p) { this.p = p; Display.update(this); void setp2(point p2) { this.p2 = p2; Display.update(this); class Point { private int x = 0, y = 0; int getx() { return x; int gety() { return y; void setx(int x) { this.x = x; Display.update(this); void sety(int y) { this.y = y; Display.update(this); aspect DisplayUpdating { pointcut move(figureelement figelt): target(figelt) && (call(void FigureElement.moveBy(int, int) call(void Line.setP(Point)) call(void Line.setP2(Point)) call(void Point.setX(int)) call(void Point.setY(int))); after(figureelement fe) returning: move(fe) { Display.update(fe); Réduction des interférences rences Augmentation significative de la lisibilité Après class Line { private Point p, p2; Point getp() { return p; Point getp2() { return p2; void setp(point p) { this.p = p; void setp2(point p2) { this.p2 = p2; class Point { private int x = 0, y = 0; int getx() { return x; int gety() { return y; void setx(int x) { this.x = x; void sety(int y) { this.y = y; 56
Assemblage dynamique (DCC ) Exemple Kilim/ObjectWeb + Kelua Kawana www.kelua.com 57 : DCC : Dynamic Component Composition 5.3 Conclusion Bilan de l agilité. Perspectives. Devoirs. Bonus Bibliographie (Kit de survie) 58 L agilité Définitions. Dictionnaire de L'Académie française, Première édition, 694 Agile (AGIR) Agile. adj. de tout genre, Leger & dispos, qui a une grande facilité à se mouvoir à agir, il ne se dit guère que du corps. Merveilleusement agile. le tigre, le singe sont des animaux fort agiles. Agilité (AGIR). subst. fem. Légèreté, disposition du corps à se mouvoir avec facilité. Il saute avec une grande agilité. Rigidité (RIGUEUR) Rigidité. substant. fem. Grande séverité, inflexibilité. Les Magistrats font observer la loy contre les duels avec une extrême rigidité. la rigidité de ses moeurs. Repères Stimuli ou besoin Vitesse de réaction Facilité => coût minimal / économique. «Besoin-vitesse-coût» Application de la grille dans les SI Performances. «du clic au résultat» Performances individuelles des applications» Mesurables avec des outils de profiling, montée en charge Échanges efficaces entre applications (de générations différentes).» Problématique : partage, répartition, notification Concerne : applis, réseau, matériel, OS, EAI, BD Couverture des besoins Exprimé : analysé, conçu, implémenté, déployé, documenté Non exprimé, mais proche : couvert si flexibilité, généricité, voire générosité de la part d informaticiens visionnaires» Disponibilité directe (documenté ou pas), passage FF->» Réclame une configuration accessible / run-time» Configuration prévue à la conception Non prévu : capacité à l intégrer à faible coût» Maîtrise de l impact, modularisation, productivité» Vision claire, actions planifiées, non régression 59 60
Solutions flexibles Bilan Tableur? Typage absent, sans contraintes, ouvert, parfois utile Allier rigueur et souplesse Table de référence, fichier/table de configuration Orientation objet, modélisation visuelle, UML Patterns (composite) Stratégies évolutives Refactoring, metapatterns & xunit Méthodologie souple Vigilance permanente / performances & robustesse Optimize-it, jprobe, gpprofiler, xunit Tests quotidiens et automatiques Problématique de l agilité : changement fréquents Grille besoin-vitesse-coûts Solutions techniques et méthodologiques L agilité au long du cycle de vie Exigences EOO Analyse et conception UML+DP+MP XUML Implémentation Déploiement SCM OOP+AOP O/R XP DCC 6 MDA 62 Perspectives Spéculation «crédible» (à quel terme?, crise => techno++) Fonctionnel orienté composants IDE / RAD : Drag&Drop de classes métier Pilotage par le modèle : MDA Cibles diverses, coexistantes : Windows, Linux, J2EE, DOTNET Technologie de programmation : souterraine SQL, XML, EJBQL, JDOQL, OCL, UML, L3G Ponts Génération de code, tissage ou assemblage dynamique Nouvelles problématiques Traçabilité au long du cycle de vie : E-A&C-I-D, mais aussi entre itérations : versions et configurations cohérentes Cohabitation entre les applications du SI : niveau d agilité et d évolution non uniforme : versions de schéma et données Historisation, variantes de Base de Données mais ça, c est une autre «histoire» Bibliographie Fowler & Scott : UML Distilled, Second ed., Addison Wesley (AW), 2000 Rosenberg & Scott : Use Case Driven Object Modeling using UML. AW/99 Gamma & al. : Design Patterns / CD. 95 Blaha & Rumbaugh : Object-Oriented Modeling and Design with UML, P/PH, 2005 Coad, Lefebre & DeLuca : Java modeling in Colors, PH99, www.coad.com/peter Pree : Design patterns for Object-Oriented Software Development, AW, 995 Pree W., Hot-Spot-Driven Development, pp.379-394, in Building Application Frameworks, Ed Fayad, M, Wiley, 998 Meszaros & Doble, A Patterns Language for Pattern Writting, pp.530-574, in Patterns Languages of Program Design Vol 3, Ed. Martin R., Riehle D., Buschmann F., Addison- Wesley Longman, 998 Tokuda, PhD disertation http://citeseer.nj.nec.com/tokuda99evolving.html www.extremeprogramming.org http://c2.com/cgi/wiki?extremeprogrammingsummary www.xprogramming.com www.xp23.com Google : AOP, AspectJ, MDA/OMG, Ambler, Keller, JDO 63 70