![Page 1: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/1.jpg)
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
![Page 2: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/2.jpg)
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
![Page 3: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/3.jpg)
Netsilon: présentation
![Page 4: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/4.jpg)
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
![Page 5: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/5.jpg)
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
![Page 6: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/6.jpg)
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
![Page 7: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/7.jpg)
Xion: réalisation
AnalyseLexicale
AnalyseSyntaxique
AnalyseSémantiqueXion Tokens Arbre 1
GénérationIntermédiaire
Arbr
e 2
GénérationAdaptative Meta-LangageScripts
![Page 8: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/8.jpg)
Xion: contrôle des types
Rapport p.8
![Page 9: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/9.jpg)
Xion: contrôle des types
Rapport p.9
![Page 10: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/10.jpg)
Xion: contrôle des types
Rapport p.9
![Page 11: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/11.jpg)
Xion: contrôle des types
Rapport p.9
![Page 12: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/12.jpg)
Xion: contrôle des types
Rapport p.9
![Page 13: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/13.jpg)
Xion: contrôle des types
Rapport p.9
![Page 14: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/14.jpg)
Xion: arbre abstrait (2)
Rapport p.11
![Page 15: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/15.jpg)
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))
![Page 16: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/16.jpg)
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 …
![Page 17: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/17.jpg)
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
))
![Page 18: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/18.jpg)
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
![Page 19: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/19.jpg)
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 + ‘)’
))
![Page 20: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/20.jpg)
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
![Page 21: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/21.jpg)
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
![Page 22: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/22.jpg)
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
==
![Page 23: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/23.jpg)
Optimisation SQL: Optimisation SQL: OptimizerOptimizer
Rapport p.16
![Page 24: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/24.jpg)
Optimisation SQL: Optimisation SQL: AnalyzerAnalyzer
Rapport p.16
![Page 25: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/25.jpg)
Optimisation SQL: Optimisation SQL: OptimizingElementOptimizingElement
Rapport p.16
![Page 26: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/26.jpg)
Optimisation SQL: Optimisation SQL: ContinueursContinueurs
Rapport p.16
![Page 27: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/27.jpg)
Optimisation SQL: Optimisation SQL: ItérateursItérateurs
Rapport p.16
![Page 28: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/28.jpg)
É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
![Page 29: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/29.jpg)
Coloration syntaxiqueColoration syntaxique
Rapport p.21
![Page 30: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/30.jpg)
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;
![Page 31: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/31.jpg)
Gestion des objets métier
Pour nourrir la base de données d’objets
![Page 32: Création d’un langage d’action pour un logiciel MDA](https://reader035.vdocuments.pub/reader035/viewer/2022070400/568135b5550346895d9d1d1e/html5/thumbnails/32.jpg)
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.