Foutse Khomh © Guéhéneuc, 2009; Khomh, 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture.

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

Réalisation d’un Framework pour la création de jeux d'arcades
Le mécanisme des exceptions
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
LOG4430 : Architecture logicielle et conception avancée
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Groupe France Télécom Projet Cilia : collaboration LIG Adèle – Orange Labs/MAPS/MEP slide 1 Cilia, un framework de médiation ouvert, léger, multi-personnalités.
Exposé de Système - Informatique et Réseau
(Classes prédéfinies – API Java)
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
Programmer en JAVA par Tama
MIKHAYLOVA Vera Exposé Java principe de fonctionnement Lundi 17 mai 2004 DEUG 1ère année Science du langage Paris III.
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe


Design Pattern MVC En PHP5.
Servlet JAVA.
Introduction aux services WEB
Common Gateway Interface
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Etude des Technologies du Web services
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
XML-Family Web Services Description Language W.S.D.L.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Réalisée par :Samira RAHALI
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
.Net Remoting.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
Présentation Structures de Données et TDA
Gestion et levée dexception. Une exception est un message envoyé par une méthode à une autre méthode. La méthode qui la reçoit a le choix de soccuper.
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Programmation concurrente
Microsoft .NET.
PROGRAMMATION MULTI-TÂCHES (MULTITHREADING)
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
Patrons de conceptions de créations
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
‘‘Open Data base Connectivity‘‘
Annexe 1 Tests unitaires d'applications Java avec JUNIT
1 Architecture orientée service SOA Architecture orientée service SOA (Service Oriented Architecture)
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
Découverte des Framework : SPRING & JAXB
Jeu de Librairies Virtuelles « DLL » Windows pour la réalisation de programmes informatiques.
Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.
Programmation objet La base.
« Le plaisir du chercheur : retrousser les jupes de la nature » Jean Rostand Proposer une « Interface Homme Machine » en utilisant une technologie Client.
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
12/04/ Les exceptions Cours 11 Cours 11.
Entrées / Sorties.
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Les sockets.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Logiciel de surveillance de réseaux informatique
21/02/2003DEA DISIC 1 Grid Computing Programming the grid: Distributed Software Components, P2P and Grid Web Services for Scientific Applications Tarak.
Présentation de Qt Iris 1
SOAP et les RPC XML SOAP WSDL RPC. Rappels sur le XML Langage avec des balises Très lisible Pour stocker des données Séparation entre contenu et présentation.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Transcription de la présentation:

Foutse Khomh © Guéhéneuc, 2009; Khomh, 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture logicielle et conception avancée Bibliothèques et le chargement de composantes dynamiques

2/43 Plan 1. Introduction 2. Bibliothèques et cadriciels Types dinterconnexions Problèmes légaux Problèmes techniques 3. Sous-classage Crochets et gabarits Patrons de conception 4. Chargement dynamique Méta-classes Protocoles de méta-objets (MOP) MOP à la compilation, à lexécution

3/43 1. Introduction Aucun logiciel de grande taille nest développé depuis zéro aujourdhui –Sauf dans le cas de développement en « salle blanche » Utilisation de –« Bouts de code » –Structures + fonctions / Classes + méthodes –Bibliothèques

4/43 Introduction Utilisation de –« Bouts de code » –Structures + fonctions / Classes + méthodes –Bibliothèques Problèmes –Légaux –Techniques

5/43 2. Bibliothèques et cadriciels « Bibliothèque [library] logicielle est un ensemble de fonctions utilitaires, regroupées et mises à disposition afin de pouvoir être utilisées sans avoir à les réécrire » [Wikipedia] –Plutôt que de coder une procédure courante dans chaque programme en ayant besoin, on rassemble ces procédures dans des bibliothèques. –Si un programme a une fonction à remplir et que celle-ci se trouve en bibliothèque, il l'utilisera directement. –Les bibliothèques logicielles se distinguent des exécutables dans la mesure où elles ne représentent pas une application Exemples –La bibliothèque de classes Java (!) –La STL de C++ (!!)

6/43 2. Bibliothèques et cadriciels L'organisation classique des bibliothèques se fait par découpage thématique des fonctions, suivant les services qu'elles rendent: – Bibliothèques de bas niveau ou bibliothèques système : elles fournissent des services d'interface avec le système d'exploitation, avec les périphériques, ou fournissent des outils génériques : bibliothèques d'entrées/sorties : fonctions de lecture et d'écriture de fichiers, de périphériques d'entrée/sortie comme le clavier, l'écran, etc. gestion de structures de données système,

7/43 2. Bibliothèques et cadriciels –Bibliothèques de haut niveau, aussi appelées bibliothèques métier, elles interagissent avec celles de bas niveau : les fonctions qu'elles contiennent sont propres à une activité spécifique: boîtes à outils graphiques : ensemble de fonctions permettant de gérer, d'animer et d'afficher des objets graphiques complexes –Exemple : OpenGL bibliothèques d'opérateurs de traitement d'image : ensemble de fonctions destinées à structurer l'information dans une image à des fins d'analyse, gestion de structures de données utilisateur.

8/43 2. Bibliothèques et cadriciels Autres bibliothèques : –combinateurs en programmation fonctionnelle, –protocoles de méta programmation. Les bibliothèques offrent une interface de programmation (API), permettant aux programmeurs de choisir les fonctions. –Les API se présentent comme une liste des noms des fonctions ou/et classes disponibles, avec une documentation sur les paramètres à leur fournir et sur les résultats retournés.

9/43 Bibliothèques et cadriciels « Un cadriciel [framework] est un espace de travail modulaire. C'est un ensemble de bibliothèques, d'outils et de conventions permettant le développement de programmes. » [Wikipedia] Un framework fournit: –un ensemble de fonctions facilitant la création de tout ou d'une partie d'un système logiciel –un guide architectural en divisant le domaine visé en modules.

10/43 Bibliothèques et cadriciels Un cadriciel fournit un contexte où les composants sont ré- utilisés. Une bibliothèque est limitée à l'ensemble des fonctions du système, par contre un cadriciel peut être employé par extension pour inclure également l'architecture logicielle préconisée pour cette bibliothèque (eg. organisation en couches, utilisation du modèle MVC, etc), Exemples –La STL de C++ –JUnit –Eclipse Equinox OSGi

11/43 Bibliothèques et cadriciels On trouve différents types de cadriciels : –Cadriciel d'infrastructure système : pour développer des systèmes d'exploitation, des interfaces graphiques, des outils de communication. Exemple : Framework.Net, Eclipse, NetBeans, Struts –Cadriciel d'intégration intergicielle (middleware) : pour fédérer des applications hétérogènes. Pour mettre à dispositions différentes technologies sous la forme d'une interface unique. Exemple : Ampoliros avec ses interfaces RPC, SOAP, XML –Cadriciel d'entreprise : pour développer des applications spécifiques au secteur d'activité de l'entreprise. Exemple: MDAL –Cadriciel orientés Système de gestion de contenu Exemple: Joomla, itsEasy, WMaker

12/43 Bibliothèques et cadriciels Types dinterconnexions –Chainage des liens (linking) –Duplication de processus (fork) –Protocole de communication (IPC) –Sous-classage –Chargement dynamique

13/43 Bibliothèques et cadriciels Chainage des liens (linking) (A contraster avec les langages avec machine virtuelle) –Typiquement en C/C++ Le chainage fusionne les différents fichiers compilés et les bibliothèques pour former un exécutable Plusieurs fichiers.o, un seul fichier «.exe » –Dans les langages avec machine virtuelle (java), les classes générées par le compilateur sont chargées par la machine virtuelle (JVM) qui réalise aussi du chainage. Ce chainage tardif permet une grande flexibilité. Ce chainage tardif rend possible des mécanismes comme la réflexion, largement utilisés dans les servlets par exemple.

14/43 Bibliothèques et cadriciels Project fork consiste a: –Prendre une copie du code source d'une bibliothèque et commencer un développement indépendant sur celui-ci. –Abouti à la création dun logiciel distinct. Duplication de processus (fork) (Dans presque nimporte quel langage) –Réelle duplication du processus –Appel au système pour la création dun nouveau processus final StringBuffer commandLine = new StringBuffer(); commandLine.append("..\\DOT\\bi n\\dotty "); commandLine.append(aFilePath); final Process process = Runtime.getRuntime().exec(comma ndLine.toString()); final OutputMonitor errorStreamMonitor = new OutputMonitor( "Dotty Stream Monitor", "", process.getErrorStream(), System.out); errorStreamMonitor.start(); final OutputMonitor inputStreamMonitor = new OutputMonitor( "Dotty Input Stream Monitor", "", process.getInputStream(), System.out); inputStreamMonitor.start(); // I wait for the process to finish // in a new thread to allow multi- tasking. new Thread(new Runnable() { public void run() { try { process.waitFor(); } catch (final InterruptedException ie) { ie.printStackTrace( Output.getInstance().errorOutput()) ; } // I check if everything went alright. if (process.exitValue() != 0) { try { while (process.getErrorStream().available () > 0) { System.out.print( (char) process.getErrorStream().read()); } catch (final IOException ioe) { ioe.printStackTrace( Output.getInstance().errorOutput()) ; } }).start(); final StringBuffer commandLine = new StringBuffer(); commandLine.append("..\\DOT\\bin\\dotty "); commandLine.append(aFilePath); final Process process = Runtime.getRuntime().exec(commandLine.toString()); final OutputMonitor errorStreamMonitor = new OutputMonitor(…, process.getErrorStream(),…); errorStreamMonitor.start(); final OutputMonitor inputStreamMonitor = new OutputMonitor(…,process.getInputStream(),…); inputStreamMonitor.start(); try { process.waitFor(); } catch (final InterruptedException ie) { ie.printStackTrace( Output.getInstance().errorOutput()); } if (process.exitValue() != 0) { … }

15/43 Bibliothèques et cadriciels Protocole de communication (IPC) (Dans presque nimporte quel langage) –Utilisation dappels à des procédures distantes (RPC) –Utilisation de protocole bien définis : CORBA, COM –Engouement pour les services Web [ public void example(String wsdlURI) throws Exception { TraderServicePort trader = null; if (wsdlURI == null) { trader = new TraderServiceImpl().getTraderServicePort(); } else { trader = new TraderServiceImpl(wsdlURI).getTraderServicePort(); } String [] stocks = {"BEAS", "MSFT", "AMZN", "HWP" }; for (int i=0; i<stocks.length; i++) { int shares = (i+1) * 100; log("Buying " + shares + " shares of" + stocks[i]+"."); TradeResult result = trader.buy( stocks[i], shares); log("Result traded "+result.getNumberTraded() +" shares of "+result.getStockSymbol()); } for (int i=0; i<stocks.length; i++) { int shares = (i+1) * 100; log("Selling + shares + " shares of" + stocks[i]+"."); TradeResult result = trader.sell( stocks[i], shares); log("Result traded "+result.getNumberTraded() +" shares of "+result.getStockSymbol()); }

16/43 Bibliothèques et cadriciels Problèmes légaux [Daniel M. German and Ahmed E. Hassan ; License Integration Pattern: Dealing with Licenses Mismatches in Component-based Development ; ICSE, May 2009, ACM Press] –Licences BSD GPL Apache …

17/43 Bibliothèques et cadriciels Problèmes légaux –Une licence est un ensemble de droits –Chaque droit est un ensemble de conjonctions –Exemple Licence « BSD originale » Droit de « distribuer des produits dérivés en binaire » Conjonctions –« La redistribution […] doit reproduire la note de droit dauteur ci-dessus […] » –« Tous les produits publicitaires doivent inclure […] » –« Ni le nom de lauteur ni ceux des contributeurs […] »

18/43 Bibliothèques et cadriciels Problèmes légaux –Soit un programme S composé de deux composants C 1 et C 2 –S, C 1 et C 2 ont chacun une licence –Ces licences ne sont compatibles que si leurs droits sont compatibles

19/43 Bibliothèques et cadriciels Problèmes légaux –Exemple S est MPL 1.1 et C 1 et C 2 sont GPL 2 GPL stipule que « Tous produits dérivés de C 1 (C 2 ) doit être sous licence GPL 2 » S est MPL 1.1, et MPL 1.1 impose aussi que tout produit dérivés de S soit sous MPL1.1 ou futures MPL Lintégration de C 1 et C 2 dans S est impossible

20/43 Bibliothèques et cadriciels Problèmes techniques –« Liens » à la compilation, à lexécution –Performance –Maintenabilité –Sécurité

21/43 Sous-classage En deux mots –Dans les langages orientés objets, la forme la plus courante dutilisation de « composant » public class OutputMonitor extends Thread { … public OutputMonitor(…) { this.setName(threadName); this.setPriority(Thread.MAX_PRIORITY); … } public void run() { try { int value = 0; byte[] bytes; char lastWrittenChar; while ((value = this.inputStream.read()) > 0) { synchronized (System.err) { synchronized (System.out) { if (value != 13 && value != 10) { lastWrittenChar = (char) value; … }} } catch (final IOException ioe) { …

22/43 Sous-classage Crochets (hooks) et gabarits (templates) –Points chauds (hot spots) = crochets –Points gelés (frozen spots) = gabarits –Crochets sont des méthodes abstraites ou qui peuvent/doivent être spécialisés par le client –Gabarits sont des méthodes qui appellent des crochets et qui décrivent le « quoi »

23/43 Sous-classage Exemple –JUnit, un cadriciel pour écrire et exécuter des tests unitaires

24/43 Sous-classage Gabarit Crochets public abstract class TestCase extends Assert implements Test { public void runBare() throws Throwable { setUp(); try { runTest(); } finally { tearDown(); } protected void setUp() throws Exception { } protected void tearDown() throws Exception { } … }

25/43 Sous-classage Patrons de conception [Gamma et al.] –Usine abstraite (Abstract Factory) –Adapteur (Adapter) –Pont (Bridge) –Constructeur (Builder)

26/43 Sous-classage Patrons de conception [Gamma et al.] –Décorateur (Decorator) –Méthode usine (Factory Method) –Itérateur (Iterator) –Observateur (Observer)

27/43 Sous-classage Patrons de conception [Gamma et al.] –Méthode gabarit (Template Method) –Visiteur (Visitor)

28/43 Chargement dynamique Imaginez que vous développez une application constituée de 3 modules : acquisition, analyse, présentation. Pour une raison bien précise, vous décidez que le module Analyse sera une DLL (windows) ou un Shared object, so (UNIX) et qui devra "publier" 3 fonctions : Init, Process et Close. Pourquoi ? Tout simplement parce que vous souhaitez "ouvrir" votre application à d'autres types de traitement possible. Typiquement, vous codez une fois pour toute les modules d'acquisition et de présentation mais vous faites une documentation qui explique comment d'autres personnes peuvent développer des modules d'analyse. Pour le reste, on imagine assez bien qu'au démarrage, l'application puisse, via un fichier.ini faire l'inventaire de toutes les DLLs/ so qui se trouvent dans un certains sous-répertoire. A la fin du démarrage de l'application, tous les traitements sont listés par exemple dans un menus "Traitements" de l'application. Par la suite, l'utilisateur final choisit un traitement possible dans la liste. A ce moment, l'application charge dynamiquement la DLL/ so nécessaire, invoque la fonction de traitement en lui passant par exemple les données acquises. Le traitement s'effectue et la fonction retourne les données traitées. La DLL/ so est ensuite relâchée et de son côté, le module présentation récupère ces donnees et vit sa vie avec... [ ]

29/43 Chargement dynamique En deux mots –Dans différents langage de programmation (Lisp, C++, Java, Smalltalk…), cest la possibilité de lier un « bout de code » au programme pendant lexécution du programme –En Java, cest la possibilité de lier une classe, créer une instance de cette classe et exécuter une de ces méthodes pendant lexécution du programme

30/43 Chargement dynamique En deux mots –Exemple, classe enveloppante (wrapper) public final class WrapperMain { public static void main(String[] args) { try { Class toBeRun = Class.forName(args[0]); Method mainMethod = toBeRun.getMethod("main", new Class[] { String[].class }); final long startTime = System.currentTimeMillis(); mainMethod.invoke(null, new Object[] { new String[0] }); final long endTime = System.currentTimeMillis(); System.out.println(); System.out.println(endTime - startTime); } catch (final Exception e) { e.printStackTrace(Output.getInstance().errorOutput()); }

31/43 Chargement dynamique Réflexion est un processus qui permet à un programme de sexaminer, et éventuellement de se modifier, Inventée par: Brian Smith et Jim des Rivieres En deux mots –Introspection Capacité dun programme à sobserver –Intercession Capacité dun programme à se modifier

32/43 Chargement dynamique Meta-classes –La classe « Class » est la classe dont les instances sont des classes –La classe « Class » est en fait un méta-classe –Une méta-classes est une classe qui décrit les classes, comme une classe décrit des instances Aristote ( ριστοτέλης) *

33/43 Chargement dynamique Meta-classes –Une méta-méta-classes est une classe qui… –Une méta-méta-méta-classes est une classe qui… [

34/43 Chargement dynamique Meta-classes –Java permet lintrospection –Class mandataire (Proxy) pour approximer lintercession : interception des appels de méthodes InvocationHandler handler = new MyInvocationHandler(...); Class proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), new Class[] { Foo.class }); Foo proxy = (Foo) proxyClass.getConstructor(new Class[] { InvocationHandler.class }).newInstance(new Object[] { handler }); Assert.assertTrue(proxy instanceof Foo); try { Foo f = (Foo) proxy; … } Catch (final ClassCastException e) { … } [

35/43 Chargement dynamique Meta-classes –Class gestionnaire dappels (InvocationHandler) [

36/43 Chargement dynamique Meta-classes –Smalltalk 80 permet lintercession Tout est objet Deux types dobjets : ceux qui peuvent avoir des instances et ceux qui ne peuvent pas Chaque classes a sa propre méta-classe Les méta-classes sont toutes instances de la classe « Metaclass » Les méta-classes sont des sous-classes de « Class »

37/43 Chargement dynamique Meta-classes –Smalltalk 80 permet lintercession Pas de méthodes « statiques » Les méthodes de classes sont définies dans la méta- classe (comme les méthodes dinstance sont définies dans la classe) Idem pour les variables dinstance de classe Les variables de classes sont des variables dinstances pour les classes (!) s t atic DILBER: ©1989 United Feature Syndicate, Inc.

38/43 Chargement dynamique public class AClass { private static int ReferenceCount = 0; public AClass() { AClass.ReferenceCount++; } public static int getReferenceCount() { return AClass.ReferenceCount; } Object subclass: #ReferenceCountingClass instanceVariableNames: classVariableNames: ReferenceCount poolDictionaries: ReferenceCountingClass class>>new ReferenceCount := ReferenceCount + 1. ^self basicNew initialize Compter le nombre dinstances créées en Java et en Smalltalk

39/43 Chargement dynamique Protocoles de méta- objets (MOP) –Règles pour changer la sémantique du langage –« Interpréteur »

40/43 Chargement dynamique MOP à la compilation –OpenJava public class Hello instantiates VerboseClass { public static void main( String[] args ) { hello(); } static void hello() { System.out.println( "Hello, world." ); } import openjava.mop.*; import openjava.ptree.*; public class VerboseClass instantiates Metaclass extends OJClass { public void translateDefinition() throws MOPException { OJMethod[] methods = getDeclaredMethods(); for (int i = 0; i < methods.length; ++i) { Statement printer = makeStatement( "System.out.println( \"" + methods[i] + " is called.\" );" ); methods[i].getBody().insertElementAt( printer, 0 ); } Michiaki Tatsubori ; An Extension Mechanism for the Java Language ; Master of Engineering Dissertation, Graduate School of Engineering, University of Tsukuba, February 1999

41/43 Chargement dynamique MOP au chargement des classes –Javassist MOP à lexécution –MetaXa (MetaJava) Autre type de chargement dynamique: –Programmation orientée aspects

42/43 Chargement dynamique Réflexion vs MOPs Avec la réflexion il est possible de: – implémenter des proxy pour intercepter les appels de méthodes (voir java.lang.reflect.InvocationHandler.) –Changer la définition d'une classe (y compris ses méthodes) à l'exécution (avant quils soient chargées dans la machine virtuelle). Ce qui permet d'ajouter un comportement supplémentaire aux méthodes. –Cependant il nest pas possible de modifier les meta- classes Avec les MOPs, les meta-classes peuvent être modifiées, par exemple du comportement peut leur être ajouté sous forme de méthodes.

43/43 Chargement dynamique Réflexion et MOPs Problèmes de sécurité –Restrictions daccès suivant la visibilité des entités Problèmes de performance –Eviter den abuser, car plus lent que les accès directs Problèmes de maintenance –Eviter den abuser car ajoute de la complexité à lapplication