Jean-Marc Prieur (ANPROS) j-m.prieur@wanadoo.fr DSL et DSL Tools Jean-Marc Prieur (ANPROS) j-m.prieur@wanadoo.fr Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? TechEd 2002
Plan de la présentation Manipuler des « concepts et d’intentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusqu’aux DSL Retour d’expérience dans le domaine de la simulation Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Limites techniques actuelles des DSL Tools L’avenir à court terme Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? Jeudis de l'objet - 30 mars 2006 TechEd 2002
Plan de la présentation Manipuler des « concepts et d’intentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusqu’aux DSL Retour d’expérience dans le domaine de la simulation Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Limites techniques actuelles des DSL Tools L’avenir à court terme Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? Jeudis de l'objet - 30 mars 2006 TechEd 2002
Manipulations de concepts dans Visual Studio 2005 L’exemple des fichiers de settings et ressources Persistance dans des fichiers XML (.settings, .resources) Resources.Designer.cs namespace WindowsApplication1.Properties { internal class Resources { internal static string Gagné { get {return ResourceManager.GetString("Gagné", resourceCulture);}} internal static string Perdu { get {return ResourceManager.GetString("Perdu", resourceCulture);}} } private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture;} set {resourceCulture = value;} internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsApplication1.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; return resourceMan; ResXFileCodeGenerator Jeudis de l'objet - 30 mars 2006
Voir la documentation de référence de la StronglyTypedResourceBuilder. TechEd 2002
Le mécanisme … Nous manipulons des ressources ou des paramètres de configuration de manière naturelle. Des Custom Tools génèrent du code basé sur un Framework (.NET 2.0) pour y accéder en runtime (masquant l’utilisation du Framework) System.Resources et System.Globalization System.Configuration Ce mécanisme est unidirectionnel. Jeudis de l'objet - 30 mars 2006
demo Custom Tools de Visual Studio 2005 Démo où on présente rapidement : Le fichier de ressource, et l’utilisation dans un programme Windows.Forms. On en profite pour montrer que les Windows.Forms sont maintenant dans des classes partielles. Et on en profite pour montrer le class diagram (bidirectionnel) TechEd 2002
De la Manipulation bi-directionnelle de concepts Pour les Windows.Forms c’est comme pour les ressources ou settings mais L’éditeur est graphique la sérialisation s’effectue dans le code c’est built-in (pas de Custom Tool) Même chose pour le Class diagram La notion de classe partial est très intéressante pour les générateurs de code Jeudis de l'objet - 30 mars 2006
Et si nous ... ... nous pouvions C’est possible prendre un modèle (par exemple un automate d’états finis) et en déduire du code source? « Ajouter StateMachine » à un projet Visual Studio. C’est possible car Visual Studio 2005 est extensible Mais il nous faut d’abord formaliser nos solutions à nos problèmes répétitifs Jeudis de l'objet - 30 mars 2006
Plan de la présentation Manipuler des « concepts et d’intentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusqu’aux DSL Retour d’expérience dans le domaine de la simulation Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Limites techniques actuelles des DSL Tools L’avenir à court terme Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? Jeudis de l'objet - 30 mars 2006 TechEd 2002
Evolution du processus Designers Fourniture d’outils pour aider les utilisateurs du framework Fourniture d’éléments stables sous forme compilée Frameworks Automatisation de l’application de patterns DSL SM Templates Designs.StateMachine Formalisées issues de l’experience Patterns Exemple de code solutions State-Pattern Clignottant éteint Allumé Eteint Automates d’états-finis Jeudis de l'objet - 30 mars 2006 TechEd 2002
Les Roles et les Artefacts Les « architectes » sélectionnent des procédures et conseils et créent deux types d’artefacts : un Framework Une codification des conseils (assistant, designer graphique ou non...) Les « développeurs » utilisent un modèle pour implémenter une solution Jeudis de l'objet - 30 mars 2006
Des DSL Nous avons besoin de langages spécifiques pour décrire les points d’extension de nos Frameworks Ces langages peuvent être : Textuels (XML, et autres : exemple ASPX, T4) ou Graphiques (DSL Tools) Horizontaux (techniques) Designer de Windows.Form, Class Designer, Workflow State Machine Designer Verticaux (métier) DSL Architecture de composants de simulation Jeudis de l'objet - 30 mars 2006
Les langages visuels Permettent d’échanger des informations dans un domaine spécifique property Corona label waiting running pause begin stop playing Shape Group Base members +v 0v 0.7CR R C 0.1R Jeudis de l'objet - 30 mars 2006 TechEd 2002
Plan de la présentation Manipuler des « concepts et d’intentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusqu’aux DSL Retour d’expérience dans le domaine de la simulation Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Limites techniques actuelles des DSL Tools L’avenir à court terme Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? Jeudis de l'objet - 30 mars 2006 TechEd 2002
Retour d’expérience dans le domaine de la simulation Contexte d’application Des études de recherche opérationnelle aux applications de simulation Un processus outillé. Jeudis de l'objet - 30 mars 2006
Le besoin initial : répondre plus efficacement aux demandes d’études de recherche opérationnelle Expert opérationnel, pilote de l’étude : « Je suis pressé. J’ai besoin d’une réponse rapidement. » Le client d’une étude de recherche opérationnelle ou le pilote qu’il désignera a besoin d’une réponse : Soit pour prendre une décision de type oui/non : il faut alors que cette réponse soit rapide Soit pour un besoin répétitif (il faut, dans ce cas produire un guide d’emploi ou un logiciel d’aide tactique) Le vocabulaire du client est un vocabulaire d’opérationnel. Pas un vocabulaire d’informaticien (par contre il n’est pas contre la formalisation du besoin sous forme d’un modèle graphique, ou sous forme mathématique, si une telle formalisation a une plus value pour décrire le problème) Jeudis de l'objet - 30 mars 2006 TechEd 2002
Rêve du chef … CDT : « Je voudrais que les études de RO soient réalisées plus rapidement en maîtrisant toute la verticalité » Le chef de l’ANPROS voudrait réaliser plus d’études en moins de temps. - Le cycle des ETO du ministère de la défense est d’au moins 3 ans ; c’est trop pour un opérationnel qui aura changé d’affectation). - l’ANPROS peut espérer réaliser des études en à peu près un an. Ce peut être trop pour prendre une décision Jeudis de l'objet - 30 mars 2006 TechEd 2002
Rêve du directeur d’étude … Directeur d’études : « Je comprends son problème. Il faut maintenant que je le modélise. Cette modélisation consiste à trouver une transformation vers un modèle qui pourra être manipulé pour résoudre le problème. Dans certains cas, ce qui pourra être manipulé pourra être une application de simulation - Traduire en termes de critères à évaluer sur des scénarii, - Construire un plan d’expérience i.e. développer une application de simulation dans laquelle je vais mesurer des variables qui seront transformées en critères Jeudis de l'objet - 30 mars 2006 TechEd 2002
La Démarche « Etude RO » Une réponse : Problématique Analyse de l’étude définit un besoin technique - Reformulation de la problématique -Utilisation de méthodes pour analyser le problème : analyse fonctionnelle, UML non formel,… Approche Mathématique - théorie des graphes, - probabilités, - programmation linéaire … Approche par la simulation - Création d’un scénario traduisant la problématique - Utilisation de modèles - Création d’une application à partir d’un environnement de simulation Etapes de réalisation d’une application d’étude Spécification de l’appli de simulation Conception -Développement Implémentation - Tests Exploitation (Variation des paramètres du modèle et de son environnement) Produit Mathématique Produit logiciel Résultats Validation Ou Modification Analyse des résultats Rédaction d’un rapport Une réponse : Un environnement générique de - développement, - exécution - et exploitation de simulations. Très rapide exposé de la démarche. Analyse (opérationnel) / dans certains cas, besoin d’une application de simulation. L’outil DirectSim Jeudis de l'objet - 30 mars 2006 TechEd 2002
Rêve du directeur d’étude… … qui est le maillon entre la demande et la réponse Directeur d’études : « Je comprends son problème. Il faut maintenant que je le modélise. Si la traduction du modèle en programme informatique pouvait aller plus vite ...» Le problème, dans ce cas, c’est que l’écriture d’une application de simulation prend énormément de temps … le directeur d’étude aimerait que cela aille plus vite. Jeudis de l'objet - 30 mars 2006 TechEd 2002
Rêve des développeurs Développeur : « Je souhaiterais : - Développer avec des langages et outils modernes, efficaces et adaptés au problème. Réutiliser ce que j’ai déjà fait Que les tâches de développement répétitives soient faites par l’ordinateur » Le développeur (ce peut être le directeur d’études d’ailleurs) aimerait, lui aussi, aller plus vite. Cela peut se traduire en : Utiliser des socles applicatifs et des langages dont la puissance d’expressivité est plus grande. Réutiliser des composants, des modèles, des conceptions, des motifs architecturaux, etc … Utiliser des meilleurs outils de développement C’est très important pour la motivation d’accéder à ces besoins. Jeudis de l'objet - 30 mars 2006 TechEd 2002
De quoi avons-nous besoin concrètement? Besoin de capitaliser des expertises métiers Besoin d’usines de développements d’applications de simulation Assembler des applications de simulation avec des outils, en s’exprimant dans un langage proche de l’opérationnel, et s’appuyant sur des briques de connaissances métier (moyens + concepts d’emploi) Cette usine de développement doit être intégrée à un environnement de développement moderne Besoin d’un langage pour le binôme opérationnel / ingénieur pour les applications La situation passée : notation UML … Jeudis de l'objet - 30 mars 2006
L’environnement de développement, exécution, et exploitation de simulations DirectSim Jeudis de l'objet - 30 mars 2006
Contexte d’application Jeudis de l'objet - 30 mars 2006
Créer des applications de simulation A l’ANPROS, nous créons des applications de simulation pour les études de recherche opérationnelle Processus de développement basé sur une analyse de haut niveau en privilégiant UML – notation « general purpose » (depuis 1999) Mais C’est une affaire de spécialiste génie logiciel Or ceux qui ont besoin des simulations d’étude peuvent être des opérationnels (qui ne peuvent/veulent pas forcément parler UML) et ne peuvent / veulent pas aller trop loin dans le code. Or il faut pouvoir collaborer. Et Nos applications de simulation sont basées sur un « framework de simulation » générique et complexe qui capture et factorise ce qui est commun aux applications de simulation d’étude. Les modèles représentent visuellement les variations (points d’insertion) que permettent le framework Or le modeleur UML ne connaît pas ce framework, et ce n’est pas forcément facile de le lui apprendre. Aujourd’hui des outils (http://www.modelisoft.com) permettent une bonne synchronisation entre modèles et code (génération de code et rétro-ingénierie avec conservation des décisions de modélisation) – utilisation de frameworks spécifiques. Sur Ductor.NET : La chose à savoir c’est que que le framework met à la disposition des développeurs d’applications de simulation des composants de simulation de base (animés par le moteur de simulation) à étendre en fonction de ses besoins propres. Jeudis de l'objet - 30 mars 2006 TechEd 2002
Créer, maintenir des applications de simulation à partir de modèles Nous avons identifié 4 types de modèles pour spécifier, concevoir et développer des applications de simulation Parmi ceux-ci, la notion de « Comportement ». Ex : le comportement du chien ou de l’hélicoptère de la vidéo. Il est complexe en soi. Mais les choses sont encore plus compliquées par le manque d’interaction entre le modèle et le framework de simulation sous-jacent ou les composants de simulation réutilisés qui contraignent la modélisation Explication des petits bonshommes. Les 7 types de modèles couvrent la spécification, la conception des applications de simulation : En terme de capacité (ce à quoi cela doit répondre). C’est le domaine même de l’opérationnel En terme de structure (à différents niveaux de détails : 3 différents) En terme de comportements En terme de mapping avec des entrées et sorties pertinentes pour un opérateur opérationnel et l’application de simulation En terme de planification Ces 7 types de modèles ne sont pas explicités ici (cela dépasse le cadre de cette présentation). On ne retiendra que les modèles de comportement. Rendre explicite le lien avec la vidéo : le comportement du chien que nous venons de voir est ici modélisé par un StateDiagram UML Les modèles de comportements sont très proches du framework sous-jacent (on le redétaillera au transparent n°13. IntelliSense au niveau du modèle, débugging idem . Jeudis de l'objet - 30 mars 2006 TechEd 2002
Développement d’applications de simulation par les modèles Nous cherchons à rendre la modélisation d’applications de simulation possible par des non spécialistes (un plus grand nombre) S’attacher aux concepts Masquer le plus possible les détails du framework et aider à l’apprendre Avoir des éditeurs graphiques attractifs et ergonomiques qui parlent dans le langage de l’opérationnel. Les DSL … une solution possible Assembling Applications with Patterns, Models, Frameworks and Tools Microsoft nous fournit des outils « les DSL Tools » pour créer des éditeurs graphiques permettant de manipuler nos modèles spécifiques / métier Un problème … une solution possible. Jeudis de l'objet - 30 mars 2006 TechEd 2002
DirectSim : pourquoi ça va plus vite ! Ce qui est commun aux applications de simulation est factorisé dans des framework DirectSim : pourquoi ça va plus vite ! Des framework génériques Génie logiciel, métiers techniques. Framework de simulation Des modèles d’expertise métier « Marine » Capitalisés au fur et à mesure des études Un environnement de développement d’applications de simulation Dans Visual Studio.NET 2005 La modélisation y tient une place importante Un environnement d’exploitation Ce qui est spécifique à une application de simulation est capturé dans des modèles Jeudis de l'objet - 30 mars 2006
Plan de la présentation Manipuler des « concepts et d’intentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusqu’aux DSL Retour d’expérience dans le domaine de la simulation Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Potentiel et limites techniques actuelles des DSL Tools L’avenir à court terme Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? Jeudis de l'objet - 30 mars 2006 TechEd 2002
L’extensibilité Visual Studio Les possibilités Nécessite le VS SDK Cas des Language Packages et en particulier des DSL Options de personnalisation, Snippets Macros Add-Ins Packages Niveau d’intégration Cout d’intégration Accessibilité aux développeurs Jeudis de l'objet - 30 mars 2006 TechEd 2002
L’extensibilité de VS Comment choisir ? Options de personnalisation, Snippets Macros Add-Ins Packages L’extensibilité de VS Comment choisir ? Type Avantages Limitations Personnalisation Simple Ne peut pas contrôler l’IDE Macros Contrôle complet de l’IDE Ne peut rien ajouter. Fourni en code source Add-ins Compilé (performance et protection des sources) Permet d’ajouter : Des tool windows, Des commandes, Des pages d’Options Ne peut pas ajouter: Nouveaux types de documents, Nouveaux type de projets, Moteurs de debugging, Etc Packages Comme Add-In + Possibilités totales d’ajouts Modèle de développement plus complexe Jeudis de l'objet - 30 mars 2006 TechEd 2002
Les DSL Tools Auteur de DSL (Architecte) Utilisateur de DSL (Développeur) Utilisateur final crée Package DSL génère Framework VS 2005 SDK DSL Tools Code, Doc Fichiers de config Framework produit Application Framework Visual Studio 2005 Jeudis de l'objet - 30 mars 2006
Avec des DSL bien faits : Nous sommes guidés au fur et à mesure Le modèle est validé à tous moments Un Custom Tool génère du code Le code généré compile forcément ! Il y a des possibilités illimitées d’interactions avec Visual Studio : Editeurs spécialisés pour les propriétés Drag & Drop Debugger Etc … Jeudis de l'objet - 30 mars 2006
Comment créer un DSL ? Un type de projet dans VS 2005 (choix d’un template) Modification du Domain Model (méta-modèle) Mise à jour de la Designer Definition (notation graphique) Ecriture de code personnalisé pour la validation … et les aspects graphiques avancés, l’interaction avec VS Code T4 pour les générateurs de code Les détails de tout cela dépassent la portée de cette conférence … Jeudis de l'objet - 30 mars 2006
Le processus de création d’un DSL avec les DSLTools Assistant Crée et configure une solution Visual Studio.NET pour un éditeur de DSL (à partir d’un patron) Définition du DSL Création d’un installeur pour le déploiement du DSL Édition du « Domain Model » Méta modèle (DMD) Sérialisation du modèle Contraintes Partie « Package VS.NET » Ajout de code Corps des contraintes Import / Export personnalisé Autres enrichissements Génération de code de l’éditeur graphique Édition de la définition de l’éditeur graphique Notation graphique(DD) Lien entre méta modèle et Notation graphique Explorateur Fenêtre des propriétés Comportement de validation Sérialisation de l’état de l’éditeur Ce qui est : Vert est ce qui est réalisé. Rouge : les fonctionnalités à venir dans des versions ultérieures des DSLTools. Orange ce qui est partiellement réalisé. Build (F5) Test Debugging Utilisation du designer Génération d’artefacts Modification de patrons Exécution Lancement d’une instance expérimentale de VS.NET sur la solution de debugging Jeudis de l'objet - 30 mars 2006 TechEd 2002
Création d’un Designer avec les DSL Tools Code généré par les DSL Tools Notation Graphique (Dd) Mapping Dm <-> Dd Définition du méta- Modèle (Dm) Comportement spécifique Validation/ Contraintes Sérialisation XML Génération Code/ Artefact Code personnalisé (Utiliser le VS SDK) Jeudis de l'objet - 30 mars 2006
Anatomie d’un DSL 2. Designer Definition 1. Domain Model 4. Code sur mesure (validation) (effets élaborés) 3. Correspondance entre les deux. Jeudis de l'objet - 30 mars 2006
Code sur mesure Règles de cohérence du modèle /// <summary> /// When the event / condition / action changes the label is recomputed and /// vice versa /// </summary> [RuleOn(typeof(Transition), FireTime = TimeToFire.TopLevelCommit)] public sealed class TransitionAttributesChanged : ChangeRule { /// This method is called whenever any attribute of a Transition changes. /// It processes the coherence Label = Event + "["+Condition+"] / "+Action /// <param name="e"></param> public override void ElementAttributeChanged(ElementAttributeChangedEventArgs e) Transition t = e.ModelElement as Transition; // Compute Label when Event changes if (e.MetaAttribute.Id == Transition.EventMetaAttributeGuid) t.Label = ComputeSummary(e.NewValue as string, t.Condition, t.Action); // Compute Label when Condition changes else if (e.MetaAttribute.Id == Transition.ConditionMetaAttributeGuid) t.Label = ComputeSummary(t.Event, e.NewValue as string, t.Action); // Compute Label when Action changes else if (e.MetaAttribute.Id == Transition.ActionMetaAttributeGuid) t.Label = ComputeSummary(t.Event, t.Condition, e.NewValue as string); // Compute Event, Condition, Action when Label changes else if (e.MetaAttribute.Id == Transition.LabelMetaAttributeGuid) System.Text.RegularExpressions.Match match = eventLabelRegEx.Match(e.NewValue as string); if (match.Success) t.Event = match.Groups["EventGroup"].Value.Trim(); t.Condition = match.Groups["Condition"].Value.Trim(); string actionWithSlash = match.Groups["ActionGroup"].Value.Trim(); if (actionWithSlash.StartsWith("/")) t.Action = actionWithSlash.Substring(1).TrimStart(); else t.Action = actionWithSlash; } Règles de cohérence du modèle Règles de validation du modèle [ValidationState(ValidationState.Enabled)] public partial class State { /// <summary> /// A final state should not have outgoing transitions /// </summary> /// <param name="context"></param> [ValidationMethod(ValidationCategory.Open | ValidationCategory.Save | ValidationCategory.Menu)] private void ValidateFinalStateHasNoOutgoingTransitions(ValidationContext context) Transition[] transitions = GetOutgoingTransitions(); if ((Kind == StateKind.Final) && (transitions.Length > 0)) string error = string.Format(System.Globalization.CultureInfo.CurrentUICulture, DomainModel_Resource.FinalCannotHaveOutgoingTransitions, Name); context.LogError(error, "StateMachines 42", transitions); } … Jeudis de l'objet - 30 mars 2006
Générateur de code écrit en T4 (Text Templating Transformation) On peut en faire un Custom Tool ! /// <summary> /// Method to clean up the resources(such as timers for example) allocated by the state. /// </summary> /// <param name="disposing">Is the state disposing</param> /// <param name="stateMachine">State machine owning this state</param> /// <param name="driven">Driven interface</param> public virtual void Dispose(bool disposing, <#=stateMachineName#> stateMachine, <#=drivenInterface#> driven) { } } <# foreach(State state in StateMachine.AllStates) { // Find base class (class implementing ParentState) string baseName; if (state.ParentState == StateMachine) baseName = baseStateName; else baseName = state.ParentState.GetFullName(); // List of events Dictionary<string, List<Transition>> transitionsFromStateByEventSignature = state.GetOutgoingTransitionsGroupedByEventSignature(true); #> /// <#=state.Comment#> class <#=state.GetFullName()#> : <#=baseName#> foreach(string transitionEventSignature in transitionsFromStateByEventSignature.Keys) Transition t = transitionsByEventSignature[transitionEventSignature][0]; /// <summary> /// Declaration of the package providing the Simulation code generator /// </summary> [ProvideCodeGenerator(typeof(StateMachinesGenerator), "StateMachinesGenerator", "Custom tool that generates C# files based on .StateMachine files", true)] public sealed partial class StateMachinesPackage {} [Guid("9DA6F053-E5B9-4955-A6AE-89FB5505E8E6")] public class StateMachinesGenerator : TemplatedCodeGenerator { protected override byte[] GenerateCode(string inputFileName, string inputFileContent) // Replace the supplied file contents with the template we want to run inputFileContent = ASCIIEncoding.UTF8.GetString(Properties.Resources.StateMachinesReport); // Substitute the name of the current model file into the template. FileInfo fi = new FileInfo(inputFileName); inputFileContent = inputFileContent.Replace(@"%MODELFILENAME%", fi.Name); inputFileContent = inputFileContent.Replace(@"FileNameSpace", this.FileNameSpace); // Now just delegate the rest of the work to the base class byte[] data = base.GenerateCode(inputFileName, inputFileContent); byte[] ascii = new byte[data.Length - 3]; Array.Copy(data, 3, ascii, 0, data.Length - 3); return ascii; } Jeudis de l'objet - 30 mars 2006
demo Anatomie du DSL de comportement dynamique Démo où on présente le DSL State machine sur deux exemples : La lampe clignotante (qu’on crée in extenso … validation du modèle, etc …) Le portail automatique (on ajoute une transition temporelle pour limiter le blocage du portail) … et on utilise le débuggeur. TechEd 2002
Exemple d’utilisation des DSL Simulation Démo où on présente le DSL State machine sur deux exemples : La lampe clignotante (qu’on crée in extenso … validation du modèle, etc …) Le portail automatique (on ajoute une transition temporelle pour limiter le blocage du portail) … et on utilise le débuggeur. TechEd 2002
Vie d’une application de simulation Modèle d’analyse d’une application de simulation Bibliothèque de modèles capitalisés Conception de nouveaux composants de simulation Mise au point Structure dynamique Exécution Structure statique Code utilisation expertise Jeudis de l'objet - 30 mars 2006
L’hélicoptère suit un hippodrome et regarde (au radar) Le sujet Travail d’un hélicoptère en « sentinelle » Un sous-marin s’approche. L’hélicoptère arrête sa patrouille pour aller voir. Lorsqu’il détecte quelque-chose il va pour l’identifier L’hélicoptère suit un hippodrome et regarde (au radar) Jeudis de l'objet - 30 mars 2006
L’Environnement de développement Simulations Jeudis de l'objet - 30 mars 2006
Ce que nous avons vu dans la démo Des designers qui présentent des concepts spécialisés dans des modèles spécifiques Des générateurs de code qui savent prendre ces modèles et générer du code ciblant un framework. Une excellente intégration à VS 2005 Une autre façon d’architecturer ses projets Jeudis de l'objet - 30 mars 2006
Un découpage des classes par domaine Grâce aux classes partielles Structure statique Comportement (state machines) Code métier Application Team Frigate Helicoptere Station Domaine Classes Main.cs Application.simu Frigate.Behavior.sm Helicoptere.cs Station.simu Station.Behavior.sm Jeudis de l'objet - 30 mars 2006
Plan de la présentation Manipuler des « concepts et d’intentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusqu’aux DSL Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Potentiel et limites techniques actuelles des DSL Tools L’avenir à court terme Quelles stratégies de modélisation : d’UML aux Domain-Specific Languages (DSL) ? Visual Studio 2005 apporte de nouveaux designers permettant de générer et manipuler du code, à partir de vues conceptuelles de plus haut niveau : les modèles. Grâce à un outillage sous forme de SDK, Microsoft offre la possibilité d’étendre ceux existants. Ce SDK sera complété par un produit permettant de créer soi-même, relativement simplement, ses propres modèles, designers graphiques, validateurs, et générateur de code : les DSL Tools. Cette session, illustrée par un exemple de mise en œuvre des DSL Tools, fera le point sur cette technologie : • Qu’est ce que les DSL ? • Est-ce la fin d’UML ? • Qu’est ce que les DSL Tools ? • Qu’en attendre techniquement et économiquement ? • Qu’elles en sont les limites techniques actuelles ? • Dans quelles conditions et comment les intégrer à une chaine de développement ? Jeudis de l'objet - 30 mars 2006 TechEd 2002
Discussion L’UML est-il mort ? à l’ANPROS nous utilisons UML et des DSL Les potentialités et les limites actuelles des DSL Tools ? Peut-on refaire ‘Rose’ avec des DSL ? Ce qu’on peut faire avec et qu’on ne peut pas faire sans L’avenir à court terme La V1 est pour mai. Beaucoup de changements en perspective Et ce n’est qu’un début ! Jeudis de l'objet - 30 mars 2006
FAQ Combien couteront les DSLTools ? Ils seront gratuits, dans le VS SDK. Est-ce qu’on est obligé d’héberger nos DSL dans VS 2005 ? Oui, pour le moment (sauf version Express) A terme, on pourra se procurer un VS « vide » Puis, on pourra héberger les designers hors de VS (V2 des DSLTools) Est-ce qu’on ne pourrait pas faire la même chose en UML ? C’était ce que nous faisions avant, mais : on a des compartiments spécifiques du métier pour le DSL « Simulation Architecture » et le DSL « State Machine » comporte la notion de « Délégation à une entité de simulation » Les deux connaissent le Framework et interagissent avec les assemblages de modèles. Tout est intégré et synchronisé dans le processus de production de code. Jeudis de l'objet - 30 mars 2006
Conclusion Utiliser un DSL ne nécessite pas d’être architecte. Le créer : si ! Les langages visuels y ont une place importante dans la Vision « Software Factory » de Microsoft. Un autre « pilier » est GAT (Guidage assisté), non présenté ici A Vous d’imaginer votre problème factorisé dans un Framework et ses variations capturées dans un DSL Jeudis de l'objet - 30 mars 2006
Liens utiles Informations sur les DSL Tools http://msdn.microsoft.com/vstudio/dsltools/default.aspx (Home page) http://forums.microsoft.com/msdn/showforum.aspx?forumid=61&siteid=1 Présentation ‘DSL Tools’ au symposium DNG 2005 http://www.dotnetguru.org/modules.php?op=modload&name=News&file=article&sid=681 (compte-rendus) http://dotnetguru.cledunet.com/SymposiumDNG-2005.zip : (13 Mo, planches 122-180) http://www.brainsonic.net/DesktopDefault.aspx?tabid=24&parentid=164&site=353 (Webcast) Lab virtuel en ligne http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032285310&EventCategory=3&culture=en-US&CountryCode=US VS 2005 SDK (Février 2006) http://affiliate.vsipmembers.com/affiliate/downloadfiles.aspx Compléments Indispensables jusqu’à la V1 ! http://www.modelisoft.com/Dmd2Dd.aspx (Synchro Dm <-> Dd) http://www.modelisoft.com/T4LangPackage.aspx (Coloration syntaxique T4) Jeudis de l'objet - 30 mars 2006
DSL Tools : la documentation Encore embryonnaire Jeudis de l'objet - 30 mars 2006