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

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

Présentations similaires


Présentation au sujet: "Contribution à la Programmation Générative Application dans le générateur SmartTools : technologies XML, programmation par aspects et composants Carine."— Transcription de la présentation:

1

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

3 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

4 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 des Méthodes de Développement d'Applications Logiciels évolutifs, adaptables aux Besoins

5 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

6 5 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) Génération / Transformations CodeModèle

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

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

9 8 Plan SujetOutils Syntaxiques Outils Sémantiques ArchitectureConclusion AbSynt Passerelles DTD XML Schema CoSynt AOP Visiteur Visiteurs configurables Visiteurs découplés Contexte Projection Approche

10 9 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 a 2 a=2; affect varint "a""2" ou

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

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

13 12 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 el(T1 f1, T2[] f2); avec T1=op1; et T2= op2, op3, op4, op5, op6; Exemple

14 13 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) affect varint "a""2" AST Nbox affect Sbox line Nlabel var "a" Slabel keyword "=" Nlabel int "2" Sbox keyword ";" Arbre d'objets graphiques a=2; Forme textuelle Arbre d'objets avec styles affect varint "a""2" "="";" Arbre de syntaxe concrète Spécialisation/Raffinement par Transformations successives

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

16 15 Plan SujetOutils Syntaxiques Outils Sémantiques ArchitectureConclusion AbSynt Passerelles DTD XML Schema CoSynt AOP Visiteur Visiteurs configurables Visiteurs découplés Contexte Projection Approche

17 16 Programmation par Aspects 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 ? Separation of concerns Aspects Tisseur de Code Classes

18 17 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) {…} } type statique type dynamique class Visitor2 extends Visitor1 {…} class T2 implements I2 { void accept(Visitor v) { v.visit(this); }... class T1 … class T3…

19 18 1 re 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

20 19 ViProfile Visiteur Configuré (Java) + affect(Var var, Exp e) AbSynt Integer visitSt(%Statement, Type t); String visit(%Var, Type t); ViProfile abstract class AbstractVisitor extends ClassicVisitorImpl { void pré-calcul() {...}... class TraversalVisitor extends AbstractVisitor {…} class Visitor extends TraversalVisitor { Integer visitSt(AffectNode 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) {} }

21 20 2 e 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(AffectNode n, Object p) {…} public Object betweenElem1and2(AffectNode n, Object p) {…} public Object afterOp(AffectNode n, Object p) {…}

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

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

24 23 SujetOutils Syntaxiques Outils Sémantiques ArchitectureConclusion AbSynt Passerelles DTD XML Schema CoSynt AOP Visiteur Visiteurs configurables Visiteurs découplés Contexte Projection Approche Plan

25 24 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 Descriptif composant Descriptif lancement Conteneur Composant Fonctionnel Façade

26 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

27 26 Architecture : Projections... Classe container + Classe extension façade SmartTools Fichier WSDL + Classe correspondance SOAP Web-Services Fichier IDL + Classe serveur CORBA CCM Interfaces remote et home EJB Descriptif de Composant

28 27 SujetOutils Syntaxiques Outils Sémantiques ArchitectureConclusion AbSynt Passerelles DTD XML Schema CoSynt AOP Visiteur Visiteurs configurables Visiteurs découplés Contexte Projection Approche Plan

29 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)

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

31 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

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


Télécharger ppt "Contribution à la Programmation Générative Application dans le générateur SmartTools : technologies XML, programmation par aspects et composants Carine."

Présentations similaires


Annonces Google