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
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
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
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
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
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
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
8
Plan
Sujet OutilsSyntaxiques
OutilsSémantiques
Architecture Conclusion
AbSynt
Passerelles DTDXML Schema
CoSynt
AOP
Visiteur
Visiteurs configurables
Visiteursdécouplés
Contexte
Projection
Approche
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
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)
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
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
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
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
15
Plan
Sujet OutilsSyntaxiques
OutilsSémantiques
Architecture Conclusion
AbSynt
Passerelles DTDXML Schema
CoSynt
AOP
Visiteur
Visiteurs configurables
Visiteursdécouplés
Contexte
Projection
Approche
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
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…
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
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) {}
}
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) {…}
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)
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
23
Sujet OutilsSyntaxiques
OutilsSémantiques
Architecture Conclusion
AbSynt
Passerelles DTDXML Schema
CoSynt
AOP
Visiteur
Visiteurs configurables
Visiteursdécouplés
Contexte
Projection
Approche
Plan
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
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
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
27
Sujet OutilsSyntaxiques
OutilsSémantiques
Architecture Conclusion
AbSynt
Passerelles DTDXML Schema
CoSynt
AOP
Visiteur
Visiteurs configurables
Visiteursdécouplés
Contexte
Projection
Approche
Plan
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)
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
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
Contribution à la Programmation
GénérativeApplication dans le générateur SmartTools :
technologies XML, programmation par aspects et composants
Questions ...