TP8- Q4.2 - compréhension énoncé

Programmation Avancée

Modérateur : Douin

rousset
Messages : 50
Inscription : 30 sept. 2018 9:23

Re: TP8- Q4.2 - compréhension énoncé

Message par rousset » 02 janv. 2019 23:33

Meilleurs voeux Renaud ;)
Perso je dépends du centre de StDenis et il y a eu une erreur j'ai reçu une convocation en double censée être celle du NFP121 : c'est signalé, sauf message contraire, il suffit de venir le 29 avec sa carte d'auditeur.

Pour le tp_injection, te prends pas la tête, sauf erreur de ma part, il est plutôt simple. La page tp_injection.html peut freiner par le contenu etc mais par exemple va en question1 dans un des 3 paquetages illustrant les patrons. Tu lances le test de l'un d'eux et tu vois qu'on écrit aucun "client", les objets sont crées grâce au fichier .TXT, par l'intermédiaire du "femtoContainer" de l'enseignant : donc le plus gros est déjà fait.
Ca m'a été utile de faire les copiés/collés du modèle "MartinFowler", isoler le tout dans un paquetage et faire une classe test, comme les patrons de la question1.
Faut repérer la syntaxe du fichier .TXT (c'est celle abordée en cours/ed avec les Properties).
Dedans on un objet qui va correspondre à une classe (d'abord l'objet est crée, ensuite on indique sa classe), et à cet objet on lie en property (voir la syntaxe objet.1.property.1) le nom d'un attribut.
On lie ensuite 1 ou plusieurs paramètres à cette property (voir syntaxe objet.1.property.1.param.1), en l'occurence les "valeurs". Ces valeurs peuvent être un entier, une chaine /url /etc, ou une classe.
Pour un attribut nommé "monAttribut" il faut écrire un mutateur setter nommé "setMonAttribut".
Faut juste respecter la syntaxe, se trouver un modèle, écrire la classe de test type, et c'est le femtoContainer qui fera tout le boulot.

Je crois que le plus difficile c'est de se pencher sur le femtoContainer lui même et essayer d'apporter des évolutions comme proposé.
J'espère que ça dépannera.
Cordialement.
Nicolas

un fichier README.TXT (basé sur le MartinFowler, içi pas de film, le filtre porte sur autre chose)
bean.id.1=RouteLister //RouteLister est içi juste un identifiant, tu peux écrire ce que tu veux
RouteLister.class=question1.poisonedReverse.RouteLister // on indique la classe de l'objet
RouteLister.property.1=finder //dans la classe RouteLister j'ai un premier attribut private nommé finder
RouteLister.property.1.param.1=RouteFinder /*l'attribut 'finder' est de type RouteFinder (une classe). Içi on profite de la souplesse proposée pour les déclarations, car RouteFinder en gras c'est reconnu comme un identifiant définit dans le fichier .TXT en bean.id.2. Donc j'embrouille un peu la lecture en employant en 'id' le nom d'une classe, mais j'ai eu un soucis pour définir plus d'1 argument.*/
RouteLister.property.2=ipVersion //dans la classe RouteLister j'ai un second attribut private nommé ipVersion
RouteLister.property.2.param.1=4 //j'attribue en dur la valeur 4

bean.id.2=RouteFinder
RouteFinder.class=question1.poisonedReverse.ColonRouteFinder
RouteFinder.property.1=filename
RouteFinder.property.1.param.1=question1/poisonedReverse/routes.txt

RENAUD
Messages : 101
Inscription : 21 sept. 2018 19:34

Re: TP8- Q4.2 - compréhension énoncé

Message par RENAUD » 03 janv. 2019 4:07

Ok
Avant d'ouvrir carrément un sujet pour le tp 9.
Il y a aussi les 3 package ServiceLocator Container et package config_editor avec GUI qui lance une ihm serait ce le femtocontainer?

J'essaye de retrouver le podcast webconf où mr douin parle de son fameux femtocontainer mais aussi ce qui pourrait servir pour le tp.
Et j'ai déjà du mal à "traduire" littéralement et correctement l'idée de l'article de Martin Fowler.

J'ai bien lancé des tests et j'ai l'impression de ne pas avoir le temps de piger quoi que ce soit avant même de savoir quoi faire .
Tu dis qu'il est finalement simple ce tp mais perso "Proposez un exemple d'utilisation de femtoContainer" me parait pour l'instant hors de portée pour moi.

Rodrigues_A
Messages : 52
Inscription : 25 sept. 2018 21:57

Re: TP8- Q4.2 - compréhension énoncé

Message par Rodrigues_A » 03 janv. 2019 14:20

Bonjour,

Tout d'abord meilleurs voeux, je vous souhaite réussite dans vos projets (notamment validation de cette UE).
Je profite de ma pose déjeuner pour vous répondre, merci à vous 2 pour l'introduction et l'explication du TP injection, j'ai été malade, du coup j'attaque le TP ce soir, et j'arrête ce week-end au plus tard, ensuite j'attaque les révisions pour l'UE RSX101 car exam le 19/01.

@Renaud, je dépend de Rennes et je devais leurs demander de passer l'UE NFP121 au centre Régional (dans mon cas Rennes) 15 jours avant l'épreuve, renseigne toi don rapidement pour éviter tout problème.

Bonne journée,

Anthony

rousset
Messages : 50
Inscription : 30 sept. 2018 9:23

Re: TP8- Q4.2 - compréhension énoncé

Message par rousset » 03 janv. 2019 19:22

RENAUD a écrit :
03 janv. 2019 4:07
Ok
Avant d'ouvrir carrément un sujet pour le tp 9.
Il y a aussi les 3 package ServiceLocator Container et package config_editor avec GUI qui lance une ihm serait ce le femtocontainer?

J'essaye de retrouver le podcast webconf où mr douin parle de son fameux femtocontainer mais aussi ce qui pourrait servir pour le tp.
Et j'ai déjà du mal à "traduire" littéralement et correctement l'idée de l'article de Martin Fowler.

J'ai bien lancé des tests et j'ai l'impression de ne pas avoir le temps de piger quoi que ce soit avant même de savoir quoi faire .
Tu dis qu'il est finalement simple ce tp mais perso "Proposez un exemple d'utilisation de femtoContainer" me parait pour l'instant hors de portée pour moi.
Oui on a bien dérapé vers le tp_injection ;)
J'avais oublié l'ihm.., encore une fois ce que je raconte est à prendre avec réserves hein..,
Container : paquetage de "l'usine". C'est qui va donner procéder aux injections et donner vie à l'appli.
Config_editor : classe graphique, la vue, de l'ihm
Service Locator : dans ce paquetage y a toujours un fichier .TXT avec les injections. En gros il y a une classe qui lit le fichier texte et dans celui-ci il est précisé des classes à "charger/injecter". Quand tu exécutes le test, toutes les classes injectées sont récapitulées dans le terminal (ctrl+t) de bluej et l'ihm qui s'affiche permet la génération d'un fichier structuré comme les fichiers README.TXT.
Cette ihm, est juste là pour illustrer jusqu'où on peut aller (on ne saisit plus de fichiers .TXT nous même, on passe par cette interface graphique).
Rien à faire sur ces 3 paquetages sauf Service Locator où tu saisiras dans le fichier .TXT tes "2 injections". Je dis rien à faire mais en fait dans Container, je crois, le test cherchait le paquetage Martin Fowler, pourtant absent du tp : perso je l'ai intégré (copié/collé de tp_injection.html), mais je pense ça peut se neutraliser.

Désolé, j'ai dit simple mais ce que je voulais dire c'est que ce qui était demandé (+ temps de lecture Martin Fowler) m'est venu plus facilement. Pour ma part ce qui permet régulièrement de me lancer c'est de "mettre la main à la pâte" et là c'était juste écrire l'exemple de Martin Fowler, ce qui est proposé dans le TP. Regardes ce qu'on nous montre c'est que l'on n'a crée aucun "public static void main(String[] args) { ..}" nulle part, pas de déclarations d'instances de classes, et on peut même se dispenser de constructeurs.
On nous propose d'utiliser un programme déjà fait, qui va générer l'application à partir des informations du fichier .TXT.

En clair, dans l'ED on nous demandait de remplacer les 4 instructions ci-dessous
Collection<Integer> c = new TreeSet<Integer>();
Table<Integer> table = new Table<Integer>();
table.setCapacite(4);
table.setListe(c);

Par une seule :
Table<Integer> table = (Table<Integer>) newInstance("Table","config.props");

Et comment on a fait ?
On a d'une part crée un fichier texte formaté pour être parcouru (içi avec Properties), le "config.props". On y indique quelle classe instancier et quelle méthode appeler.
Ensuite on a crée ce qui est en fait un début du femtoContainer : on a crée la mécanique qui permet d'exploiter le fichier texte (config.props) c'est à dire instancier les classes et invoquer une de leur méthodes. Et on parvient à instancier et appeler les méthodes grâce à la reflection qu'on a abordée précédemment (Class, forName, Method, invoke, newInstance etc).

Tp_Injection
Là le femtoContainer, toute la mécanique, est déjà codé.
On nous demande juste de montrer qu'on a compris comment l'utiliser (si on a du temps on nous propose de participer à l'évolution).
Donc par exemple refaire le modèle exemple Martin_Fowler ou même proposer quoique ce soit d'autre.
Fais par exemple une classe qui doit afficher "Bienvenue".
Ensuite fais une classe "Client" avec un public static void main(String[] args) { TaClasse cl = new TaClasse(); }
Executes ton appli tu obtiens à l'écran "Bienvenue".
Maintenant dis toi qu'il faut obtenir le même résultat mais sans classe "Client". On va écrire dans un fichier texte, avec une syntaxe convenue, ce qu'on va manipuler, et ensuite on crée une classe comme dans l'ed, ou on fait appel au femtoContainer.

Pour le 1er exemple j'ai opté pour calquer le modele MartinFowler à ma sauce. J'ai opté pour un exemple en rapport avec les Réseaux : je fais une simulation boueuse du splitHorizon et PoisonedReverse (cf RipV2). Une "ip" d'un routeur B est recherchée dans la table d'un routeur A et on renvoit toute adresse de destination ayant le Routeur B en passerelle, avec une métrique de 16.

Pour le 2ème exemple, j'ai pas cherché loin, j'ai utilisé le proxy.

J'espère que ça servira, que c'est compréhensible, que ça embrouille pas ;)
Nicolas
Dernière édition par rousset le 11 janv. 2019 18:28, édité 1 fois.

RENAUD
Messages : 101
Inscription : 21 sept. 2018 19:34

Re: TP8- Q4.2 - compréhension énoncé

Message par RENAUD » 03 janv. 2019 20:39

Merci mais...
J'ai pas tout compris ou du moins ce que je comprend je l'oublie à la ligne suivante
J'ai pas fini de lire la traduction google de martin fowler. J'ai copié son code pas encore implanté pour voir ce qu'à fait je veux suivre et comprendre un minimum l'article au fur et à mesure que je vais les générer dans des classes.

Je croyais que le fichier c'était readme.txt pas config.prop car y'a des fichiers config.prop aussi dans bluej.
et manifestement j'ai du mal à me remettre des fetes ;) car me suis remis à faire l'ed je décroche vite et "abandonne" enfin je repousse plutot. j'ai voulu revoir le podcast du 04 12 c'est bien là qu'il en parle, non ? et le podcast en ed est mauvais au bout de 12mn chez moi.

plus concretement mes questions sont :
- les trois packages service_locator, container, config_editor est ce en fait femtocontainer ?
- dans ton ex simple pour comprendre qui est de créer deux classes qui disent bienvenue : on les met où ? dans exemples ?
-- ensuite s'inspirer du fichier readme.txt du package où on est et créer une classe test ?
- dans exemples j'ai vu une correlation avec toutes les classes et tests sauf pour ConfigEditorTests qui semble tout lancer en chargeant le fichier avec container puis affichage ihm config editor (pas compris encore le concept de bean, traduction entre autre par "feve" ;) apparemment y'a un lien avec servicelocator ) bref : est ce que toutes les classes et test de exemples sont liées entre elles ou c'est autant d'exemples distincts ?

ça va etre quand meme tres short pour mardi ce tp à mon avis pour toutes ces raisons (reprise de cerveau lent, motivation et doutes, et j'en passe...)
ce tp est noté au fait je ne sais plus ?

ps : ok pour la convoc et composition sur le lieu d'inscription (autre problème à résoudre compliqué sans voiture pr rentrer après 21h le ventre vide ;) pas compris qu'il fallait se co sur paris avec des identifiants que j'arrivais à remettre la main dessus mais c'est tout est ok

rousset
Messages : 50
Inscription : 30 sept. 2018 9:23

Re: TP8- Q4.2 - compréhension énoncé

Message par rousset » 03 janv. 2019 23:34

-re

README.TXT, config.props : il ne s'agit que de noms, d'une convention, de fichiers texte. Nous dans le te Tp on utilise les fichiers README.TXT mais c'est pour simplifier.

Pour les rediffusions oui : cours11_04_12_2018_injection_de_dependances et ed11_10_12_2018_injection_dependances_ioc. Pas de soucis de lecture a priori de mon côté (ou pas de souvenir).
- les trois packages service_locator, container, config_editor est ce en fait femtocontainer ?
Je ne saurai te dire, a priori oui ; container et config_editor pour qu'on puisse faire les exemples. Et le service_locator c'est un peut comme un outil supplémentaire, pour créer un fichier config.props.
- dans ton ex simple pour comprendre qui est de créer deux classes qui disent bienvenue : on les met où ? dans exemples ?
Si tu optes pour utiliser le femtoContainer (et pas reproduire l'exemple de l'Ed), bah tu peux les créer dans un paquetage dédié. Comme ça tu as le fichier .TXT sous la main. La "classe test type" (copié/collé de ce que tu trouves par exemple dans question1/patron_decorateor) elle instancie une classe "application context" (pas le nom en tête) et cette dernière charge un fichier fichier texte (.txt, .props.., tu peux mêmes appeler ça 'maConfig.peuImporte').
- ensuite s'inspirer du fichier readme.txt du package où on est et créer une classe test ?
Oui.
- dans exemples j'ai vu une correlation avec toutes les classes et tests sauf pour ConfigEditorTests qui semble tout lancer en chargeant le fichier avec container puis affichage ihm config editor (pas compris encore le concept de bean, traduction entre autre par "feve" ;) apparemment y'a un lien avec servicelocator ) bref : est ce que toutes les classes et test de exemples sont liées entre elles ou c'est autant d'exemples distincts ?
Bean, peut être vois ça comme un objet injecté içi, mais je crois que c'est une classe avec constructeur, attribut et mutateurs (setter et/ou getter), rien d'autres. Sauf erreur de ma part on aurait pu appeler "bean" "ceQuonVeut", du moment que "femtoContainer" est prévu pour récupérer un objet sous cette appelation. Ca voudrait dire qu'il y ai une méthode "getCeQuonVeut(...)".
Service locator c'est un patron qui existe : je ne suis pas en mesure d'expliquer les différences entre Service Locator et IOC.
Les paquetages exemple, patron_decorateur (et les 2 autres patrons illustrés) sont justes des exemples. Ils sont tous indépendants. C'est le ServiceLocator qui recence toutes les classes de ces paquetages : il fait appel à la classe graphique de config_editor.

Je te rappel ce qui est fait dans l'ED, on nous demandait de remplacer les 4 instructions ci-dessous
Collection<Integer> c = new TreeSet<Integer>();
Table<Integer> table = new Table<Integer>();
table.setCapacite(4);
table.setListe(c);

Par une seule :
Table<Integer> table = (Table<Integer>) newInstance("Table","config.props");

Ca va donner ça : tu vois qu'on se débarasse de toutes les déclarations qui servent à instancier (j'ai laissé les 4 instructions en commentaires).
Y a bien l'instruction unique qui consiste à créer une instance de Table (on le voit plus bas, on voit qu'on lui affecte des caractéristiques avec les setters).
Une fois l'instance crée on peut ajouter des éléments de dans

Code : Tout sélectionner

public void testTableSet()throws Exception{
	/*Collection<Integer> c = new TreeSet<Integer>();
    Table<Integer> table = new Table<Integer>();
    table.setCapacite(4);
    table.setListe(c);
*/
		Table<Integer> table = (Table<Integer>)newInstance("EDInjectionDependances.Table","src/EDInjectionDependances/config.props");

		table.ajouter(4);table.ajouter(2);table.ajouter(2);table.ajouter(1);
		assertEquals("[1, 2, 4]",table.toString());
		table.ajouter(3);
		assertEquals("[1, 2, 3, 4]",table.toString());
	}	
On n'a pas de femtoContainer qui pourrait lire le fichier texte "config.props" et créer l'instance pour nous. Dans l'ed on construit un bout de code qui permet de le faire, ce qui a donné :

Code : Tout sélectionner

public Object newInstance(String uneClasse, String fichierConfig)
			throws Exception
	{
		Properties props = new Properties();  
		props.load(new FileInputStream(new File(fichierConfig)));  
		Class<?> cl1 = Class.forName(uneClasse); 
		Class<?> cl1Setter1ParamType = Class.forName(props.getProperty("classe.1.setter.1.paramType")); 
		Object obj = cl1.newInstance(); //on crée une instance de la classe "cl1"
		
		Method classeSetter1 = cl1.getMethod(
				props.getProperty("classe.1.setter.1"), cl1Setter1ParamType
				);
		classeSetter1.invoke(obj,Integer.parseInt(props.getProperty("classe.1.setter.1.ParamValue")));
				
		Class<?> cl2 = Class.forName(props.getProperty("classe.2"));
		Object objCl2 = cl2.newInstance();
		Class<?> cl1Setter2ParamType = Class.forName(props.getProperty("classe.1.setter.2.paramType"));
		Method classeSetter2 = cl1.getMethod(
				props.getProperty("classe.1.setter.2"), cl1Setter2ParamType
				);
		classeSetter2.invoke(obj, objCl2);
		return obj; 
	}



CODE COMPLET DE L'ED
Crées un paquetage "EDInjectionDependances" et mets ces 3 éléments dedans.
Classe Table
Y a un constructeur pour simplifier la saisie de la méthode newInstance qu'on va écrire (à ne pas confondre avec la méthode homonyme de la "super" Classe Class de l'API reflect).

Code : Tout sélectionner

package EDInjectionDependances;
import java.util.Collection;
public class Table<T>{
  private Collection<T> liste;
  private int capacite;
  
  public Table(){}
  public void setListe(Collection<T> liste){
    this.liste = liste;
  }
  public void setCapacite(Integer capacite){
    this.capacite = capacite;
  }
  public void ajouter(T t){
    if(liste.size()==capacite) throw new RuntimeException("capacity reached");
    liste.add(t);
  }
  public String toString(){
    return liste.toString();
  }
}
FICHIER config.props
Tu vois on utilise un nommage différent du Tp. L'intérêt de la syntaxe "xxxx.ggg.1=kkk" c'est qu'on utilise Properties avec pour charger les infos. C'est plus simple que de lire le fichier avec un "StreamReader" et tout écrire soit même.

Code : Tout sélectionner

classe.1=src.EDInjectionDependances.Table
classe.1.setter.1=setCapacite
classe.1.setter.1.paramType=java.lang.Integer
classe.1.setter.1.ParamValue=4

classe.1.setter.2=setListe
classe.1.setter.2.paramType=java.util.Collection
classe.2=java.util.TreeSet
Classe InjectionTest

Code : Tout sélectionner

package EDInjectionDependances;
import java.util.*;
import java.io.*;
import java.lang.reflect.*;
public class InjectionTest extends junit.framework.TestCase {
	public void testTableArrayList() throws Exception{
		Collection<Integer> c = new ArrayList<Integer>();
		Table<Integer> table = new Table<Integer>();
		table.setCapacite(4);
		table.setListe(c);

		table.ajouter(4);table.ajouter(2);table.ajouter(3);table.ajouter(1);
		assertEquals("[4, 2, 3, 1]",table.toString());
		try{
			table.ajouter(5);
			fail("Une exception doit être levée, la capacité de la table est atteinte...");
		}catch(Exception e){
		}
	}

	public void testTableSet()throws Exception{
	/*Collection<Integer> c = new TreeSet<Integer>();
    Table<Integer> table = new Table<Integer>();
    table.setCapacite(4);
    table.setListe(c);
*/
		Table<Integer> table = (Table<Integer>)newInstance("EDInjectionDependances.Table","src/EDInjectionDependances/config.props");

		table.ajouter(4);table.ajouter(2);table.ajouter(2);table.ajouter(1);
		assertEquals("[1, 2, 4]",table.toString());
		table.ajouter(3);
		assertEquals("[1, 2, 3, 4]",table.toString());

	}	    
	public Object newInstance(String uneClasse, String fichierConfig)
			throws Exception
	{
		Properties props = new Properties();
		props.load(new FileInputStream(new File(fichierConfig)));
		Class<?> cl1 = Class.forName(uneClasse);
		Class<?> cl1Setter1ParamType = Class.forName(props.getProperty("classe.1.setter.1.paramType"));
		Object obj = cl1.newInstance();
		
		Method classeSetter1 = cl1.getMethod(
				props.getProperty("classe.1.setter.1"), cl1Setter1ParamType
				);
		classeSetter1.invoke(obj,Integer.parseInt(props.getProperty("classe.1.setter.1.ParamValue")));
				
		Class<?> cl2 = Class.forName(props.getProperty("classe.2"));
		Object objCl2 = cl2.newInstance();
		Class<?> cl1Setter2ParamType = Class.forName(props.getProperty("classe.1.setter.2.paramType"));
		Method classeSetter2 = cl1.getMethod(
				props.getProperty("classe.1.setter.2"), cl1Setter2ParamType
				);
		classeSetter2.invoke(obj, objCl2);
		return obj; 
	}
}
J'espère que ça aidera. Peut être "bidouilles" peut être les classes de l'Ed pour percuter ce qui se passe.
En tout cas vas y tranquillement, persiste mais pas 8h d'affilée. L'enseignant le rappel aussi, faut rester simple : si on bloque, je pense faut faire une pause, tenter une nouvelle approche. Peut être laisse tomber l'article en anglais si tu es pas à l'aise : c'est intéressant mais bon c'est peut être un peu trop "journalistique" /dans le lyrique (je préfère la méthode pratiquer et progressivement complexifier : ça efface les "barrières" du langage (humain) pour la compréhension). Et puis on a déjà ce qui faut avec la vidéo de l'Ed, et les exemples dans le Tp.
Je pense qu'il faut être à l'aise avec la reflection (l'API reflect) pour que "ça vienne".

@Anthony - Meilleurs voeux de même, j'avais oublié
Cordialement.
Nicolas

RENAUD
Messages : 101
Inscription : 21 sept. 2018 19:34

Re: TP8- Q4.2 - compréhension énoncé

Message par RENAUD » 04 janv. 2019 0:49

Ca commence à venir à rentrer mais bon tu maches pas mal le boulot merci !

J'ai revu un peu la vidéo cours du mardi 0412 pour celle ED peut être mal téléchargée!

Je parlais dans le package Exemples:
- pas des 3 patrons Decorator,Strategy,Command(je ne vois pas d'ailleurs ce qui font là car je ne les vois pas justement dans les dizaines de classes ou je ne me rappelle plus)
- mais les dizaines de classes Auditeur etc... sont elles liées entre elles ? Bon j'avoue j'ai pas décortiqué pour voir je me suis concentré plutot sur la compréhension fichier container,interpretation container,... pour tenter de piger ce femto et injection comment la mécanique déroulait.
- pour les 3 packages qui font le moteur du femto apparemment,
-- service_locator qui gere si le fichier "bean.props" ou les "trucmuche.txt" est correct bref qui serait l'interpreteur des conventions d'écriture des fichiers "config.props" ou readme.txt" ? (ce qui me gene dans le tp c'est de voir des fichier config.props et readme.txt dans le projet)
-- configeditor un editeur ihm
-- container doit suivre les conventions d'écritures sinon ça ne fonctionnera pas mais sa fonction est de charger dans des maps ce qu'il y a dans les fichiers c'est cela ?
je viens de voir que JSON XML TXT! sont à terminer aie !

Rodrigues_A
Messages : 52
Inscription : 25 sept. 2018 21:57

TP8 puis TP Injection

Message par Rodrigues_A » 04 janv. 2019 10:23

Bonjour,
Malgré toutes vos explications, je n'arrive pas à rentrer dans ce TP, je verrais cela ce soir ou demain matin, si je peux ajouter à la discussion et apporter ma pierre à l'édifice, je le ferais, en tout cas bravo pour votre travail et merci de le partager.

Je crois que je ne suis pas fais pour Java et j'ai également beaucoup de doutes concernant ma réussite pour l'examen.
sans IDE, difficile de ne pas faire d'erreur de code ...
Je vais privilégié les révisions de mon autre UE (pour l'avoir du 1er coup) et essayer de faire quelques anales de NFP121.
Bonne journée,
Anthony

rousset
Messages : 50
Inscription : 30 sept. 2018 9:23

Re: TP8- Q4.2 - compréhension énoncé

Message par rousset » 04 janv. 2019 19:02

-re

@Renaud
Sauf erreurs, approximations et inexactitudes de ma part,
Creuses pas trop le femtoContainer, dis toi que tu as un outil clef en main.
Comment ça marche ?
Pars du principe que tu n'as pas de classe Client (un classique "public void main (String[] args) {...}", mais tu veux quand même pouvoir déclencher ton application.
Un :
MaClasse mc = new MaClasse(String monArg1);
où MaClasse vaut :
class MaClasse
{
String monArg1; //je garde le meme nom pour simplifier, en tout cas la premiere lettre est en minuscule
public void setMonArg1(String monArg1) { this.monArg1=monArg1;} //un setter qui respecte la syntaxe "set"+"MonArg1"
}
Doit devenir dans un fichier texte (.TXT, .props, .wtf etc) :
beanner.1 = ceQueJeVeux //içi on se dit que femtoContainer attend d'identifier ce qu'on va instancier, avec une chaine genre "beanner.1, beanner.2 etc".
ceQueJeVeux.class=question1.MaClasse //on indique quelle classe on va manipuler
ceQueJeVeux.property.1= monArg1 //indispensable, tu indiques le nom de l'attribut de la classe , içi monArg1
ceQueJeVeux.property.1.param.1="Vive la France" //l'attribut c'est une String

Ensuite le femtoContainer est prévu pour lire ce fichier .TXT (.props, etc) et il le pourra parce qu'on aura utilisé la syntaxe attendue
Et il va crée une instance de la classe MaClasse dont il va déclencher la méthode setMonArg1 (il sait que la property.1 de la classe se nomme monArg1, donc il doit exister la méthode "setMonArg1") en précisant en argument une chaine "Vive la France".
- pas des 3 patrons Decorator,Strategy,Command(je ne vois pas d'ailleurs ce qui font là car je ne les vois pas justement dans les dizaines de classes ou je ne me rappelle plus)
En fait seul 1 a été renseigné dans le fichier .TXT du paquetage ServiceLocator. Ils servent juste à nous aider, et tu peux compléter le fichier .TXT du ServiceLocator si tu le souhaites.
- mais les dizaines de classes Auditeur etc... sont elles liées entre elles ? Bon j'avoue j'ai pas décortiqué pour voir je me suis concentré plutot sur la compréhension fichier container,interpretation container,... pour tenter de piger ce femto et injection comment la mécanique déroulait.
Franchement j'ai pas creusé : à mon sens c'est jamais que ce qu'on a vu en Ed mais en plus développé. Je te rappel que tu n'auras jamais à écrire ça toi même parce que ça existe déjà (exemple : Maven, Vaadin, Swing et je ne sais quoi d'autre. Peut être même qu'il y a l'équivalent pour le .NET, j'ai pas percuté). Ceci dit, le femtoContainer je crois qu'on peut dire que ça permet de voir la mise en oeuvre de ce qu'on a abordé pendant le cours : factory, reflection, properties, parcours itératif, interfaces, héritage etc
-pour les 3 packages qui font le moteur du femto apparemment,
- service_locator qui gere si le fichier "bean.props" ou les "trucmuche.txt" est correct bref qui serait l'interpreteur des conventions d'écriture des fichiers "config.props" ou readme.txt" ? (ce qui me gene dans le tp c'est de voir des fichier config.props et readme.txt dans le projet)
Le ServiceLocator, il parcourt le fichier texte dans lequel on lui dit : "écoutes j'ai un paquetage dans lequel j'ai telles classes, trouves moi quels sont ses attributs et méthodes". Ensuite ca génère le tout (avec des System.out.print(...)) dans le terminal de blueJ (ctrl+t) et ça ouvre une fenêtre graphique qui permet de créer un fichier d'injection sur la base des classes qu'on a fait chercher. C'est juste pour nous montrer jusqu'où on peut aller..,
- configeditor un editeur ihm
ok
-container doit suivre les conventions d'écritures sinon ça ne fonctionnera pas mais sa fonction est de charger dans des maps ce qu'il y a dans les fichiers c'est cela ?
Sûrement je n'ai pas regardé. Ca parait "normal" dans le sens où ça permet d'avoir en clef la référence d'une classe et en valeur la classe elle même. Le ServiceLocator scrute le fichier .TXT (ou .props ou .wtf etc), et il va stocker toutes les informations qu'il trouve quelque part dans une collection Map. Depuis l'ihm on pourra créer "des beans" (créer un fichier texte rédigé avec la bonne syntaxe automatiquement) qui référenceront des classes de la Map.
je viens de voir que JSON XML TXT! sont à terminer aie !
Non pas de soucis. L'enseignant te propose de participer au développement du femtoContainer et suggère le JSON, XML.., c'est la question 3 optionnelle du TP. Les classes sont vides c'est normal.

Cordialement.
Nicolas
Dernière édition par rousset le 04 janv. 2019 20:27, édité 1 fois.

rousset
Messages : 50
Inscription : 30 sept. 2018 9:23

Re: TP8 puis TP Injection

Message par rousset » 04 janv. 2019 20:05

Rodrigues_A a écrit :
04 janv. 2019 10:23
Bonjour,
Malgré toutes vos explications, je n'arrive pas à rentrer dans ce TP, je verrais cela ce soir ou demain matin, si je peux ajouter à la discussion et apporter ma pierre à l'édifice, je le ferais, en tout cas bravo pour votre travail et merci de le partager.

Je crois que je ne suis pas fais pour Java et j'ai également beaucoup de doutes concernant ma réussite pour l'examen.
sans IDE, difficile de ne pas faire d'erreur de code ...
Je vais privilégié les révisions de mon autre UE (pour l'avoir du 1er coup) et essayer de faire quelques anales de NFP121.
Bonne journée,
Anthony
Ah j'ai réussit à en ajouter une de plus ;) ..,
J'ai eu beaucoup de mal aussi à prendre l'UE en main ; ryhtme soutenu et puis je n'avais pas envisagé les recherches /la documentation, ni de devoir suivre les Eds afin de pouvoir aborder les Tps. Beaucoup de temps et d'énergie, parfois mal gérés, mais pour ma part indispensables.
Si tu es plus branché réseau, mais qu'il soit nécessaire de passer par la licence, alors, peut être que même valider à minima ce n'est pas grave, et c'est faisable, à mon sens "la notation est bienveillante". Je me dis qu'il ne faut pas hésiter en cas de panne, ou autre, à rédiger du pseudo code, d'expliquer ce qu'on souhaitait répondre ou ce qu'on a pas compris qui empêcherait de répondre (mais au moins exprimer l'intention).
Maintenant si le développement te branches, alors, je suis personne, mais si je peux me permettre, dans une équipe de 4 y a Mr Copier, Mr Coller, Mr JeMetsToutEnPlace, et Mr OnSaitPasCestQuiCeluiLa .., ensuite ça s'appel "Java, Python, Html5+Css3+Javascript, .Net, C++ ..." je pense que le plus important c'est de comprendre qu'on attend des applications évolutives (abstraction au maximum), uniformisées (limite marge d'erreur), et qui puissent être intégrées dans n'importe quel environnement. Lâches rien.
En tout cas moi aussi j'ai "du pain sur la planche", autant dire "du bit sur la pile", à dépiler ;)

Je pense que papier et stylo suffisent pour réviser (pas d'IDE), refaire les cas d'utilisation des patrons.
Meilleurs voeux
Nicolas

RENAUD
Messages : 101
Inscription : 21 sept. 2018 19:34

Re: TP8- Q4.2 - compréhension énoncé

Message par RENAUD » 05 janv. 2019 1:05

1) Je vais répondre à Nicolas au dernier com "rapidement" à propos du TP9
Je n'ai pas bossé aujourd'hui cause rdv méchant dentiste et c'est toujours stressant on se culpabilise en tout cas moi je suis comme ça mais ça fait du bien de prendre du recul à postériori .
Car en lisant ton com j'ai compris peut etre ce qui me bloque vraiment dans ce tp injection et plus généralement sur ce cours.
Surement parce que je n'ai pas encore réellement coder pour tester les bout de codes cours, ed, martin fowler, etc. Je ferais ça demain matin
Mais faire une classe avec un setter ok
quand j'ai lancé les tests qui équivaut en fait à lancer un "main" client + un test si je comprend bien ?
ça affiche des "infos" d'ensemble dans la console et lance l'ihm "editeur".
la difficulté à quel moment je code, écrit dans le fichier en corrélation avec la classe. car j'ai vu que quand l'éditeur est lancé j'ai pu écrire des classes des propriétés, etc... maladroitement mais on ne valide rien ça ne génére pas des beans c'est ça ? dans un nouveau fichier ou écrit en rallongement dans le fichier !?
sinon le seul patron est Factory de container(quid des 3 autres patrons) non ?

- bref j'ai donc l'impression que je peux pour l'instant créer une package et classe bidon. puis essayer de comprendre syntaxe et écrire mon fichier txt. et enfin un petit test pour lancer femto qui va afficher le processus et les données qui ya dans le fichier dans la console et lancer en meme temps à nouveau l'éditeur par défaut mais qui ne peut rien écrire en dur.
mais les classes n'ont pas été instancié c'est déroutant et d'un premier abord moche avec plein d'infos console, ihm qu'on ne comprend pas !
j'ai bon jusque là déjà ou pas parce que sinon ?

2) j'aimerais répondre à Anthony.
j'ai déjà un vieux bts développement (analyste prog) et à première vue je préfère programmer même si j'ai trop peu pratiqué sinon je ne serais pas là mais quand je vois comment je rame à ce genre d'UE ça me fait encore le plus stressé pour l'avenir ou du moins pour ce qu'il en reste. donc l'exam je me demande comment je vais me ramasser et en mm temps je me console parfois en me disant : fait le comme si j'étais auto didacte pas d'enjeux pro ni de temps en plus y'a une deuxieme session mais ensuite revient la pression des buts pro que je m'étais fixés.
enfin c'est ma derniere UE technique pour valider la licence (me restera que l'anglais loin d'être le plus facile et le reste écrit oral stage) donc je me suis mis une pression supplémentaire j'aime moins même si c'était tres interessant les UE en réseau, sécurité, optimisation, et autres que j'ai vus que la programmation donc si je me plante ici c'est que je me suis bercé d'illusions.

- bref serions nous certains ou tous un peu ou beaucoup maso ? (y'a malheureusement pas de point bonus si on répond à ça! ;)

3) je commenterai mon topic sur les révisions plus tard.
car ce dernier tp étrangement à 3 jours de le rendre c'est le premier où certes je stresse mais je n'ai encore rien fait ça aurait été les autres je m'en serais rendu encore plus malade que d'habitude, là non ! comme si l'exam approchant il y a un reflexe un peu résigné, le calme avant la tempête ...

RENAUD
Messages : 101
Inscription : 21 sept. 2018 19:34

Re: TP8- Q4.2 - compréhension énoncé

Message par RENAUD » 06 janv. 2019 14:07

Pareil j'ai du mal aussi à progresser, à rentrer dans ce tp pourtant c'est interessant. Donc tant pis pour le dernier tp, ce sera le premier que je ne pourrais pas rendre.

Comme il n'y a plus de réaction je relance...
J'ai commencé à observer le code de martin fowler dans bluej et pas tout. En plus je n'ai pas tout compris toutes les notions de l'article et même dans le podcast ou l'ED .
J'ai encore trop de questions sur le fond et sur la manière de faire.
Par ex :
j'ai créé deux packages dans question1 : mesexemples et martinfowler
- dans mesexemples :
juste copier le code de "message" d'exemples j'ai même rajouté un println dans le test. j'ai alors enfin un peu compris l’intérêt de l'injection et d'un container. mais après le temps de tout explorer et comprendre les possibilités de toutes les autres classes, package, la syntaxe des fichiers...
- dans martinfowler : déjà en implantant le code simple de martinfowler, ok il y a le fichier (txt, prop,...) pour lancer l'appli mais les données ?
je voulais essayer dans ColonMovieFinder utiliser un autre fichier pour les données plutôt qu'une simulation.
Mais je ne vois pas comment faire : j'ai pensé au stream vu au tp8 mais le temps pareil que j'y arrive on sera à la fin de la semaine prochaine minimum.

sinon vous parlez du patron commande oui le package patroncommande est appelé dans servicelocator,
mais je ne comprend pas, dans container c'est le patron fabrique qui est utilisé ! j'ai même l'impression que c'est à la question 2 qui est demandé de proposer un des patron avec femto non ?

bref même si ça avance, je suis encore beaucoup trop perdu et trop lent pour un truc meme passable pour mardi.
donc c'est décevant mais je vais laisser tomber pour cette échéance pour revenir au révision (et vu ma lenteur c'est pas du luxe en plus ma lenteur c'est suffisant inquiétant par rapport à la durée de l'exam).
J'ai donc là qu'une question pour mr douin si il lit ce com : est ce possible d'avoir une correction de ce tp ? ou/et si je le finis après le temps imparti est ce possible d'être corrigé sans être noté biensur ?

Rodrigues_A
Messages : 52
Inscription : 25 sept. 2018 21:57

Re: TP8- Q4.2 - compréhension énoncé

Message par Rodrigues_A » 06 janv. 2019 15:30

@ Renaud,
Bonjour,
J'ai décider de prendre ce tp à l'envers pour comprendre, avec tes questions et les explications de Nicolas, je m'attaque e,fin à ce TP, il est bien tard mais vous m'avez bien permis de comprendre.
J'ai donc décidé d'attaquer la question 2 en proposant le patron adaptateur (afin de le réviser) et de me l'ancé directement dans le readme.txt, comme dit Nicolas, il faut mettre les mains dans le cambouis. (c'est comme cela que j'ai fait du sql et du vba en modifiant du code et en essayant de comprendre ce que je fais, je me suis même attaqué au Python et développer un outil avec IHM pour le travail).
Tout cela pour te dire de t'accrocher, utilise ce tp pour réviser 2 patrons, moi j'ai choisi adaptateur et proxy. Ils sont simple à mettre en œuvre mais il faut bien commencer par quelque chose.
Je suis comme toi décourager par les anales et stressé par l'examen, je me met trop la pression.
Pourtant pour moi la licence en informatique est un bonus, en réalité je suis déjà en poste dans une société de mécanique en tant que responsable Methodes-Achat-Administrateur Réseaux et Système, la dernière partie de mon poste est un peu usurpée, car je ne fais que développer un outil de gestion de prod via excel, je fais la maintenance réseau et matériel et gère les différents logiciels, mon but est d'acquérir les bonne pratiques (redondance dans le réseau, spanning tree+ VLAN, base de donnée...) afin d'éviter que l'on m'impose un prestataire de service.
On est dans le même bateau ne te décourage pas, tu as toujours posé des questions intéressantes lors des cours, et sur le forum, tu mérites d'avoir cet UE, comme l'a dit Nicolas, la notation sera bienveillante.
Essais si tu peux de développer qqch pour ce TP et rends le afin d'avoir une note et surtout un commentaire.
Bon courage,

Anthony

rousset
Messages : 50
Inscription : 30 sept. 2018 9:23

Re: TP8- Q4.2 - compréhension énoncé

Message par rousset » 06 janv. 2019 22:40

-re

Ca m'a pris un peu temps de rédiger, content que ça ai servi.., On va y arriver ;)

J'ai un peu de mal à tout capter Renaud hein.., en tout cas prends tout ce que je raconte avec réserve.
- bref j'ai donc l'impression que je peux pour l'instant créer une package et classe bidon. puis essayer de comprendre syntaxe et écrire mon fichier txt. et enfin un petit test pour lancer femto qui va afficher le processus et les données qui ya dans le fichier dans la console et lancer en meme temps à nouveau l'éditeur par défaut mais qui ne peut rien écrire en dur.
mais les classes n'ont pas été instancié c'est déroutant et d'un premier abord moche avec plein d'infos console, ihm qu'on ne comprend pas !
j'ai bon jusque là déjà ou pas parce que sinon ?
Le femtoContainer s'occupe de créer les instances. Dans l'Ed on a vu comment on a fait pour instancier une classe à partir d'un fichier texte (config.props en l'occurence), c'est avec la reflexion, et c'est un embryon du code du femtoContainer.
L'ihm, qu'on obtient lorsqu'on lance le ServiceLocator, sert à créer un fichier "config.props", automatiquement formaté par rapport à ce qu'on demande. On renseigne d'abord "un bean", ensuite on lui assigne une classe. Quand on ferme l'ihm on est averti qu'un fichier "config.props" a été crée.
bean.1=beanQuonAIndiqué
beanQuonAIndiqué.class=classeQuonAIndiquée //par exemple java.lang.String ou une classe du Tp
- dans martinfowler : déjà en implantant le code simple de martinfowler, ok il y a le fichier (txt, prop,...) pour lancer l'appli mais les données ?
C'est ça, le traitement des données, c'est indépendant. Dans l'exemple MartinFowler les 3 films sont saisis en dur depuis la classe "ColonMovieFinder" : on fait comme on veut.
sinon vous parlez du patron commande oui le package patroncommande est appelé dans servicelocator,
mais je ne comprend pas, dans container c'est le patron fabrique qui est utilisé ! j'ai même l'impression que c'est à la question 2 qui est demandé de proposer un des patron avec femto non ?
Prends tout ce que je raconte réserve hein, je ne détermine pas ce qui te dérange içi ; oui c'est à la question 2 le patron + femtoContainer.

Pour le Tp je pense que tu peux, en question1, rendre quelque chose de proche du MartinFowler.
Pour la question2, j'ai réfléchi, pourquoi pas juste un patron Template ? Tu expliques que tu as du mal avec le Tp, c'est pourquoi tu présentes un exemple simplifié.
Crées un paquetage vide, dans le répertoire du Tp_Injection.
Tu y crées 1 classe abstraite avec 1 méthode abstraite (sans paramètre).
Ensuite tu y crées 1 classe dérivée où tu écris le corps de la méthode. Pas de constructeur dans ta classe.
A partir de là, tu as un patron Template.
Ensuite tu saisis dans le fichier README.TXT les informations à la sauce bean.1=tonId, tonId.class=tpInjection.tonPaquetage.taClasse etc.
Enfin une classe test "classique" et voilou le tour est joué.
Ecris peut être une méthode qui ne fait que retourner un message.

J'espère que ça aidera.
Cordialement.
Nicolas

RENAUD
Messages : 101
Inscription : 21 sept. 2018 19:34

Re: TP8- Q4.2 - compréhension énoncé

Message par RENAUD » 06 janv. 2019 23:40

Merci à vous deux (mp envoyé!)
C'est un peu frustrant mais je pense que je peux pondre ça au moins

Répondre