Plan Introduction La Programmation Orientée Aspect Utilisation de la POA dans le framework LargOnline Conclusion 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
La Programmation Orientée Aspect Utilisation de la POA dans le framework LargOnline Conclusion Plan 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Système Read Out Driver Electronique Frontale Archivage des données Filtrage des événements Construction des événements Système Read Out Buffer Détecteurs LEVEL 1 LEVEL 2 Pipeline Derandomizer 100 GOctets/s ~ GOctets/s ~ 100 MOctets/s 40 MHz 100 kHz ~ kHz 100 Hz Détecteur interne Calorimètres Détecteur à muon ~ 150 PCs ~ 100 PCs ~ 1600 PCs ~ 30 PCs Système en ligne ATLAS Architecture 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Système Read Out Driver Electronique Frontale Archivage des données Filtrage des événements Construction des événements Système Read Out Buffer Détecteurs LEVEL 1 LEVEL 2 Pipeline Derandomizer 100 GOctets/s ~ GOctets/s ~ 100 MOctets/s 40 MHz 100 kHz ~ kHz 100 Hz Détecteur interne Calorimètres Détecteur à muon ~ 150 PCs ~ 100 PCs ~ 1600 PCs ~ 30 PCs Système en ligne ATLAS Architecture 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Contrôleur de châssis ROD Synoptique Contrôleur de châssis ROD Configuration Plugins Module Composants de base Synchronisation Thread Aspect Traçage Monitoring VME Message IGUI Base de donnees Contrôle d’ exécution IPC/CORBA Traçage 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Framework LargOnline 1 ere version en 2002 Language C++ Redesign en 2004 Thread (groupe/hiérarchie) Backtrace (gdb) Plugin (Chargement dynamique de classes) Design Pattern Observer Command State Singleton Parseur d’expression (Arbre binaire d’expression type évaluateur posfix) Réflexion (RTTI + macros) Auto-instrumentation avec pré/post insertion dynamique dans certaines méthodes (DAQ interface) 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Introduction Utilisation de la POA dans le framework LargOnline Conclusion Plan 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Dispersion de code (scattering code) Entrelacement de code (tangling code) Dégradation Lisibilité Compréhension Évolution Les limites de la POO Symptomes 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Dispersion de code Exemple du serveur WEB Tomcat Appels centralisés: bonne modularité Appels non centralisés: mauvaise modularité XML parsing Loggin 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
1996 Projet du Xerox Alto Research Center Gregor Kiczales et son équipe La POA Origine 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
La POA Principe 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Éviter la dispersion Le module n’invoque plus les services Les services se greffent sur le module Sans IoC X Y Avec IoC X Y > I La POA Inversion des dépendances (IoC) 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Traçage Persistance (SGBD, File system) Intégrité de la transaction Identification/Authentification Cohérence des données Sécurité Intégrité Load-balancing etc. La POA Aspects techniques 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Un tisseur d'aspects (aspect weaver) permet d'injecter le code nécessaire à l’insertion des aspects, à l'intérieur du code formant la base de l'application. Par intercepteurs (.NET, JBoss) Tissage statique (static weaving) : à la compilation de l’application Tissage dynamique (dynamic weaving) : à l’exécution du programme La POA Tisseur d’aspects 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
La POA Tisseur d’aspects Java : AspectJ AspectJ (statique) JAC JAC (dynamique) AspectWerkz AspectWerkz (statique/dynamique) C++ : AspectC++AspectC++ (statique).NET (C#, VB.NET...) : AspectDNGAspectDNG (statique) PostSharp PostSharp (statique) PHP : phpAspect phpAspect (statique) C : AspectC AspectC (statique) Caml : Aspectual Caml Aspectual Caml (statique) Python : Aspects Aspects (statique) Common Lisp : AspectL AspectL (statique) 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
La POA Terminologie Point de jonction, d’exécution (join point) «Est un endroit spécifique, dans le flot d'exécution du système.» Coupe ou point de coupure (pointcut) «Désigne un ensemble de points de jonction sur lequel le tisseur d'aspect insérera les greffons.» Expression de coupe «Est utilisée dans le but de définir une coupe. Elles définissent l'emplacement où le greffon est censé affecter le programme.» Greffon (code advice) «Est un bout de programme qui sera activé (avant et/ou après) lors de l'exécution d'un point de jonction défini par une coupe.» Aspect «Est un module définissant des coupes et des greffons.» 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY V Y WX Z
Introduction La Programmation Orientée Aspect Conclusion Plan 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Tisseur d’aspects dynamique Tissage et dé-tissage à exécution Ordonnancement d’aspects Introspection de points de jonction LArg Online Aspect Caractéristiques 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
LArg Online Aspect Caractéristiques 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY Points de jonctions connus Insertion du tisseur lors de la phase de développement
> LArg Online Aspect Diagramme de classes 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
LArg Online Aspect Diagramme de séquence 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
LArg Online Aspect Synoptique du tisseur dynamique 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
// DAQ include #include // LargOnline include #include #ifndef __PROF_H__ #define __PROF_H__ //////////////////////////////////////////////////////////////////////// // Calculates the amount of time spent in routine //////////////////////////////////////////////////////////////////////// class Prof: public Larg::aop::Aspect, public OnlineObject { public: // Ctor explicit Prof (const std::string& name); // Dtor virtual ~Prof (); virtual bool AdviceBefore (const Larg::aop::OnlineJoinPoint* tjp); virtual bool AdviceAfter (const Larg::aop::OnlineJoinPoint* tjp); private: OWLTimer myTimer; }; #endif // __PROF_H__ // DAQ include #include // LargOnline include #include #ifndef __PROF_H__ #define __PROF_H__ //////////////////////////////////////////////////////////////////////// // Calculates the amount of time spent in routine //////////////////////////////////////////////////////////////////////// class Prof: public Larg::aop::Aspect, public OnlineObject { public: // Ctor explicit Prof (const std::string& name); // Dtor virtual ~Prof (); virtual bool AdviceBefore (const Larg::aop::OnlineJoinPoint* tjp); virtual bool AdviceAfter (const Larg::aop::OnlineJoinPoint* tjp); private: OWLTimer myTimer; }; #endif // __PROF_H__ 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY LArg Online Aspect Exemple
LArg Online Aspect Plugin 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
before after around order ( ) Modificateurs % …::% (…) % …:: (…) % ::% (…) % :: (…) % ::% …::% (…) % :: ::% (…) % :: :: (…) Patterns class ( ) derived ( ) object ( ) Types || && ! Opérateurs logiques LArg Online Aspect Syntaxe des expressions de coupe 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY after class (% …::% (…)) before class (%…::Init (…)) around derived (% Larg::%…::% (…)) before object (ROD_01) && object (ROD_14) order (1) after class (% …::% (…)) before class (%…::Init (…)) around derived (% Larg::%…::% (…)) before object (ROD_01) && object (ROD_14) order (1)
Introduction La Programmation Orientée Aspect Utilisation de la POA dans le framework LargOnline Plan 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAY
Conclusion La Programmation Orientée Aspect est complémentaire à la Programmation Orientée Objet Plusieurs types d’aspects écrits et utilisés (debugging, profiling, point de rendez-vous et adaptateur) Dans l’ avenir peut-être mixer tissage statique (AspectC++) et dynamique. On commence à voir (sphère académique) appliquer la POA à des niveaux supérieurs (composants, ADL) 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAYFatih Bellachia
01/06/201629
Un objet client ne peut être supprimé s’il n’a pas honoré toutes ses commandes. Cas Ni l'objet commande, ni l'objet client ne peuvent effectuer cette opération car ce n'est pas de leur responsabilité. Il ne serait pas logique de demander à une commande de supprimer un client, ni à un client de vérifier qu'une commande est en cours (un objet client ne doit pas contenir de commandes si nous voulons garder la logique objet du programme). Problème Fonctionnalités transverses Exemple de contrainte d’intégrité référentielle 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAYFatih Bellachia
Identifier les préoccupations métier (classes) et techniques (aspects) Implémenter chaque préoccupation séparément Tisser les différentes préoccupations La POA Étapes d’un développement POA 1 er octobre èmes Journées Informatique IN2P3-IRFU - OBERNAYFatih Bellachia