FormateurDot_2
Ecrit par admin, le mercredi 11 juin 2008 à 18:39
Ecrit par admin, le mercredi 11 juin 2008 à 18:39
Ecrit par admin, le mercredi 11 juin 2008 à 18:32
Ecrit par admin, le mercredi 11 juin 2008 à 18:24
Ecrit par admin, le mercredi 11 juin 2008 à 18:22
Ecrit par admin, le mercredi 11 juin 2008 à 18:21
Ecrit par admin, le mercredi 11 juin 2008 à 18:21
Ecrit par admin, le mercredi 11 juin 2008 à 18:09
Ecrit par admin, le mercredi 11 juin 2008 à 18:00
Ecrit par admin, le mercredi 11 juin 2008 à 10:18
Ecrit par admin, le lundi 9 juin 2008 à 11:26
Ecrit par admin, le lundi 9 juin 2008 à 11:25
Ecrit par admin, le lundi 9 juin 2008 à 11:22
Ecrit par admin, le lundi 9 juin 2008 à 11:20
Ecrit par admin, le lundi 9 juin 2008 à 11:17
Ecrit par admin, le lundi 9 juin 2008 à 11:15
Ecrit par admin, le lundi 9 juin 2008 à 11:11
Ecrit par admin, le lundi 9 juin 2008 à 11:08
Ecrit par admin, le lundi 9 juin 2008 à 10:59
package introspection.formateur;
import introspection.structure.StructureClasse;
import introspection.structure.StructureDonneeMembre;
import introspection.structure.StructureMethode;
import introspection.structure.StructureObjet;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
public class FormateurDot_2 {
private Object o = null;
private String noeudPackage = "", noeudClasse = "", noeudObjet = "",
noeudMethode = "", noeudVisibilite = "", noeudType = "",
noeudAttribut = "", noeudParametre = "";
private String lien = "", lienClasseInterface = "", lienSecondaire = "";
private ArrayList listeElement = new ArrayList();
// Constructeur par défaut
public FormateurDot_2() {
}
// Constructeur
public FormateurDot_2(Object o) {
this.o = o;
}
// Méthode qui retourne l'objet qui est à la base de l'introspection
public Object obtenirObjet() {
return this.o;
}
// Méthode qui initialise l'objet à la base de l'introspection
public void indiquerObjet(Object o) {
this.o = o;
}
// Construction du fichier.dot
public String formaterStructure() {
int indexPackage = -1, indexClasse = -1, indexObjet = -1;
int indexMethode = -1, indexVisibilite = -1, indexType = -1;
int indexAttribut = -1, indexParametere = -1;
Object tampon;
int _hashCode;
int alpha; // memoire index
int beta;
// Liste des structures d'objets
ArrayList Ecrit par admin, le dimanche 8 juin 2008 à 17:48
Voici le résultat d'une première esquisse de notre programme d'introspection. Pour sa réalisation nous avons décomposé le programme en 3 grandes parties :
- les Inspecteurs; ils nous permettent de recueillir les différentes informations sur les entités.
- les Structures; elles permettent de stocker et d'ordonner les données collectées par les Inspecteurs.
- les Formateurs; ce sont eux qui vont transcrire les Structures en un langage de description, dans notre cas ils nous permettent de générer un fichier.dot exécutable avec Graphviz.

Cliquez sur l'image pour agrandir.
Ecrit par admin, le jeudi 5 juin 2008 à 20:54
Notre choix c'est porté sur Graphviz pour la représentation des Graphs car il est simple d'utilisation et lit les fichiers.dot, format de description de Graphs que nous avons retenu.
La structure de schéma réalisé pour représenter les informations issues de la classe Reflect est la suivante :

Le fichier.dot permettant de générer ce graphe est le suivant :
digraph {
/*mise en forme du graph*/
graph [rankdir = LR];
/*mise en forme des noeuds*/
node [shape=box];
Package;
node [shape=octagon];
objet;
"donnee membre";
node [shape=parallelogram];
methode;
node [shape=ellipse, color=red];
visibilite_dm [label="visibilite"];
visibilite_m [label="visibilite"];
node [shape=ellipse, color=blue];
mot_clef_modifieur_dm [label="mot clef\nmodifieur"];
mot_clef_modifieur_m [label="mot clef\nmodifieur"];
node [shape=polygon,sides=5, color=orange];
Type;
"Type de retour";
node [color=black];
Classe;
SuperClasse;
Interface;
node [shape=polygon,sides=5];
parametre;
/*mise en forme des liens*/
objet -> Classe;
Classe -> SuperClasse;
Classe -> Package;
edge[style=dotted];
Classe -> Interface;
edge[style=filled];
objet -> "donnee membre";
"donnee membre" -> visibilite_dm;
"donnee membre" -> mot_clef_modifieur_dm;
"donnee membre" -> Type;
objet -> methode;
methode -> visibilite_m;
methode -> mot_clef_modifieur_m;
methode -> "Type de retour";
methode -> parametre;
/*alignement*/
{ rank = same; Package; objet;}
}
Ecrit par admin, le mercredi 4 juin 2008 à 19:53
Pour pouvoir exploiter les informations que nous retourne la classe Reflect, nous avons choisi de les visualiser sous forme de Graph.
Nous avons commencé par la recherche de programme de visualisation de Graph :
- Graphviz (http://www.graphviz.org)
- Prefuse (http://prefuse.org)
- Walrus (http://www.caida.org/tools/visualization/walrus/)
et nous analysons actuellement leur différents modes d'utilisations :
- langage de description de Graph supporté
- possibilité de manipulation en lignes de commandes
- affichage 2D, 3D
- ...
Nous avons également recherché comment exécuter un programme « *.exe » à partir d'un programme en Java. Le code que nous avons écrit pour réussir cette action est le suivant :
import java.io.InputStream;
public class Executable
// passage par argument de la commande à lancer
public Executable(String command){
StartCommand(command);
}
public void StartCommand(String command) {
try {
// creation du processus
Process p = Runtime.getRuntime().exec(command);
InputStream in = p.getInputStream();
// on récupère le flux de sortie du programme
StringBuilder build = new StringBuilder();
char c = (char) in.read();
while (c != (char) -1) {
build.append(c);
c = (char) in.read();
}
String response = build.toString();
// on l'affiche
System.out.println(response);
} catch (Exception e) {
System.out.println("\n" + command + ": commande inconnue ");
}
}
}
Ecrit par admin, le mercredi 4 juin 2008 à 17:04
// Le type de retour
public String returnType(Method m) {
return m.getReturnType().toString();
}
// La liste des types en paramètre
public Class>[] TypeParameter(Method m) {
return m.getParameterTypes();
}
// La visibilité
public String visibilite(Method m) {
String met = m.toString();
String visi = "";
StringTokenizer st = new StringTokenizer(met, " ");
while (st.hasMoreTokens()) {
String next = st.nextToken();
if (next.equals("public"))
visi = "public";
if (next.equals("protected"))
visi = "protected";
if (next.equals("private"))
visi = "private";
}
return visi;
}
// Les attributs
public String attribute(Method m) {
String meth = m.toString();
String att = "";
String next = "";
StringTokenizer st = new StringTokenizer(meth, " ()");
while (st.hasMoreTokens()) {
next = st.nextToken();
if (next.equals("static")) {
att += "static ";
}
if (next.equals("final")) {
att += "final ";
}
}
return att;
}
// Le nom de la méthode
public String nameMethod(Method m){
return m.getName();
}
Ecrit par admin, le lundi 2 juin 2008 à 16:51
package afficheur;
import java.io.IOException;
import java.lang.reflect.*;
public class InspecteurClasse {
private Class cl;
private static Method[] m = null;
private static Field[] f = null;
// Constructeur
public InspecteurClasse(Class cl){
this.cl=cl;
}
// Java permet de récupérer le nom complet d'une classe
public String getName(){
return this.cl.getName();
}
// Java permet de récupérer la liste des méthodes
contenues dans une classe
public Method[] getMethod(){
return this.cl.getDeclaredMethods();
}
// Java permet de récupérer la liste des objets
contenues dans une classe
public Field[] getField(){
return this.cl.getDeclaredFields();
}
}
Ecrit par admin, le dimanche 1 juin 2008 à 23:52
Ecrit par admin, le dimanche 1 juin 2008 à 23:31
Qu’est ce que l’introspection ?
L’introspection permet d’examiner, voir de modifier, les structures de haut niveau (les objets, les classes, etc.). Un programme examine alors son propre état.
L’introspection n’est possible que si le langage est dit réflexif. Un langage est réflexif quand son architecture est implémentée par un concept de méta-objet. Ce concept permet de représenter des éléments de programme orientés objet (Classes, objets, méthodes, etc.). La réflexivité permet ainsi de concevoir des codes plus génériques puisque les entités ne sont plus manipulées nominativement, grâce à cela la compilation ne fige plus le devenir de l'application et rend la programmation plus souple.
Les langages dits réflexifs sont les suivants :
- SmallTalk
- CLOS
- Python
- Ruby
- Java©
- Objective-C
- PHP, depuis la version 5
- Les langages qui fonctionnent avec l'architecture .NET (comme le C#)
Nous nous intéressons plus spécifiquement à l’introspection avec le langage orienté objet Java©.
L’introspection en Java© :
L’introspection en Java© donne la possibilité de découvrir dynamiquement les propriétés des classes et des objets. Java© donne des outils pour l’introspection, notamment pour les classes avec le package java.lang.reflect
© Java est la propriété de Sun Microsystems : http://fr.sun.com/
Ecrit par admin, le lundi 19 mai 2008 à 19:02
Ecrit par admin, le dimanche 6 avril 2008 à 15:03
Née le 24 avril 1986 à Mulhouse.
Formation
Rentée scolaire 2007 : 1° Année en filière Informatique & Réseaux à l'ENSISA MULHOUSE (68)
Années 2004-2007: Classe Préparatoire aux Grandes Ecoles section Mathématiques-Physique au Lycée Schweitzer à MULHOUSE (68)
Année 2004 : Baccalauréat S (SVT) option Physique-Chimie, mention Assez Bien au Lycée Lambert à MULHOUSE (68)
Langues : Notion d’Allemand et d’Anglais. Portugais lu, écrit et parler couramment.
Expérience professionnelle
22/12/06-02/01/07 : Auchan Mulhouse :
05/04/07-07/04/07 : conseiller de vente à la poissonnerie
Loisir
Karaté : ceinture verte
Club ENSISA M'BOT : participation à la Coupe de France de Robotique
Musique : clarinettiste
Ecrit par admin, le lundi 31 mars 2008 à 19:34
Ecrit par admin, le lundi 31 mars 2008 à 08:18
Delvaux Yves né le 10 novembre 1986 à Toulouse
Cursus scolaire :
1992 – 1996 : Ecole primaire Notre Dame des Anges (Toulouse)
1996 – 2002 : Collège Saint Joseph (Toulouse)
2002 – 2003 : Seconde général et technologique au lycée Saint Joseph (Toulouse)
2003 – 2005 : Première et Terminale Science et Technique Industrielle option génie électronique au lycée Saint Joseph (Rodez)
2005 – 2007 : Classe préparatoire aux grandes écoles Technique des Sciences de l’Ingénieur au lycée Louis Vincent (Metz)
Depuis 2007 : Ecole Nationale Supérieur d’Ingénieur de Sud Alsace option Informatique et Réseau (Mulhouse)
Diplômes scolaires obtenus
2002 : Brevet des collèges
2005 : Bac Science et Technologie Industrielle option génie électronique mention Très Bien
Savoir faire :
Programmation en Java et C#
Notion dans les langages objets
Hobbys
Pratique de l’escrime
Chef scout
Club café théâtre