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

Derrière toi Une machine virtuelle!

Programmation Par Objets

Auto-évaluation Programmation en Java

TP1 : Initiation à Java et Eclipse

Synchro et Threads Java TM

Programmation Objet Java Correction

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

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

PROGRAMMATION PAR OBJETS

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

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

Java Licence Professionnelle CISII,

Cours 1: Java et les objets

INITIATION AU LANGAGE JAVA

Remote Method Invocation Les classes implémentant Serializable

Bases Java - Eclipse / Netbeans

Développement Logiciel

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

Remote Method Invocation en Java (RMI)

Corrigé des exercices sur les références

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

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

Un ordonnanceur stupide

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

ACTIVITÉ DE PROGRAMMATION

Remote Method Invocation (RMI)

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

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

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

Calcul Parallèle. Cours 5 - JAVA RMI

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

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

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

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

TP1 : Initiation à Java et Eclipse

Java 1.5 : principales nouveautés

Architecture Orientée Service, JSON et API REST

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

Traitement de données

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

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

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

Initiation à JAVA et à la programmation objet.

Chapitre I Notions de base et outils de travail

Une introduction à Java

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

Programmation MacOSX / ios

Langage Java. Classe de première SI

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

Premiers Pas en Programmation Objet : les Classes et les Objets

1 Définition d une classe en Java

Gestion distribuée (par sockets) de banque en Java

Threads. Threads. USTL routier 1

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Projet de programmation (IK3) : TP n 1 Correction

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

7 Développement d une application de MapReduce

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

Java - la plateforme

RMI le langage Java XII-1 JMF

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

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

as Architecture des Systèmes d Information

Flux de données Lecture/Ecriture Fichiers

LOG4430 : Architecture et conception avancée

Utiliser Java sans BlueJ

Programmation avec des objets : Cours 7. Menu du jour

Package Java.util Classe générique

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Programmation en Java IUT GEII (MC-II1) 1

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

La JVM. La machine virtuelle Java. La JVM. La JVM

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

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

Exercices sur les interfaces

Intégration de l interface graphique de Ptidej dans Eclipse

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

2. Comprendre les définitions de classes

Java Licence Professionnelle CISII,

Introduction : les processus. Introduction : les threads. Plan

Introduction au langage Java

TD2 Programmation concurrentielle

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

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

Composants Logiciels. Le modèle de composant de CORBA. Plan

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Machines Virtuelles. et bazard autour. Rémi Forax

Classes et Objets en Ocaml.

Analyse,, Conception Objet

TP1. Outils Java Eléments de correction

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Patrons de Conception (Design Patterns)

Transcription:

LOG4430 : Architecture logicielle et conception avancée Yann-Gaël Guéhéneuc Cours 3 Bibliothèques et chargement Dynamique de composants Département de génie informatique et de génie logiciel École Polytechnique de Montréal Guéhéneuc, 2011

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 2/35

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 3/35

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

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] Exemples La bibliothèque de classes Java (!) La STL de C++ (!!) 5/35

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] Exemples La STL de C++ JUnit Eclipse Equinox OSGi 6/35

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

Bibliothèques et cadriciels Chainage des liens (linking) (A contraster avec les langages avec machine virtuelle) Typiquement en C/C++ Plusieurs fichiers.o, un seul fichier «.exe» 8/35

Bibliothèques et cadriciels 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) { 9/35

Bibliothèques et cadriciels 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] 10/35

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 11/35

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 d auteur ci-dessus [ ]» «Tous les produits publicitaires doivent inclure [ ]» «Ni le nom de l auteur ni ceux des contributeurs [ ]» 12/35

Bibliothèques et cadriciels Problèmes légaux Soit un program S compose de deux composants C 1 et C 2 S, C 1 et C 2 ont chacune une licence Ces licences ne sont compatibles que si leurs droits sont compatibles 13/35

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 L intégration de C 1 et C 2 dans S est impossible 14/35

Bibliothèques et cadriciels Problèmes techniques «Liens» à la compilation, à l exécution Performance Maintenabilité Sécurité 15/35

Sous-classage En deux mots Dans les langages orientés objets, la forme la plus courante d utilisation 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) { 16/35

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» 17/35

Sous-classage Exemple JUnit, un cadriciel pour écrire et exécuter des tests unitaires 18/35

Sous-classage 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 { 19/35

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

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

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

Chargement dynamique 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 instance de cette classe et exécuter une de ces méthodes pendant l exécution du programme 23/35

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()); 24/35

Chargement dynamique En deux mots Introspection Capacité d un programme à s observer Intercession Capacité d un programme à se modifier 25/35

Chargement dynamique Meta-classes La classe «Class» est la classe dont les instances sont des classes Aristote (Ἀριστοτέλης) *-384-322 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 26/35

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 [http://www.developper.com] 27/35

Chargement dynamique 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] 28/35

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

Chargement dynamique Meta-classes Smalltalk 80 permet l intercession Tout est objet Deux types d objets : ceux qui peuvent avoir des instances et ce 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» 30/35

Chargement dynamique Meta-classes Smalltalk 80 permet l intercession Pas de méthodes «statiques» Les méthodes de classes sont définies dans la métaclasse (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. 31/35

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 d instances créées en Java et en Smalltalk 32/35

Chargement dynamique Protocoles de métaobjets (MOP) Règles pour changer Sémantique du langage «Interpréteur» 33/35

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 34/35

Chargement dynamique MOP au chargement des classes Javassist MOP à l exécution MetaXa (MetaJava) Programmation orientée aspects 35/35