1 / 31

Contribution à la Programmation Générative

Contribution à la Programmation Générative. Application dans le générateur SmartTools : technologies XML, programmation par aspects et composants. Carine Courbis. Thèse dirigée par Didier Parigot et Isabelle Attali INRIA Sophia-Antipolis. Soutenance de thèse, le 10 décembre 2002.

sierra
Download Presentation

Contribution à la Programmation Générative

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Contribution à la Programmation Générative Application dans le générateur SmartTools : technologies XML, programmation par aspects et composants Carine Courbis Thèse dirigée par Didier Parigot et Isabelle Attali INRIA Sophia-Antipolis Soutenance de thèse, le 10 décembre 2002

  2. Contexte : Facteurs de Bouleversements [1/3] Bouleversements de l'Informatique dus à : • Internet Du PC, monde clos, au Distribué Communication entre applications et utilisateurs • Format d'échange ? Standard XML du W3C • Prolifération de Nouvelles Technologies Plusieurs solutions à un problème (ex : composant) Laquelle choisir ? la plus Pérenne ? Evolutive ? Former les programmeurs

  3. Contexte : Facteurs de Bouleversements [2/3] • Démocratisation de l'Informatique Extension aux domaines non techniques Connaissances, besoins, supports, domaines d'activités différents • Pression du marché, Concurrence Développements : + courts, - chers, adaptables • Bouleversements desMéthodes de Développementd'Applications Logiciels évolutifs, adaptables aux Besoins

  4. Contexte : Techniques de Développement [3/3] Niveau Programmation OO : encapsulation, héritage  code extensible, réutilisable, modulaire, mais … Préoccupations transversales aux classes, Mélange de code fonctionnel/non-fonctionnel  AOP, Programmation par Composants, etc Niveau Spécification Standardisation des formats de document (W3C) UML, MDA de l'OMG

  5. Modèle Code Génération / Transformations Objectif et Approche Aider au Développement d'Applications Idée : Simplifier la programmation en Générant du code, à partir des Modèles (parties métiers) Solution : Phase de Génération : intègre les Technologies  MDA Gains : code adaptable selon technologies et besoins, concentration seulement sur partie "intelligente" En plus: Utilisation de Standards du W3C et de l'OMG (Outils et Evolutions)

  6. Approche MDA MDA : Model-Driven Architecture PSM PIM PSM Génération / Transformations PSM Modèle Indépendant de la Plate-forme/Techno Modèle Spécifique à la Plate-forme/Techno Exemple: Web-Services CCM Modèle de composants EJB Avoir un Modèle Métier UML et le Spécialiser par Transformation Notre Approche : MDA à Différents Niveaux et avec des Langages

  7. API manipulation données Modèle de Données DTD ou XML Schema Editeur guidé par la Syntaxe Modèle d'Analyses Sémantiques Visiteurs par défaut + AOP PIM PSM Modèle de Vues/GUI Afficheur Spécification Parseur Modèle de Composants Composants Instanciation, à différents niveaux, dans SmartTools SmartTools = Atelier Logiciel Aide au Développement Langages métiers/Outils Générateurs SmartTools Pour un Langage L

  8. Plan Sujet Outils Syntaxiques Outils Sémantiques Architecture Conclusion AbSynt AOP Contexte Approche Passerelles DTD XML Schema Visiteur CoSynt Visiteurs configurables Projection Visiteurs découplés

  9. <assign> <var>a</var> <int>2</int> </assign> assign var int a=2; ou "a" "2" Modèle de Données : AbSynt Programme AST (arbre de syntaxe abstraite) Pourquoi un nouveau Formalisme ? • Avoir un format de Description de Structure de Haut Niveau, indépendant techno/langage • Accepter DTD/XML Schema  Fils Optionnels/Tableaux • Avoir une Abstraction vis-à-vis de l'Implémentation  sur-couche de manipulation des nœuds

  10. Code écrit Transformation (SmartTools) Type  Interface, Constructeur  Interface + Classe Attribut  Variable Code généré AbSynt  Classes Java sur DOM PIM :Constructeurs (Opérateurs), Types, Attributs, et et Données sémantiques PSM :Classes Java surDOMpour Arbres Strictement Typés Services DOM : serialisation, XPath, XSL, etc. Statement = assign(Var variable, Exp value); Required env as java.lang.String in affect; vector as java.util.HashMap in affect; package tiny.ast public interface AssignNode extends StatementType { public tiny.ast.VarType getVariableNode(); public void setVariableNode(tiny.ast.VarType node); ...

  11. DTD ou XML Schema convertit traduit est instance de est conforme à est représenté par Document XML Objets/Nœuds se serialise en Ouverture vers le monde Document, Passerelle Analyses Sémantiques possibles Document XML  Objets Java Notre Modèle AbSynt Classes Java sur DOM génère

  12. <!ELEMENT el (op1, (op2|(op3, op4)|(op5, op6*)))> el(T1 f1, T2[] f2); avec T1=op1; et T2= op2, op3, op4, op5, op6; Exemple Syntaxe abstraite versus DTD, XML Schema Analogies • Constructeurs = Eléments, Attributs = Attributs • Types  certaines Entités paramètres, choix, éléments substituables ( notion type de XML Schema car modèle de contenu) Différences/Difficultés • Notions de fils optionnels/tableaux • Descriptions EBNF : modèle de contenu parfois trop complexe  Perte d'informations de structure

  13. assign assign  a=2; Forme textuelle var int var int  "=" ";" assign Nbox "a" "2" "a" "2" Arbre d'objets graphiques Arbre d'objets avec styles   line Arbre de syntaxe concrète Sbox AST var keyword int keyword Nlabel Slabel Nlabel Sbox Spécialisation/Raffinement par Transformations successives "a" "=" "2" ";" Modèle des Vues/GUI : CoSynt But: Transformer un AST en vue graphique/texte Langage Haut niveau, Séparation des Préoccupations Génération : Afficheur et Analyseur Syntaxique associé • Syntaxe concrète • Affichage (suite de transformations)

  14. AbSynt assign(Var var, Exp e) Spécification ANTLR Analyseur syntaxique LL(k) en Java CoSynt Concrete Syntax { assign(v,e) : v "=" e ";" } Layout { assign : line:(1 2 3 4) BML Nlabel : var, int Text newline : assign } Feuille XSLT (texte) Texte + AST Feuille XSLT (vue) Fichier BML Bénéficie d'Outils Standard Objets graphiques Swing Objets graphiques Swing avec style (vue isomorphe AST) + CSS CoSynt  Analyseur Syntaxique, Afficheur (avec des Standards) +

  15. Plan Sujet Outils Syntaxiques Outils Sémantiques Architecture Conclusion AbSynt AOP Contexte Approche Passerelles DTD XML Schema Visiteur CoSynt Visiteurs configurables Projection Visiteurs découplés

  16. Programmation par Aspects Separation of concerns Rendre Modulaire les Préoccupations et les ajouter (Tisser), à la demande, au code de base Où tisser? Comment composer plusieurs aspects? Quelle technique d'implémentation ? Classes Aspects Tisseur de Code

  17. type statique  type dynamique class T2 implements I2 { void accept(Visitor v) { v.visit(this); }... class T1 … class T3… Patron de conception Visiteur Définir des Opérations sur la structure d'Objets (arbre) • Sans Modifier les objets • Séparation Code (module extensible) et Structure class Visitor1 implements Visitor { void visit(T1 node) { ... node.getSon().accept(this); } void visit(T2 node) {…} void visit(T3 node) {…} } class Visitor2 extends Visitor1 {…}

  18. 1re Solution : Visiteurs Configurables But : "Cacher" le patron Visiteur (en Java) Code Naturel et Extensible Inconvénients :accept, paramètres et type de retour figés des méthodes d'où casts ou variables globales Solution : Générer, à partir d'un modèle (ViProfile), • Méthodes visit à signature et parcours configurables • Pré-calcul de recherche statique de méthodes En Plus : Aspects dédiés aux visiteurs (analyses plus extensibles), à branchement dynamique ou statique

  19. AbSynt assign(Var var, Exp e) ViProfile Integer visitSt(%Statement, Type t); String visit(%Var, Type t); abstract class AbstractVisitor extends ClassicVisitorImpl { void pré-calcul() {...} ... class TraversalVisitor extends AbstractVisitor {…} ViProfile  Visiteur Configuré (Java) + class Visitor extends TraversalVisitor { Integer visitSt(AssignNode node, Type t) { String s = visit(node.getVar(), t);... class TraceAspect implements Aspect { public void before(Type t, Object[] p) { System.out.println("avant " + p[0]); } public void after(Type t, Object[] p) {} }

  20. 2e solution : Visiteurs Découplés But : Réutilisation d'Analyses  Composition, Enrichissement Séparation : Structure, Parcours, Actions Sémantiques  une Visite = n morceaux de code  Aspects avant, après, et entre les fils Visiteur = Tisseur de code public Object beforeOp(AssignNode n, Object p) {…} public Object betweenElem1and2(AssignNode n, Object p) {…} public Object afterOp(AssignNode n, Object p) {…}

  21. 3] beforeOp(AssignNode, Object) Action S1 1] traverse() Action S2 4] 2] beforeOp( UntypedNode) Action S3 5] Action S4 6] Exemple d'exécution d'un Visiteur Découplé Parcours Dynamique Visiteur Découplé ~ Tisseur de Code

  22. Comparaison des deux Solutions Même pouvoir d'Expression • 1re : code naturel (grâce à la génération) et extensible mais pas réutilisable • 2e : code réutilisable mais moins lisible Exemple : analyse de vérification de type enrichie avec vérification d'initialisation de variables

  23. Plan Sujet Outils Syntaxiques Outils Sémantiques Architecture Conclusion AbSynt AOP Contexte Approche Passerelles DTD XML Schema Visiteur CoSynt Visiteurs configurables Projection Visiteurs découplés

  24. Descriptif lancement Descriptif composant Architecture : Contexte SmartTools : Générer des Outils autonomes (Services) pour des Langages Métiers + Méta-outil Buts :Exportation et Importation d'Outils + Configuration Architecture selon Application Approche objet à granularité trop Fine  Composants • Spécification des Interfaces Requises (dépendances) • Déploiement Façade Conteneur Fonctionnel Composant

  25. Architecture : Notre Approche Quelle Technologie de composant adopter? • Adéquation aux besoins • Technologie : handicap à l'évolution de l'outil • Implémentation "légère" et simple  Création d'un Modèle de composant abstrait Projetable vers les Technologies EJB, CCM et Web-Services

  26. CCM EJB SmartTools Web-Services Classe container + Classe extension façade Fichier WSDL + Classe correspondance SOAP Fichier IDL + Classe serveur CORBA Interfaces remote et home Architecture : Projections Descriptif de Composant <component name="graph" extends="abstractContainer"> <containerclass name="GraphContainer"/> <facadeclass name="GraphFacade"/> <input name="addNode" method="addNode"> <parameter name="nodeName" javatype="java.lang.String">... </input> </component>

  27. Plan Sujet Outils Syntaxiques Outils Sémantiques Architecture Conclusion AbSynt AOP Contexte Approche Passerelles DTD XML Schema Visiteur CoSynt Visiteurs configurables Projection Visiteurs découplés

  28. Résultats : Exemples d'Utilisation Langages internes de SmartTools AbSynt, CoSynt, ViProfile, CDML (composant) Langages du W3C XSLT, SVG, DTD, XML Schema, CSS, XML Langages de Programmation ou Métiers java, ant, etc (car passerelles XML)

  29. Conclusion Modèle Indépendant Techno/Langage Génération / Transformations Code enrichi de Technologies Approche  MDA Programmation Générative : évolution logiciels, applicable  niveaux Logiques métiers (PIM) Cibles générées (PSM) Classes Java au-dessus de DOM, DTD/XML Schema Partie Données AbSynt Partie Vues/GUI AbSynt + CoSynt Afficheur, Analyseur Syntaxique Partie Sémantique AbSynt + ViProfile Visiteurs en Java Composants pour SmartTools, EJB, CCM ou Web-Services CDML Partie Composants

  30. Perspectives de Recherche Analyses Sémantiques : • Règles de composition d'Actions Sémantiques Composants : • Modéliser les mécanismes de projection • Ajouter la possibilité d'Aspects à l'intérieur SmartTools : plate-forme d'expérimentation Passerelles vers d'autres mondes : • Web-sémantique : Syntaxe Abstraite  RDFS • UML : Syntaxe Abstraite  MOF

  31. Contribution à la Programmation Générative Application dans le générateur SmartTools : technologies XML, programmation par aspects et composants Questions ...

More Related