création d’un langage d’action pour un logiciel mda
DESCRIPTION
Création d’un langage d’action pour un logiciel MDA. Soutenance de DRT GEII Proposé par l’UHA (Essaim) Réalisé au sein d’ObjeXion Software. ObjeXion. Prototyping. suite. Fichier. XMI. Model. FacSimile. Prototyper. Formatage. Alimentation. Modèle. sous. ObjeXion. Rational. Link. - PowerPoint PPT PresentationTRANSCRIPT
Création d’un langage d’action pour un
logiciel MDA
Soutenance de DRT GEIISoutenance de DRT GEII
Proposé par l’UHA (Essaim)Proposé par l’UHA (Essaim)
Réalisé au sein d’ObjeXion Réalisé au sein d’ObjeXion SoftwareSoftware
Première partie (résumé): Développement d’un
Interpréteur OCL pour une Machine Virtuelle UML
Fichier de Stockage Application
Fichier d’échanges Flux d’informations
significatives
Modèle
sous Rational ROSE
Fichier XMI
ObjeXion Prototyping suite
Model Prototyper
ObjeXion Link
FacSimile
Base de données
relationnelle (mdb)
Formatage Alimentation
Netsilon: présentation
Netsilon: modélisation
ModeleurModeleurUMLUML
ObjetsObjetsMétierMétier
(Diagramme(Diagrammes de s de
classes)classes)
ApparencApparencee
GraphiquGraphiquee
(HTML)(HTML)
NavigationNavigation(Propriétaire)(Propriétaire)
ÉditeurÉditeurPage webPage web
Création d’un langage d’action pour un
logiciel MDA
XionXion Optimisation SQLOptimisation SQL Éditeur de codeÉditeur de code Gestion des objets métierGestion des objets métier
Xion: besoins
Description d’opérations à effet de bordDescription d’opérations à effet de bord Navigation dans le modèle métierNavigation dans le modèle métier Traduisible en PHP, JSP, ServletTraduisible en PHP, JSP, Servlet
Rien n’y répond ! (C++, Java, SDL, OCL,…)
Solution adoptée:Solution adoptée:
« mélanger » Java et OCL« mélanger » Java et OCL
Xion: réalisation
AnalyseLexicale
AnalyseSyntaxique
AnalyseSémantiqueXion Tokens Arbre 1
GénérationIntermédiaire
Arbr
e 2
GénérationAdaptative Meta-LangageScripts
Xion: contrôle des types
Rapport p.8
Xion: contrôle des types
Rapport p.9
Xion: contrôle des types
Rapport p.9
Xion: contrôle des types
Rapport p.9
Xion: contrôle des types
Rapport p.9
Xion: contrôle des types
Rapport p.9
Xion: arbre abstrait (2)
Rapport p.11
Optimisation SQL
Prenons un exemple Prenons un exemple de modèle métier:de modèle métier:
Ce qui donne les Ce qui donne les tables:tables:
personne(personne(OIDOID, nom, , nom, prenom)prenom)
mariage(mariage(OIDOID, , #mari#mari, , #femme#femme))
parents_enfants(parents_enfants(#parents#parents, , #enfants#enfants))
Optimisation SQL« Personne » est traduit par une classe en langage « Personne » est traduit par une classe en langage cible:cible: classe Personneclasse Personne
attribut oid : Stringattribut oid : String fonction get_nom : Stringfonction get_nom : String retourne execute_SQL(retourne execute_SQL( ‘ ‘SELECT personne.nomSELECT personne.nom FROM personneFROM personne WHERE pesonne.OID = ‘ + oidWHERE pesonne.OID = ‘ + oid )) fin get_nomfin get_nom fonction set_nom (nom:String)fonction set_nom (nom:String) execute_SQL(execute_SQL( ‘ ‘UPDATE personneUPDATE personne SET nom = ‘ + nom + ‘SET nom = ‘ + nom + ‘ WHERE OID = ‘ + oidWHERE OID = ‘ + oid )) fin set_nom …fin set_nom …
Optimisation SQL: exemple 1
Un code Xion:Un code Xion:
Le script Le script correspondant:correspondant:
maPersonne.enfantsmaPersonne.enfants
execute_SQL(execute_SQL(
‘ ‘SELECT enfantsSELECT enfants
FROM parents_enfantsFROM parents_enfants
WHERE parents = ‘WHERE parents = ‘
+ maPersonne.oid+ maPersonne.oid
))
Optimisation SQL: exemple 2
Un code Xion:Un code Xion:
Le script Le script correspondant:correspondant:
maPersonne.enfantsmaPersonne.enfants-->collect(>collect(nomnom))
Ensemble(Personne) tmp1 = execute_SQL(Ensemble(Personne) tmp1 = execute_SQL(
‘ ‘SELECT enfantSELECT enfant
FROM parents_enfantsFROM parents_enfants
WHERE parents = ‘WHERE parents = ‘
+ maPersonne.oid+ maPersonne.oid
))
Ensemble(String) tmp2 = Ensemble videEnsemble(String) tmp2 = Ensemble vide
Enumération e = tmp1.élémentsEnumération e = tmp1.éléments
Tant que e a des éléments faireTant que e a des éléments faire
tmp2.ajoute(e.suivant.get_nom)tmp2.ajoute(e.suivant.get_nom)
Fin tant queFin tant que
Optimisation SQL: exemple 2 idéal
Un code Xion:Un code Xion:
Le code idéal:Le code idéal:
maPersonne.enfantsmaPersonne.enfants-->collect(>collect(nomnom))
execute_SQL(execute_SQL(
‘ ‘ SELECT personne.nomSELECT personne.nom
FROM personneFROM personne
WHERE personne.OID in (WHERE personne.OID in (
SELECT parent_enfant.enfantSELECT parent_enfant.enfant
FROM parent_enfantFROM parent_enfant
WHERE parent_enfant.parent = WHERE parent_enfant.parent = ‘‘
+ maPersonne.oid + ‘)’+ maPersonne.oid + ‘)’
))
Optimisation SQL: 4 casOptimisation SQL: 4 cas
Déclencheur: quand rien n’a précédemment été Déclencheur: quand rien n’a précédemment été optimiséoptimisé
Continueur: modifie l’optimisé existantContinueur: modifie l’optimisé existant Continueur d’itération: modifie l’existant dans une Continueur d’itération: modifie l’existant dans une
opération d’itération Xion comme « select » ou opération d’itération Xion comme « select » ou « sortedBy »« sortedBy »
Continueur de « collect »: modifie l’existant dans Continueur de « collect »: modifie l’existant dans un « collect »un « collect »
Basé sur les appels d’opérations prédéfinies
Déclen
cheu
r
Déclen
cheu
r
Optimisation SQL: les Optimisation SQL: les liensliens
maPersonne.mari
SELECT mariSELECT mari
FROM mariageFROM mariage
WHERE WHERE femmefemme = = <maPersonne><maPersonne>
maPersonne.mari.enfants
SELECTSELECT enfantsenfants
FROM parents_enfantsFROM parents_enfants
WHERE parents IN (WHERE parents IN (
SELECT mariSELECT mari
FROM mariageFROM mariage
WHERE femme = WHERE femme =
<maPersonne>)<maPersonne>)
Contin
ueur
Contin
ueurmari
maPersonne
enfants
mari
maPersonne
Déclen
cheu
r
Déclen
cheu
r
Optimisation SQL: les Optimisation SQL: les liensliens
maPersonne.enfants
SELECT enfantsSELECT enfants
FROM parents_enfantsFROM parents_enfants
WHERE WHERE parentsparents = = <maPersonne><maPersonne>
maPersonne.enfants-> select(mari == autrePersonne)
SELECTSELECT enfants enfants
FROM parents_enfantsFROM parents_enfants, , mariagemariage
WHERE parents = WHERE parents = <maPersonne><maPersonne>
AND enfants = femmeAND enfants = femme
AND mari = <autrePersonne>AND mari = <autrePersonne>
Contin
ueur d
’itér
ation
Contin
ueur d
’itér
ationenfants
maPersonne
select
enfant
maPersonne autrePersonnemari
==
Optimisation SQL: Optimisation SQL: OptimizerOptimizer
Rapport p.16
Optimisation SQL: Optimisation SQL: AnalyzerAnalyzer
Rapport p.16
Optimisation SQL: Optimisation SQL: OptimizingElementOptimizingElement
Rapport p.16
Optimisation SQL: Optimisation SQL: ContinueursContinueurs
Rapport p.16
Optimisation SQL: Optimisation SQL: ItérateursItérateurs
Rapport p.16
Éditeur de codeÉditeur de code
Fonctionnalités classiquesFonctionnalités classiques Coloration syntaxiqueColoration syntaxique Complétion sémantiqueComplétion sémantique
Netsilon est innovant
=> Difficile à appréhender
Coloration syntaxiqueColoration syntaxique
Rapport p.21
Complétion sémantiqueComplétion sémantiqueListe les champs accessibles d’un objet
Réutilisation des premières couches du compilateur
Mise en forme du texte transmis au compilateur
Integer i = 0;
this.setAttribute(i.max(21).
Devient
Integer i = 0;
i.max(21);
mesPersonnes->select (i:
i.mari.
Devient
Personne i;
i.mari;
Gestion des objets métier
Pour nourrir la base de données d’objets
ConclusionConclusion
Xion est incontournable pour modéliser une application web avec Netsilon.
Pas de langage d’action… Pourquoi pas Xion ?
Xion, a l’instar des autres langages, ne résout pas tous les problèmes: besoin d’extension au langage par profilage.