La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

DSL et DSL Tools Jean-Marc Prieur (ANPROS)

Présentations similaires


Présentation au sujet: "DSL et DSL Tools Jean-Marc Prieur (ANPROS)"— Transcription de la présentation:

1 DSL et DSL Tools Jean-Marc Prieur (ANPROS)

2 Jeudis de l'objet - 30 mars / 53 Plan de la présentation Manipuler des « concepts et dintentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusquaux DSL Retour dexpé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 Lavenir à court terme

3 Jeudis de l'objet - 30 mars / 53 Plan de la présentation Manipuler des « concepts et dintentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusquaux DSL Retour dexpé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 Lavenir à court terme

4 Jeudis de l'objet - 30 mars / 53 Manipulations de concepts Manipulations de concepts dans Visual Studio 2005 Lexemple des fichiers de settings et ressources Persistance dans des fichiers XML (.settings,.resources) 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.Resour ces", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } ResXFileCodeGenerator Resources.Designer.cs

5

6 Jeudis de l'objet - 30 mars / 53 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 lutilisation du Framework) System.Resources et System.Globalization System.Configuration Ce mécanisme est unidirectionnel.

7 Custom Tools de Visual Studio 2005 demo demo

8 Jeudis de l'objet - 30 mars / 53 bi-directionnelle De la Manipulation bi-directionnelle de concepts Pour les Windows.Forms cest comme pour les ressources ou settings mais Léditeur est graphique la sérialisation seffectue dans le code cest built-in (pas de Custom Tool) Même chose pour le Class diagram partial La notion de classe partial est très intéressante pour les générateurs de code

9 Jeudis de l'objet - 30 mars / 53 Et si nous nous pouvions prendre un modèle (par exemple un automate détats finis) et en déduire du code source? « Ajouter StateMachine » à un projet Visual Studio. Cest possible extensible car Visual Studio 2005 est extensible Mais il nous faut dabord formaliser nos solutions à nos problèmes répétitifs

10 Jeudis de l'objet - 30 mars / 53 Plan de la présentation Manipuler des « concepts et dintentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusquaux DSL Retour dexpé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 Lavenir à court terme

11 Jeudis de l'objet - 30 mars / 53 Clignottant Evolution du processussolutions Patterns Templates Frameworks Designers Fourniture doutils pour aider les utilisateurs du framework Fourniture déléments stables sous forme compilée Automatisation de lapplication de patterns Formalisées issues de lexperience Automates détats-finis State-Pattern Exemple de code Designs.StateMachine DSL SM éteintAllumé Eteint

12 Jeudis de l'objet - 30 mars / 53 Les Roles et les Artefacts Les « architectes » sélectionnent des procédures et conseils et créent deux types dartefacts : un Framework Une codification des conseils (assistant, designer graphique ou non...) Les « développeurs » utilisent un modèle pour implémenter une solution

13 Jeudis de l'objet - 30 mars / 53 Des DSL Nous avons besoin de langages spécifiques pour décrire les points dextension 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 ou Verticaux (métier) DSL Architecture de composants de simulation

14 Jeudis de l'objet - 30 mars / 53 Les langages visuels Permettent déchanger des informations dans un domaine spécifique property Corona label Shape GroupBase members waiting running pausebegin stop playing +v 0v 0.7CR R C 0.1R C R

15 Jeudis de l'objet - 30 mars / 53 Plan de la présentation Manipuler des « concepts et dintentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusquaux DSL Retour dexpé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 Lavenir à court terme

16 Jeudis de l'objet - 30 mars / 53 Retour dexpérience dans le domaine de la simulation Contexte dapplication Des études de recherche opérationnelle aux applications de simulation Un processus outillé.

17 Jeudis de l'objet - 30 mars / 53 Expert opérationnel, pilote de létude : « Je suis pressé. Jai besoin dune réponse rapidement. » Le besoin initial : répondre plus efficacement aux demandes détudes de recherche opérationnelle

18 Jeudis de l'objet - 30 mars / 53 CDT : « Je voudrais que les études de RO soient réalisées plus rapidement en maîtrisant toute la verticalité » Rêve du chef …

19 Jeudis de l'objet - 30 mars / 53 Directeur détudes : « Je comprends son problème. Il faut maintenant que je le modélise. - Traduire en termes de critères à évaluer sur des scénarii, - Construire un plan dexpérience i.e. développer une application de simulation dans laquelle je vais mesurer des variables qui seront transformées en critères Rêve du directeur détude …

20 Jeudis de l'objet - 30 mars / 53 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 dun scénario traduisant la problématique - Utilisation de modèles - Création dune application à partir dun environnement de simulation Etapes de réalisation dune application détude -Spécification de lappli de simulation -Conception -Développement -Implémentation - Tests Exploitation (Variation des paramètres du modèle et de son environnement) Produit MathématiqueProduit logiciel Résultats Validation Ou Modification Validation Ou Modification Analyse des résultats Rédaction dun rapport Loutil DirectSim La Démarche « Etude RO » Une réponse : Un environnement générique de - développement, - exécution - et exploitation de simulations.

21 Jeudis de l'objet - 30 mars / 53 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...» Rêve du directeur détude… … qui est le maillon entre la demande et la réponse

22 Jeudis de l'objet - 30 mars / 53 Développeur : « Je souhaiterais : - Développer avec des langages et outils modernes, efficaces et adaptés au problème. -Réutiliser ce que jai déjà fait -Que les tâches de développement répétitives soient faites par lordinateur » Rêve des développeurs

23 Jeudis de l'objet - 30 mars / 53 De quoi avons-nous besoin concrètement? Besoin de capitaliser des expertises métiers Besoin dusines de développements dapplications de simulation Assembler des applications de simulation avec des outils, en sexprimant dans un langage proche de lopérationnel, et sappuyant sur des briques de connaissances métier (moyens + concepts demploi) Cette usine de développement doit être intégrée à un environnement de développement moderne Besoin dun langage pour le binôme opérationnel / ingénieur pour les applications La situation passée : notation UML …

24 Jeudis de l'objet - 30 mars / 53 Lenvironnement de développement, exécution, et exploitation de simulations DirectSim

25 Jeudis de l'objet - 30 mars / 53 Contexte dapplication

26 Jeudis de l'objet - 30 mars / 53 Créer des applications de simulation A lANPROS, 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 Cest 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 dinsertion) que permettent le framework Or le modeleur UML ne connaît pas ce framework, et ce nest pas forcément facile de le lui apprendre.

27 Jeudis de l'objet - 30 mars / 53 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 lhélicoptère de la vidéo. Il est complexe en soi. Mais les choses sont encore plus compliquées par le manque dinteraction entre le modèle et le framework de simulation sous- jacent ou les composants de simulation réutilisés qui contraignent la modélisation IntelliSense au niveau du modèle, débugging idem.

28 Jeudis de l'objet - 30 mars / 53 Développement dapplications de simulation par les modèles Nous cherchons à rendre la modélisation dapplications de simulation possible par des non spécialistes (un plus grand nombre) Sattacher aux concepts Masquer le plus possible les détails du framework et aider à lapprendre Avoir des éditeurs graphiques attractifs et ergonomiques qui parlent dans le langage de lopé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

29 Jeudis de l'objet - 30 mars / 53 DirectSim : pourquoi ça va plus vite ! Des framework génériques Génie logiciel, métiers techniques. Framework de simulation Des modèles dexpertise métier « Marine » Capitalisés au fur et à mesure des études Un environnement de développement dapplications de simulation Dans Visual Studio.NET 2005 La modélisation y tient une place importante Un environnement dexploitation Ce qui est spécifique à une application de simulation est capturé dans des modèles Ce qui est commun aux applications de simulation est factorisé dans des framework

30 Jeudis de l'objet - 30 mars / 53 Plan de la présentation Manipuler des « concepts et dintentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusquaux DSL Retour dexpé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 Lavenir à court terme

31 Jeudis de l'objet - 30 mars / 53 Lextensibilité Visual Studio Les possibilités Options de personnalisation, Snippets Macros Add-Ins Packages Accessibilité aux développeurs Niveau dintégration Cout dintégration Nécessite le VS SDK Cas des Language Packages et en particulier des DSL

32 Jeudis de l'objet - 30 mars / 53 Lextensibilité de VS Comment choisir ? TypeAvantagesLimitations PersonnalisationSimpleNe peut pas contrôler lIDE MacrosContrôle complet de lIDENe peut rien ajouter. Fourni en code source Add-insContrôle complet de lIDE Compilé (performance et protection des sources) Permet dajouter : Des tool windows, Des commandes, Des pages dOptions Ne peut pas ajouter: Nouveaux types de documents, Nouveaux type de projets, Moteurs de debugging, Etc PackagesComme Add-In + Possibilités totales dajouts Modèle de développement plus complexe Options de personnalisation, Snippets Macros Add-Ins Packages

33 Jeudis de l'objet - 30 mars / 53 Les DSL Tools Visual Studio 2005 VS 2005 SDK DSL Tools PackageDSL Code, Doc Fichiers de config Application Auteur de DSL (Architecte) Utilisateur de DSL (Développeur) Utilisateur final crée génère produit Framework

34 Jeudis de l'objet - 30 mars / 53 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 dinteractions avec Visual Studio : Editeurs spécialisés pour les propriétés Drag & Drop Debugger Etc …

35 Jeudis de l'objet - 30 mars / 53 Comment créer un DSL ? Un type de projet dans VS 2005 (choix dun 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, linteraction 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 …

36 Jeudis de l'objet - 30 mars / 53 Le processus de création dun DSL avec les DSLTools Assistant Crée et configure une solution Visual Studio.NET pour un éditeur de DSL (à partir dun patron) Définition du DSL Édition du « Domain Model » Méta modèle (DMD) Sérialisation du modèle Contraintes É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 Partie « Package VS.NET » Ajout de code Corps des contraintes Import / Export personnalisé Autres enrichissements Génération de code de léditeur graphique Création dun installeur pour le déploiement du DSL Build (F5) Exécution Lancement dune instance expérimentale de VS.NET sur la solution de debugging Test Debugging Utilisation du designer Génération dartefacts Modification de patrons

37 Jeudis de l'objet - 30 mars / 53 Création dun Designer avec les DSL Tools Code généré par les DSL Tools NotationGraphique(Dd) Mapping Dm Dd Définition du méta- Modèle(Dm) Comportementspécifique Validation/Contraintes SérialisationXMLspécifique GénérationCode/Artefact Code personnalisé (Utiliser le VS SDK)

38 Jeudis de l'objet - 30 mars / 53 Anatomie dun DSL 1. Domain Model 2. Designer Definition 3. Correspondance entre les deux. 4. Code sur mesure (validation) (effets élaborés)

39 Jeudis de l'objet - 30 mars / 53 Code sur mesure Règles de cohérence du modèle Règles de validation du modèle [ValidationState(ValidationState.Enabled)] public partial class State { /// /// A final state should not have outgoing transitions /// [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); } … } /// /// When the event / condition / action changes the label is recomputed and /// vice versa /// [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 /// 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; }

40 Jeudis de l'objet - 30 mars / 53 Générateur de code écrit en T4 (Text Templating Transformation) On peut en faire un Custom Tool ! /// /// Method to clean up the resources(such as timers for example) allocated by the state. /// /// Is the state disposing /// State machine owning this state /// Driven interface public virtual void Dispose(bool disposing, stateMachine, 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 > transitionsFromStateByEventSignature = state.GetOutgoingTransitionsGroupedByEventSignature(true); #> /// class : { <# foreach(string transitionEventSignature in transitionsFromStateByEventSignature.Keys) { Transition t = transitionsByEventSignature[transitionEventSignature][0]; /// /// Declaration of the package providing the Simulation code generator /// [ProvideCodeGenerator(typeof(StateMachinesGenerator), "StateMachinesGenerator", "Custom tool that generates C# files based on.StateMachine files", true)] public sealed partial class StateMachinesPackage {} [Guid("9DA6F053-E5B 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 = fi.Name); inputFileContent = 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; }

41 Anatomie du DSL de comportement dynamique demo demo

42 Exemple dutilisation des DSL Simulation

43 Jeudis de l'objet - 30 mars / 53 Modèle danalyse dune application de simulation Bibliothèque de modèles capitalisés Conception de nouveaux composants de simulation Structure statique Structure dynamique Code utilisation expertise Mise au point Exécution Vie dune application de simulation

44 Jeudis de l'objet - 30 mars / 53 Le sujet Travail dun hélicoptère en « sentinelle » Un sous-marin sapproche. Lhélicoptère arrête sa patrouille pour aller voir. Lhélicoptère suit un hippodrome et regarde (au radar) Lorsquil détecte quelque-chose il va pour lidentifier

45 Jeudis de l'objet - 30 mars / 53 LEnvironnement de développement Simulations

46 Jeudis de l'objet - 30 mars / 53 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 darchitecturer ses projets

47 Jeudis de l'objet - 30 mars / 53 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 Frigate.Behavior.sm Station.Behavior.sm Station.simu Application.simu Helicoptere.cs Main.cs Classes Domaine

48 Jeudis de l'objet - 30 mars / 53 Plan de la présentation Manipuler des « concepts et dintentions » dans Visual Studio 2005 Custom Tools pour les settings et ressources Editeurs de Windows Forms Class Diagram Formaliser nos solutions … jusquaux DSL Personnaliser Visual Studio 2005 Le Visual Studio SDK Les DSL Tools Discussion UML et DSL Potentiel et limites techniques actuelles des DSL Tools Lavenir à court terme

49 Jeudis de l'objet - 30 mars / 53 Discussion LUML est-il mort ? à lANPROS nous utilisons UML et des DSL Les potentialités et les limites actuelles des DSL Tools ? Peut-on refaire Rose avec des DSL ? Ce quon peut faire avec et quon ne peut pas faire sans Lavenir à court terme La V1 est pour mai. Beaucoup de changements en perspective Et ce nest quun début !

50 Jeudis de l'objet - 30 mars / 53 Combien couteront les DSLTools ? Ils seront gratuits, dans le VS SDK. Est-ce quon est obligé dhé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 quon 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. FAQ

51 Jeudis de l'objet - 30 mars / 53 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 dimaginer votre problème factorisé dans un Framework et ses variations capturées dans un DSL

52 Jeudis de l'objet - 30 mars / 53 Liens utiles Informations sur les DSL Tools (Home page) Présentation DSL Tools au symposium DNG (compte-rendus) : (13 Mo, planches ) (Webcast) Lab virtuel en ligne ategory=3&culture=en-US&CountryCode=US VS 2005 SDK (Février 2006) Compléments Indispensables jusquà la V1 ! (Synchro Dm Dd) (Coloration syntaxique T4)

53 Jeudis de l'objet - 30 mars / 53 DSL Tools : la documentation Encore embryonnaire


Télécharger ppt "DSL et DSL Tools Jean-Marc Prieur (ANPROS)"

Présentations similaires


Annonces Google