Contribution à la Programmation Générative Application dans le générateur SmartTools :...

31
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

Transcript of Contribution à la Programmation Générative Application dans le générateur SmartTools :...

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

Contribution à la Programmation

GénérativeApplication 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 AttaliINRIA Sophia-Antipolis

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

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 TechnologiesPlusieurs solutions à un problème (ex : composant)

Laquelle choisir ? la plus Pérenne ? Evolutive ?

Former les programmeurs

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

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é, ConcurrenceDéveloppements : + courts, - chers, adaptables

Bouleversements des Méthodes de Développement d'Applications

Logiciels évolutifs, adaptables aux Besoins

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

4

Contexte : Techniques de Développement [3/3]

Niveau ProgrammationOO : 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écificationStandardisation des formats de document (W3C)

UML, MDA de l'OMG

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

5

Objectif et ApprocheAider 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

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

6

Approche MDAMDA : 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

CCMWeb-Services

Génération /Transformations

PIM

Exemple:

PSMPSMPSM

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

7

Instanciation, à différents niveaux, dans SmartTools

SmartTools = Atelier Logiciel Aide au Développement Langages métiers/Outils

Visiteurs pardéfaut + AOP

Pour un Langage L

Modèle deComposants

AfficheurSpécification

Parseur

Composants

Générateurs

SmartTools

API manipulationdonnées DTD ou XML

SchemaEditeur guidé par

la Syntaxe

PSM

Modèle de Données

PIM

Modèle d'Analyses

Sémantiques

Modèle deVues/GUI

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

8

Plan

Sujet OutilsSyntaxiques

OutilsSémantiques

Architecture Conclusion

AbSynt

Passerelles DTDXML Schema

CoSynt

AOP

Visiteur

Visiteurs configurables

Visiteursdécouplés

Contexte

Projection

Approche

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

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

<assign> <var>a</var> <int>2</int></assign>

a=2;

assignvar int

"a" "2"ou

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

10

PIM : Constructeurs (Opérateurs), Types, Attributs, et et Données sémantiquesPSM : Classes Java sur DOM pour Arbres Strictement Typés Services DOM : serialisation, XPath, XSL, etc.

AbSynt Classes Java sur DOM

package tiny.astpublic interface AssignNode extends StatementType { public tiny.ast.VarType getVariableNode(); public void setVariableNode(tiny.ast.VarType node); ...

Statement = assign(Var variable, Exp value);Required env as java.lang.String in affect;vector as java.util.HashMap in affect;

Type Interface, Constructeur Interface + ClasseAttribut Variable

Code généré

Code écrit Transformation(SmartTools)

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

11

Document XML Objets Java

Notre ModèleAbSynt

Classes Java sur DOMgénère

convertitDTDou

XML Schema traduit

Ouverture vers le monde Document, Passerelle

se serialise enDocument XML

est conforme à

est représenté parObjets/Nœuds

est instance de

Analyses Sémantiques possibles

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

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

<!ELEMENT el (op1, (op2|(op3, op4)|(op5, op6*)))> el(T1 f1, T2[] f2); avec T1=op1; et T2= op2, op3, op4, op5, op6;

Exemple

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

13

Modèle des Vues/GUI : CoSynt

But: Transformer un AST en vue graphique/texteLangage Haut niveau, Séparation des Préoccupations

Génération : Afficheur et Analyseur Syntaxique associé • Syntaxe concrète • Affichage (suite de transformations)

assignvar int

"a" "2"

AST

Nboxassign

Sboxline

Nlabelvar

"a"Slabel

keyword

"="Nlabel

int

"2"Sbox

keyword

";"

Arbre d'objetsgraphiques

a=2; Forme textuelle

Arbre d'objetsavec styles

assign

var int

"a" "2"

"=" ";"

Arbre de syntaxeconcrète

Spécialisation/Raffinement par Transformations successives

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

14

CoSynt Analyseur Syntaxique, Afficheur (avec des

Standards)

+

assign(Var var, Exp e)AbSynt

Concrete Syntax {assign(v,e) : v "=" e ";"}Layout {assign : line:(1 2 3 4)

BML Nlabel : var, intText newline : assign}

CoSynt

Spécification ANTLR

Feuille XSLT (texte)

Feuille XSLT (vue)

Texte

Fichier BML

Objets graphiquesSwing

+ CSSObjets graphiquesSwing avec style

(vue isomorphe AST)

AST+

Analyseur syntaxiqueLL(k) en Java

Bénéficie d'Outils Standard

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

15

Plan

Sujet OutilsSyntaxiques

OutilsSémantiques

Architecture Conclusion

AbSynt

Passerelles DTDXML Schema

CoSynt

AOP

Visiteur

Visiteurs configurables

Visiteursdécouplés

Contexte

Projection

Approche

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

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 concernsAspects

Tisseurde

Code

Classes

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

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…

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

18

1re Solution : Visiteurs Configurables

But : "Cacher" le patron Visiteur (en Java)

Code Naturel et ExtensibleInconvé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

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

19

ViProfile Visiteur Configuré (Java)

+assign(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(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) {}

}

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

20

2e solution : Visiteurs Découplés

But : Réutilisation d'Analyses Composition, EnrichissementSé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) {…}

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

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(AssignNode, Object)

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

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 lisibleExemple : analyse de vérification de type

enrichie avec vérification d'initialisation de variables

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

23

Sujet OutilsSyntaxiques

OutilsSémantiques

Architecture Conclusion

AbSynt

Passerelles DTDXML Schema

CoSynt

AOP

Visiteur

Visiteurs configurables

Visiteursdécouplés

Contexte

Projection

Approche

Plan

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

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 ApplicationApproche objet à granularité trop Fine Composants

• Spécification des Interfaces Requises (dépendances)• Déploiement

Descriptifcomposant

DescriptiflancementConteneur

Composant

Fonctionnel

Façade

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

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

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

26

Architecture : Projections<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>

Classe container+

Classe extension façade

SmartTools

Fichier WSDL+

Classe correspondance

SOAP

Web-Services

Fichier IDL+

Classe serveurCORBA

CCM

Interfacesremote et

home

EJB

Descriptif de Composant

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

27

Sujet OutilsSyntaxiques

OutilsSémantiques

Architecture Conclusion

AbSynt

Passerelles DTDXML Schema

CoSynt

AOP

Visiteur

Visiteurs configurables

Visiteursdécouplés

Contexte

Projection

Approche

Plan

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

28

Résultats : Exemples d'Utilisation

Langages internes de SmartToolsAbSynt, CoSynt, ViProfile, CDML (composant)

Langages du W3CXSLT, SVG, DTD, XML Schema, CSS, XML

Langages de Programmation ou Métiersjava, ant, etc (car passerelles XML)

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

29

Conclusion

Partie Données AbSynt

Logiques métiers(PIM)

Cibles générées(PSM)

Classes Java au-dessus de DOM,DTD/XML Schema

Partie Vues/GUI AbSynt + CoSynt Afficheur, Analyseur Syntaxique

Partie Sémantique AbSynt + ViProfile Visiteurs en Java

Partie Composants CDMLComposants pour SmartTools,EJB, CCM ou Web-Services

ModèleIndépendant

Techno/Langage

Génération /Transformations

Code enrichi deTechnologies

Approche MDA

Programmation Générative : évolution logiciels, applicable niveaux

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

30

Perspectives de RechercheAnalyses 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

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

Contribution à la Programmation

GénérativeApplication dans le générateur SmartTools :

technologies XML, programmation par aspects et composants

Questions ...