maPersonne

Transcription

maPersonne
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
Première partie (résumé):
Développement d’un
Interpréteur OCL pour une
Machine Virtuelle UML
ObjeXion Prototyping suite
Fichier
XMI
Model
Prototyper
Modèle
sous
Rational
ROSE
Application
Fichier
d’échanges
FacSimile
Formatage
Alimentation
ObjeXion
Link
Fichier de Stockage
Flux d’informations
significatives
Base de données
relationnelle (mdb)
Netsilon: présentation
Netsilon: modélisation
Navigation
Modeleur
UML
(Propriétaire)
Objets
Métier
Apparence
Graphique
(Diagrammes
de classes)
(HTML)
Éditeur
Page web
Création d’un langage
d’action pour un logiciel
MDA
Xion
„ Optimisation SQL
„ Éditeur de code
„ Gestion des objets métier
„
Xion: besoins
Description d’opérations à effet de bord
„ Navigation dans le modèle métier
„ Traduisible en PHP, JSP, Servlet
„
Rien n’y répond ! (C++, Java, SDL, OCL,…)
Solution adoptée:
« mélanger » Java et OCL
Xion: réalisation
Analyse
Tokens
Lexicale
Analyse
Arbre 1
Syntaxique
Analyse
Sémantique
Ar
br
e
2
Xion
Scripts
Génération
Adaptative
Meta-Langage
Génération
Intermédiaire
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 de
modèle métier:
Ce qui donne les tables:
personne(OID, nom,
prenom)
mariage(OID, #mari,
#femme)
parents_enfants(#parents,
#enfants)
Optimisation SQL
« Personne » est traduit par une classe en langage cible:
classe Personne
attribut oid : String
fonction get_nom : String
retourne execute_SQL(
‘SELECT personne.nom
FROM personne
WHERE pesonne.OID = ‘ + oid
)
fin get_nom
fonction set_nom (nom:String)
execute_SQL(
‘UPDATE personne
SET nom = ‘ + nom + ‘
WHERE OID = ‘ + oid
)
fin set_nom …
Optimisation SQL:
Un code Xion:
exemple 1
maPersonne.enfants
Le script correspondant: execute_SQL(
‘SELECT enfants
FROM parents_enfants
WHERE parents = ‘
+ maPersonne.oid
)
Optimisation SQL:
Un code Xion:
exemple 2
maPersonne.enfants->collect(nom)
Le script correspondant:
Ensemble(Personne) tmp1 = execute_SQL(
‘SELECT enfant
FROM parents_enfants
WHERE parents = ‘
+ maPersonne.oid
)
Ensemble(String) tmp2 = Ensemble vide
Enumération e = tmp1.éléments
Tant que e a des éléments faire
tmp2.ajoute(e.suivant.get_nom)
Fin tant que
Optimisation SQL:
Un code Xion:
exemple 2 idéal
maPersonne.enfants->collect(nom)
Le code idéal:
execute_SQL(
‘
SELECT personne.nom
FROM personne
WHERE personne.OID in (
SELECT parent_enfant.enfant
FROM parent_enfant
WHERE parent_enfant.parent =
‘
+ maPersonne.oid + ‘)’
)
Optimisation SQL: 4 cas
Basé sur les appels d’opérations
prédéfinies
„
„
„
„
Déclencheur: quand rien n’a précédemment été
optimisé
Continueur: modifie l’optimisé existant
Continueur d’itération: modifie l’existant dans une
opération d’itération Xion comme « select » ou
« sortedBy »
Continueur de « collect »: modifie l’existant dans
un « collect »
Optimisation SQL: les liens
maPersonne.mari
mari
maPersonne
maPersonne.mari.enfants
SELECT mari
FROM mariage
WHERE femme =
<maPersonne>
r
u
e
u
in
t
n
o
C
enfants
r
mari
u
e
h
c
n
e
l
c
maPersonne
é
D
SELECT
enfants
FROM parents_enfants
WHERE parents IN (
SELECT mari
FROM mariage
WHERE femme =
<maPersonne>)
Optimisation SQL: les liens
maPersonne.enfants
n
o
i
at
r
itémaPersonne.enfants->
’
d
r
u
select(mari ==
e
u
n
autrePersonne)
i
t
n
o
C
enfants
maPersonne
SELECT enfants
FROM parents_enfants
WHERE parents =
<maPersonne>
select
r
u
e
h
c
en
l
c
enfant
é
D
maPersonne
mari
==
SELECT
enfants
FROM parents_enfants,
mariage
WHERE parents =
<maPersonne>
AND enfants = femme
AND mari = <autrePersonne>
autrePersonne
Optimisation SQL: Optimizer
Rapport p.16
Optimisation SQL: Analyzer
Rapport p.16
Optimisation SQL: OptimizingElement
Rapport p.16
Optimisation SQL: Continueurs
Rapport p.16
Optimisation SQL: Itérateurs
Rapport p.16
Éditeur de code
Netsilon est innovant
=> Difficile à appréhender
Fonctionnalités classiques
„ Coloration syntaxique
„ Complétion sémantique
„
Coloration syntaxique
Rapport p.21
Complétion sémantique
Liste 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;
mesPersonnes->select (i:
i.mari.
this.setAttribute(i.max(21).
Devient
Devient
Integer i = 0;
Personne i;
i.max(21);
i.mari;
Gestion des objets métier
Pour nourrir la base de données d’objets
Conclusion
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.