José R. Beuret. Juin 2008. Bern University of Applied Sciences Engineering and Information Technology. Reflection en Java. Principe de la reflection



Documents pareils
TP1 : Initiation à Java et Eclipse

Création d un service web avec NetBeans 5.5 et SJAS 9

Initiation à JAVA et à la programmation objet.

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Java c est quoi? Java pourquoi?

Cours 1: Java et les objets

Programmation Orientée Objet

Programmer en JAVA. par Tama

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

Apprendre Java en 154 minutes

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

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

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

TD/TP PAC - Programmation n 3

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP1 : Initiation à Java et Eclipse

Programmation Objet Java Correction

Chapitre VI- La validation de la composition.

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

Chapitre I Notions de base et outils de travail

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

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

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

TD/TP PAC - Programmation n 3

Package Java.util Classe générique

et de suivi de la corpulence des enfants

F. Barthélemy. 17 mai 2005

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Machines Virtuelles. et bazard autour. Rémi Forax

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

Une introduction à Java

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Derrière toi Une machine virtuelle!

Machine virtuelle Java pour Palm TX

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

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

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

EXA1415 : Annotations

Programmation par les Objets en Java

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

Asterisk QuickRecord. ANTOINE MANSUY IUT DE COLMAR

Java - la plateforme

as Architecture des Systèmes d Information

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

Bases Java - Eclipse / Netbeans

Tp 1 correction. Structures de données (IF2)

Auto-évaluation Programmation en Java

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

Programmation Par Objets

Développement Logiciel

Projet de développement

Java Licence Professionnelle CISII,

Java 7 Les fondamentaux du langage Java

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

Utiliser Java sans BlueJ

INITIATION AU LANGAGE JAVA

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

Java DataBaseConnectivity

Programmation Orientée Objet

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

La technologie Java Card TM

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Création d objet imbriqué sous PowerShell.

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Langage Java. Classe de première SI

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

Introduction à Java. Philippe Genoud.

Arbres binaires de recherche

Threads. Threads. USTL routier 1

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

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

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

Fichiers d'archives java - *.jar

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

CIE303 - Programmation Orientée Objet en Java

Les frameworks au coeur des applications web

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

Alfstore workflow framework Spécification technique

Programmation Orientée Objet application au langage Java Version Novembre 2007

Web Tier : déploiement de servlets

Clear2Pay Belgium SA Solution B-web V4 Procédure d installation. Solution B-web V4. Procédure d installation. Clear2Pay Belgium SA Page 1 de 18

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

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

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Guide de Tarification. Introduction Licence FD Entreprise Forfaits clé en main SaaS SaaS Dédié SaaS Partagé. Page 2 Page 3 Page 4 Page 5 Page 8

RMI le langage Java XII-1 JMF

Introduction à ElasticSearch

Projet de programmation (IK3) : TP n 1 Correction

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

La base de données XML exist. A. Belaïd

Programmeur Java 1.4 et 5.0

Programmation Bas Niveau

Cours Java Native Interface

Transcription:

Bern University of Applied Sciences Engineering and Information Technology Reflection en Java José R. Beuret Juin 2008

est : un concept qui est présent dans Java, C#, Perl, etc... un moyen de récolter de l information à propos d un objet, en particulier sa structure interne. un moyen de créer un objet dynamiquement (sans appeler explicitement un constructeur).

Pour chaque instance de programme Java, la JVM génére deux espaces mémoires : Heap : Espace mémoire pour stocker les objets. Permanent : Espace mémoire pour stocker le code byte Java, c est à dire les classes. Ces deux espaces mémoires peuvent être représentés ainsi : Eden { }} { Tenured { }} { } {{ } Heap } {{ } Permanent

Visualisation 1/2 Visualisation 2/2 Nous souhaitons créer un objet de type T. Si aucun objet de ce type n a été créé, alors les étapes suivantes se réalisent : La JVM charge le code byte de la class T dans l espace Permanent Un unique objet de type Class représentant la classe T est crée. Cet objet est placé dans le Permanent La référence de l objet de type Class est mise dans le code byte de la classe. L objet de type T est enfin créé, cet objet possède une référence sur l unique objet représentant de la classe T.

Visualisation 1/2 Visualisation 2/2 S il existe l unique objet de type Class représentant le type T, en d autres termes un objet de type T a déjà été créé, alors les étapes suivantes se réalisent : L objet de type T est créé. Cet objet possède une référence sur l unique objet représentant sa classe T.

Visualisation 1/2 Visualisation 1/2 Visualisation 2/2 String Joe = new String() ; Heap { }} { Permanent { }} {

Visualisation 1/2 Visualisation 1/2 Visualisation 2/2 String Joe = new String() ; Classe String {}}{

Visualisation 1/2 Visualisation 1/2 Visualisation 2/2 String Joe = new String() ; Instance de type Class {}}{

Visualisation 1/2 Visualisation 1/2 Visualisation 2/2 String Joe = new String() ; Objet Joe {}}{

Visualisation 2/2 Visualisation 1/2 Visualisation 2/2 String Jane = new String() ; Objet Joe {}}{

Visualisation 2/2 Visualisation 1/2 Visualisation 2/2 String Jane = new String() ; Objet Jane {}}{

Utiliser le Utiliser le Utiliser le L abréviation signifie Runtime Type Identification. Le est un outils pour permettre l identification d un type dynamiquement. Le en Java est effectué en utilisant l unique objet représenant de la classe.

Utiliser le Utiliser le Utiliser le Utiliser le Il est possible d accéder à l unique représentant d une classe par l attribut static class de cette classe. Class c1 = String.class ; Class c2 = String[].class ; Class c3 = Object.class ; Class c4 = Class.class ; Class c5 = JFrame.class ;

Utiliser le Utiliser le Utiliser le Utiliser le Il est aussi possible d accéder à l unique représentant d une classe via une instance de ce type en appelant la méthode getclass(). Class c1 = new String().getClass() ; Class c2 = new String[6].getClass() ; Class c3 = new Object().getClass() ; Class c4 = new Object().getClass().getClass() ; Class c5 = new JFrame().getClass() ;

Utiliser le Utiliser le Utiliser le Utiliser le Il est aussi possible d accéder à l unique représentant d une classe via une méthode static appelé forname(string) de la classe Class. Class c1 = Class.forName( java.lang.string ) ; Class c2 = Class.forName( [Ljava.lang.String ; ) ; Class c3 = Class.forName( java.lang.object ) ; Class c4 = Class.forName( java.lang.class ) ; Class c5 = Class.forName( javax.swing.jframe ) ;

Reflection Informations Informations Informations Sécurité Sécurité est appurue avec Java 1.1. Sun Microsystems a choisi d utiliser son comme point d ancrage.

Informations contenues Informations Informations Informations Sécurité Sécurité Les informations obtenues par la sont les suivantes : Les attributs Les constructeurs Les méthodes La superclasse Les interfaces implémentées Il est donc possible d obtenir toutes les informations par récurrence.

Informations contenues Informations Informations Informations Sécurité Sécurité Il est possible de récupérer un array de tout les attributs public de la classe ainsi que ceux hérités. Field[] getfields() Il est également permis de récupérer l attribut dont le nom est spécifié en paramètre. L attribut ne doit pas forcément être public. Field getfield(string nom) Il y a une méthode pour récupérer uniquement les attributs présent dans la classe elle-même. Avec cette méthode, les attributs renvoyés ne sont pas forcément public. Field[] getdeclaredfields()

Informations contenues Informations Informations Informations Sécurité Sécurité La méthode pour récupérer la superclasse est : Class getsuperclass() La méthode pour récupérer les interfaces est : Class[] getinterfaces()

Informations Informations Informations Sécurité Sécurité Une fois obtenu un objet de type Field, il est possible d accéder au contenu de cet attribut par la méthode get(object) de modifier le contenu de cet attribut par la méthode set(object, Object)

Informations Informations Informations Sécurité Sécurité c l a s s Personne { p u b l i c S t r i n g nom ; } p u b l i c Personne ( S t r i n g nom) { t h i s. nom = nom ; } p u b l i c c l a s s R e f l e c t i o n { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Personne p = new Personne ( Jean ) ; C l a s s p C l a s s = p. g e t C l a s s ( ) ; F i e l d p F i e l d = p C l a s s. g e t F i e l d ( nom ) ; O b j e c t hack = p F i e l d. g e t ( p ) ; p F i e l d. s e t ( p, Hacker + ( S t r i n g ) hack ) ; } } System. out. p r i n t l n ( p. nom ) ;

Informations Informations Informations Sécurité Sécurité Une fois obtenu un objet de type Method, il est possible d invoquer la méthode par invoke(object, Object[]). Si la méthode est static le premier argument peut être null.

Informations Informations Informations Sécurité Sécurité Une fois obtenu un objet de type Constructor, il est possible de créer une instance sans connaitre son type par la méthode newinstance(object[]). Afin de pouvoir déterminer le type d une instance dynamiquement, une instance de type Class dispose d une méthode isinstance(object).

Sécurité Informations Informations Informations Sécurité Sécurité ne tient pas compte des modificateurs d accessibilité (private, protected, public ou package). Il est donc possible d accéder à des éléments privés (constructeur, méthode ou attribut) Java propose des gestionnaires de sécurité qui fournissent des droits.

Informations Informations Informations Sécurité Sécurité c l a s s Personne { p r i v a t e S t r i n g nom ; // } p u b l i c Personne ( S t r i n g nom) { t h i s. nom = nom ; } p u b l i c c l a s s R e f l e c t i o n { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Personne p = new Personne ( Jean ) ; C l a s s p C l a s s = p. g e t C l a s s ( ) ; F i e l d p F i e l d = p C l a s s. g e t F i e l d ( nom ) ; p F i e l d. s e t A c c e s s i b l e ( t r u e ) ; // O b j e c t hack = p F i e l d. g e t ( p ) ; p F i e l d. s e t ( p, Hacker + ( S t r i n g ) hack ) ; } } System. out. p r i n t l n ( p. nom ) ;

Sécurité Informations Informations Informations Sécurité Sécurité Nous connaissons déjà des gestionnaires de sécurité : Les applications ne peuvent pas accéder au disque dur, si elles sont lancées depuis un IDE. Les applets ne peuvent pas accéder au disque dur. Les gestionnaires possèdent des permissions, l une d entre elles étant d autoriser la.

Application théorique Notion de sous type ( sous classe) Functor (vs Interface) Application pratique Server de tâches, Cluster Application IDE Gestion dynamique

Voici les références les plus importantes : http://en.wikipedia.org/wiki/reflection_ %28computer_science%29 http://pagesperso-orange.fr/emmanuel.remy/java/ Tutoriels/TechniquesSup/reflexion.html Notes de conférence, JUGL, Karim Mazouni, Profiler dans NetBeans