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.