LOG4430 : Architecture logicielle et conception avancée



Documents pareils
LOG4430 : Architecture logicielle et conception avancée

Programmer en JAVA. par Tama

Environnements de développement (intégrés)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Plan du cours. Historique du langage Nouveautés de Java 7

TP1 : Initiation à Java et Eclipse

ACTIVITÉ DE PROGRAMMATION

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Bases Java - Eclipse / Netbeans

Auto-évaluation Programmation en Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours 1: Java et les objets

Programmation Objet Java Correction

Messagerie asynchrone et Services Web

Chapitre I Notions de base et outils de travail

Architecture Orientée Service, JSON et API REST

Programmation Par Objets

Derrière toi Une machine virtuelle!

Annexe : La Programmation Informatique

INITIATION AU LANGAGE JAVA

Remote Method Invocation (RMI)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Remote Method Invocation Les classes implémentant Serializable

Remote Method Invocation en Java (RMI)

Oracle Fusion Middleware Concepts Guide 11g Release 1 (11.1.1) Figure 1-1 Architecture Middleware

Héritage presque multiple en Java (1/2)

PROGRAMMATION PAR OBJETS

Langage Java. Classe de première SI

Synchro et Threads Java TM

Java Licence Professionnelle CISII,

LOG4430 : Architecture et conception avancée

Initiation à JAVA et à la programmation objet.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Généralités sur le Langage Java et éléments syntaxiques.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Traitement de données

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Développement Logiciel

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Un ordonnanceur stupide

Objets et Programmation. origine des langages orientés-objet

Calcul Parallèle. Cours 5 - JAVA RMI

Intergiciel - concepts de base

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Bases de données et environnements distribués Chapitre I : Architecture logicielle technologies de developpement en environnement

RMI le langage Java XII-1 JMF

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Utiliser Java sans BlueJ

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Web Tier : déploiement de servlets

JOnAS Day 5.1. Outils de développements

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

2 Chapitre 1 Introduction

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Programmation MacOSX / ios

Patrons de Conception (Design Patterns)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Threads. Threads. USTL routier 1

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Java - la plateforme

Corrigé des exercices sur les références

Java Licence Professionnelle CISII,

Intégration de l interface graphique de Ptidej dans Eclipse

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Flux de données Lecture/Ecriture Fichiers

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Une introduction à Java

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

7 Développement d une application de MapReduce

TP1 : Initiation à Java et Eclipse

Cours en ligne Développement Java pour le web

Dis papa, c est quoi un bus logiciel réparti?

Design patterns. Design patterns - définition. Design patterns - avantages

Java 1.5 : principales nouveautés

Premiers Pas en Programmation Objet : les Classes et les Objets

1 Définition d une classe en Java

Programmation en Java IUT GEII (MC-II1) 1

Notes de cours Practical BigData

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

2. Comprendre les définitions de classes

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Transcription:

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

Plan 1. Introduction 2. Bibliothèques et cadriciels Types d interconnexions 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, à l exécution

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

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

2. Bibliothèques et cadriciels (1/16) «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++ (!!)

2. Bibliothèques et cadriciels (2/16) 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,

2. Bibliothèques et cadriciels (3/16) 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.

2. Bibliothèques et cadriciels (4/16) 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.

2. Bibliothèques et cadriciels (5/16) «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.

2. Bibliothèques et cadriciels (6/16) 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

2. Bibliothèques et cadriciels (7/16) 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

2. Bibliothèques et cadriciels (8/16) Types d interconnexions Chainage des liens (linking) Duplication de processus (fork) Protocole de communication (IPC) Sous-classage Chargement dynamique

2. Bibliothèques et cadriciels (9/16) 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.

2. Bibliothèques et cadriciels (10/16) 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 d un logiciel distinct. Duplication de processus (fork) (Dans presque n importe quel langage) Réelle duplication du processus Appel au système pour la création d un nouveau processus 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) {

2. Bibliothèques et cadriciels (11/16) Protocole de communication (IPC) (Dans presque n importe quel langage) Utilisation d appels à 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()); [http://edocs.bea.com/wls/docs70/webserv/client.html#1049007]

2. Bibliothèques et cadriciels (12/16) 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

2. Bibliothèques et cadriciels (13/16) 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 d auteur ci-dessus [ ]» «Tous les produits publicitaires doivent inclure [ ]» «Ni le nom de l auteur ni ceux des contributeurs [ ]»

2. Bibliothèques et cadriciels (14/16) 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

2. Bibliothèques et cadriciels (15/ 16) 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 L intégration de C 1 et C 2 dans S est impossible

2. Bibliothèques et cadriciels (16/ 16) Problèmes techniques «Liens» à la compilation, à l exécution Performance Maintenabilité Sécurité

3. Sous-classage (1/7) En deux mots public class OutputMonitor extends Thread { Dans les langages orientés objets, la forme la plus courante public void run() { d utilisation de «try { composant» int value = 0; public OutputMonitor( ) { this.setname(threadname); this.setpriority(thread.max_priority); byte[] bytes; char lastwrittenchar; while ((value = this.inputstream.read()) > 0) { synchronized (System.err) { synchronized (System.out) { if (value!= 13 && value!= 10) { catch (final IOException ioe) { lastwrittenchar = (char) value;

3. Sous-classage (2/7) 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»

3. Sous-classage (3/7) Exemple JUnit, un cadriciel pour écrire et exécuter des tests unitaires

3. Sous-classage (4/7) public abstract class TestCase extends Assert implements Test { Gabarit Crochets public void runbare() throws Throwable { setup(); try { runtest(); finally { teardown(); protected void setup() throws Exception { protected void teardown() throws Exception {

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

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

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

4. Chargement dynamique (1/16) 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... [http://pagesperso-orange.fr/philippe.baucour/pratiquer/dynamicload/dynamicload.html ]

4. Chargement dynamique (2/16) En deux mots Dans différents langage de programmation (Lisp, C++, Java, Smalltalk ), c est la possibilité de lier un «bout de code» au programme pendant l exécution du programme En Java, c est la possibilité de lier une classe, créer une En Java, c est la possibilité de lier une classe, créer une instance de cette classe et exécuter une de ces méthodes pendant l exécution du programme

4. Chargement dynamique (3/16) 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());

4. Chargement dynamique (4/16) Réflexion est un processus qui permet à un programme de s examiner, et éventuellement de se modifier, Inventée par: Brian Smith et Jim des Rivieres En deux mots Introspection Capacité d un programme à s observer Intercession Capacité d un programme à se modifier

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

4. Chargement dynamique (6/16) Meta-classes Une méta-méta-classes est une classe qui Une méta-méta-méta-classes est une classe qui [http://www.developper.com]

4. Chargement dynamique (7/16) Meta-classes Java permet l introspection Class mandataire (Proxy) pour approximer l intercession : 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) { [http://www.webreference.com/internet/reflection/2.html]

4. Chargement dynamique (8/16) Meta-classes Class gestionnaire d appels (InvocationHandler) [http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/invocationhandler.html]

4. Chargement dynamique (9/16) Meta-classes Smalltalk 80 permet l intercession Tout est objet Deux types d objets : 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»

4. Chargement dynamique (10/16) Meta-classes Smalltalk 80 permet l intercession Pas de méthodes «statiques» Les méthodes de classes sont définies dans la méta-classe (comme les méthodes d instance sont définies dans la classe) Idem pour les variables d instance de classe static Les variables de classes sont des variables d instances pour les classes (!) DILBER: 1989 United Feature Syndicate, Inc.

4. Chargement dynamique (11/16) 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 d instances créées en Java et en Smalltalk

4. Chargement dynamique (12/16) Protocoles de métaobjets (MOP) Règles pour changer la sémantique du langage «Interpréteur»

4. Chargement dynamique (13/16) 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

4. Chargement dynamique (14/16) MOP au chargement des classes Javassist MOP à l exécution MetaXa (MetaJava) Autre type de chargement dynamique: Programmation orientée aspects

4. Chargement dynamique (15/16) 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 qu ils soient chargées dans la machine virtuelle). Ce qui permet d'ajouter un comportement supplémentaire aux méthodes. Cependant il n est 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.

4. Chargement dynamique (16/16) Réflexion et MOPs Problèmes de sécurité Restrictions d accès suivant la visibilité des entités Problèmes de performance Eviter d en abuser, car plus lent que les accès directs Problèmes de maintenance Eviter d en abuser car ajoute de la complexité à l application