J'ai une classe F, deux classes C1 et C2 qui heritent de F.
Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas).
cet objet, je l'ajoute a une liste d'objet F.
Maintenant je veux recuperer un objet F de la liste par une methode get.
Ma liste d'objet F est stockée dans un fichier.
quand je recupere tous les attributs de objet F, je sais si cet objet est
C1 ou C2.
donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite
de F. Je vais avoir un nouveau test dans ma methode get pour savoir si
cet objet est C3.
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test
dans get (c pas top).
Avez vous une autre solution a mon problème (des methode cachées dans
java qui peuvent m'aider ;) )
car mon but serai de creer des objets qui heritent de F sans modifier ma
methode get.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jc Sirot
kiddy wrote:
J'ai une classe F, deux classes C1 et C2 qui heritent de F. Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas). cet objet, je l'ajoute a une liste d'objet F. Maintenant je veux recuperer un objet F de la liste par une methode get. Ma liste d'objet F est stockée dans un fichier. quand je recupere tous les attributs de objet F, je sais si cet objet est C1 ou C2. donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite de F. Je vais avoir un nouveau test dans ma methode get pour savoir si cet objet est C3.
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test dans get (c pas top).
Avez vous une autre solution a mon problème (des methode cachées dans java qui peuvent m'aider ;) )
Je suppose que tu as défini deux classes que j'ai nommé FFileEntries et FFileEntry. FFileEntries permet d'accéder aux objets de type F dans le fichier avec les méthodes hasMoreElements() et nextElement() ; FFileEntries est construit à partir d'un objet de type File. Chaque objet de type F est représenté par un objet de type FFileEntry qui contient les attributs de l'objet et un id qui indique le type réel C1, C2... ou Cn.
public F get() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException { File file = new File(FICHIER_AVEC_LES_OBJETS_F) /* * on construit la liste des représentations de F dans le fichier. */ FFileEntries entries = new FFileEntries(file); while (entries.hasMoreElements()) { /* * nouvelle entrée dans le fichier */ FFileEntry entry = entries.nextElement(); /* * On récupère la class correspondante par exemple * dans une HashMap. */ String className = entryClass.get(entry.getClassId()); Class clazz = Class.forName(className); /* * On l'instancie l'objet Ci */ F f = (F)clazz.newInstance(); /* * on appelle la méthode : * void populate(FFileEntry entry) * * elle est déclarée abstract dans F et définie * dans chaque Ci pour initialiser les attributs * propres à chaque sous-classe de F. */ f.populate(entry); return f; }
--
Cordialement -- JC Sirot
kiddy wrote:
J'ai une classe F, deux classes C1 et C2 qui heritent de F.
Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas).
cet objet, je l'ajoute a une liste d'objet F.
Maintenant je veux recuperer un objet F de la liste par une methode get.
Ma liste d'objet F est stockée dans un fichier.
quand je recupere tous les attributs de objet F, je sais si cet objet est
C1 ou C2.
donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite
de F. Je vais avoir un nouveau test dans ma methode get pour savoir si
cet objet est C3.
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test
dans get (c pas top).
Avez vous une autre solution a mon problème (des methode cachées dans
java qui peuvent m'aider ;) )
Je suppose que tu as défini deux classes que j'ai nommé FFileEntries et
FFileEntry. FFileEntries permet d'accéder aux objets de type F dans le
fichier avec les méthodes hasMoreElements() et nextElement() ;
FFileEntries est construit à partir d'un objet de type File. Chaque
objet de type F est représenté par un objet de type FFileEntry qui
contient les attributs de l'objet et un id qui indique le type réel C1,
C2... ou Cn.
public F get()
throws IOException,
ClassNotFoundException,
InstantiationException,
IllegalAccessException
{
File file = new File(FICHIER_AVEC_LES_OBJETS_F)
/*
* on construit la liste des représentations de F dans le fichier.
*/
FFileEntries entries = new FFileEntries(file);
while (entries.hasMoreElements()) {
/*
* nouvelle entrée dans le fichier
*/
FFileEntry entry = entries.nextElement();
/*
* On récupère la class correspondante par exemple
* dans une HashMap.
*/
String className = entryClass.get(entry.getClassId());
Class clazz = Class.forName(className);
/*
* On l'instancie l'objet Ci
*/
F f = (F)clazz.newInstance();
/*
* on appelle la méthode :
* void populate(FFileEntry entry)
*
* elle est déclarée abstract dans F et définie
* dans chaque Ci pour initialiser les attributs
* propres à chaque sous-classe de F.
*/
f.populate(entry);
return f;
}
J'ai une classe F, deux classes C1 et C2 qui heritent de F. Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas). cet objet, je l'ajoute a une liste d'objet F. Maintenant je veux recuperer un objet F de la liste par une methode get. Ma liste d'objet F est stockée dans un fichier. quand je recupere tous les attributs de objet F, je sais si cet objet est C1 ou C2. donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite de F. Je vais avoir un nouveau test dans ma methode get pour savoir si cet objet est C3.
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test dans get (c pas top).
Avez vous une autre solution a mon problème (des methode cachées dans java qui peuvent m'aider ;) )
Je suppose que tu as défini deux classes que j'ai nommé FFileEntries et FFileEntry. FFileEntries permet d'accéder aux objets de type F dans le fichier avec les méthodes hasMoreElements() et nextElement() ; FFileEntries est construit à partir d'un objet de type File. Chaque objet de type F est représenté par un objet de type FFileEntry qui contient les attributs de l'objet et un id qui indique le type réel C1, C2... ou Cn.
public F get() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException { File file = new File(FICHIER_AVEC_LES_OBJETS_F) /* * on construit la liste des représentations de F dans le fichier. */ FFileEntries entries = new FFileEntries(file); while (entries.hasMoreElements()) { /* * nouvelle entrée dans le fichier */ FFileEntry entry = entries.nextElement(); /* * On récupère la class correspondante par exemple * dans une HashMap. */ String className = entryClass.get(entry.getClassId()); Class clazz = Class.forName(className); /* * On l'instancie l'objet Ci */ F f = (F)clazz.newInstance(); /* * on appelle la méthode : * void populate(FFileEntry entry) * * elle est déclarée abstract dans F et définie * dans chaque Ci pour initialiser les attributs * propres à chaque sous-classe de F. */ f.populate(entry); return f; }
--
Cordialement -- JC Sirot
Nicolas Delsaux
Le 13 avr. 2004, kiddy s'est levé(e) et s'est dit "tiens, si j'écrivais aux mecs de fr.comp.lang.java"
Salut a tous,
J'ai une classe F, deux classes C1 et C2 qui heritent de F. Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas). cet objet, je l'ajoute a une liste d'objet F. Maintenant je veux recuperer un objet F de la liste par une methode get. Ma liste d'objet F est stockée dans un fichier. quand je recupere tous les attributs de objet F, je sais si cet objet est C1 ou C2. donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite de F. Je vais avoir un nouveau test dans ma methode get pour savoir si cet objet est C3.
Déja entendu parler de design patterns ? Et en particulier du design pattern "factory" ? Parce que c'est exactement conçu pour ce type de situation : tu as un certain nombre d'objets en entrée (dans ton cas une chaîne de caractères ou un tableau de chaînes). En fonction de leur valeur, tu vas créer un objet C1 ou C2, mais en tout cas un objet F. Je te proposes la chose suivante : - tu crées une classe FFactory, qui crée des objets de classe F. - Cette classe n'a qu'une méthode : public F createF(String line){...} Celle-ci examine le contenu de la ligne, et crée le bon objet. Et voilà ! Ainsi, tu n'as plus besoin d'un code de création complexe dans F !
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test dans get (c pas top).
car mon but serai de creer des objets qui heritent de F sans modifier ma methode get.
Tu veux générer de nouvelles sous-classes sans modifier le code de ta classe de création d'objet (maintenant FFactory) ? Là, tu risques de devoir faire appel à la magie noire Java...
Merci d'avance Kiddy
-- Nicolas Delsaux AN>Faire de la pub, c'est se mettre sur le même plan que Begbeider, Séguéla ou Raffarin. AN>C'est quand même ultime les boules. in frab la pub
Le 13 avr. 2004, kiddy s'est levé(e) et s'est dit "tiens, si j'écrivais
aux mecs de fr.comp.lang.java"
Salut a tous,
J'ai une classe F, deux classes C1 et C2 qui heritent de F.
Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas).
cet objet, je l'ajoute a une liste d'objet F.
Maintenant je veux recuperer un objet F de la liste par une methode
get. Ma liste d'objet F est stockée dans un fichier.
quand je recupere tous les attributs de objet F, je sais si cet objet
est C1 ou C2.
donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui
herite de F. Je vais avoir un nouveau test dans ma methode get pour
savoir si cet objet est C3.
Déja entendu parler de design patterns ? Et en particulier du design
pattern "factory" ? Parce que c'est exactement conçu pour ce type de
situation :
tu as un certain nombre d'objets en entrée (dans ton cas une chaîne de
caractères ou un tableau de chaînes).
En fonction de leur valeur, tu vas créer un objet C1 ou C2, mais en tout
cas un objet F. Je te proposes la chose suivante :
- tu crées une classe FFactory, qui crée des objets de classe F.
- Cette classe n'a qu'une méthode : public F createF(String line){...}
Celle-ci examine le contenu de la ligne, et crée le bon objet.
Et voilà !
Ainsi, tu n'as plus besoin d'un code de création complexe dans F !
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000
test dans get (c pas top).
car mon but serai de creer des objets qui heritent de F sans modifier
ma methode get.
Tu veux générer de nouvelles sous-classes sans modifier le code de ta
classe de création d'objet (maintenant FFactory) ? Là, tu risques de
devoir faire appel à la magie noire Java...
Merci d'avance
Kiddy
--
Nicolas Delsaux
AN>Faire de la pub, c'est se mettre sur le même plan que Begbeider,
Séguéla ou Raffarin.
AN>C'est quand même ultime les boules.
in frab la pub
Le 13 avr. 2004, kiddy s'est levé(e) et s'est dit "tiens, si j'écrivais aux mecs de fr.comp.lang.java"
Salut a tous,
J'ai une classe F, deux classes C1 et C2 qui heritent de F. Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas). cet objet, je l'ajoute a une liste d'objet F. Maintenant je veux recuperer un objet F de la liste par une methode get. Ma liste d'objet F est stockée dans un fichier. quand je recupere tous les attributs de objet F, je sais si cet objet est C1 ou C2. donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite de F. Je vais avoir un nouveau test dans ma methode get pour savoir si cet objet est C3.
Déja entendu parler de design patterns ? Et en particulier du design pattern "factory" ? Parce que c'est exactement conçu pour ce type de situation : tu as un certain nombre d'objets en entrée (dans ton cas une chaîne de caractères ou un tableau de chaînes). En fonction de leur valeur, tu vas créer un objet C1 ou C2, mais en tout cas un objet F. Je te proposes la chose suivante : - tu crées une classe FFactory, qui crée des objets de classe F. - Cette classe n'a qu'une méthode : public F createF(String line){...} Celle-ci examine le contenu de la ligne, et crée le bon objet. Et voilà ! Ainsi, tu n'as plus besoin d'un code de création complexe dans F !
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test dans get (c pas top).
car mon but serai de creer des objets qui heritent de F sans modifier ma methode get.
Tu veux générer de nouvelles sous-classes sans modifier le code de ta classe de création d'objet (maintenant FFactory) ? Là, tu risques de devoir faire appel à la magie noire Java...
Merci d'avance Kiddy
-- Nicolas Delsaux AN>Faire de la pub, c'est se mettre sur le même plan que Begbeider, Séguéla ou Raffarin. AN>C'est quand même ultime les boules. in frab la pub
Olivier Demaine
J'ai une classe F, deux classes C1 et C2 qui heritent de F. Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas). cet objet, je l'ajoute a une liste d'objet F. Maintenant je veux recuperer un objet F de la liste par une methode get. Ma liste d'objet F est stockée dans un fichier. quand je recupere tous les attributs de objet F, je sais si cet objet est C1 ou C2. donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite de F. Je vais avoir un nouveau test dans ma methode get pour savoir si cet objet est C3.
Déja entendu parler de design patterns ? Et en particulier du design pattern "factory" ? Parce que c'est exactement conçu pour ce type de situation : tu as un certain nombre d'objets en entrée (dans ton cas une chaîne de caractères ou un tableau de chaînes). En fonction de leur valeur, tu vas créer un objet C1 ou C2, mais en tout cas un objet F. Je te proposes la chose suivante : - tu crées une classe FFactory, qui crée des objets de classe F. - Cette classe n'a qu'une méthode : public F createF(String line){...} Celle-ci examine le contenu de la ligne, et crée le bon objet. Et voilà ! Ainsi, tu n'as plus besoin d'un code de création complexe dans F !
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test dans get (c pas top).
car mon but serai de creer des objets qui heritent de F sans modifier ma methode get.
Tu veux générer de nouvelles sous-classes sans modifier le code de ta classe de création d'objet (maintenant FFactory) ? Là, tu risques de devoir faire appel à la magie noire Java...
Si c'est stocké dans un fichier on peut très bien y mettre aussi le nom de la classe à charger, comme ca dans le factory on peut avoir une méthode qui fait :
public F build(Strinf classeName) { Class c = Class.forName(classeName); return (F)c.newInstance(); }
Olivier
J'ai une classe F, deux classes C1 et C2 qui heritent de F.
Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas).
cet objet, je l'ajoute a une liste d'objet F.
Maintenant je veux recuperer un objet F de la liste par une methode
get. Ma liste d'objet F est stockée dans un fichier.
quand je recupere tous les attributs de objet F, je sais si cet objet
est C1 ou C2.
donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui
herite de F. Je vais avoir un nouveau test dans ma methode get pour
savoir si cet objet est C3.
Déja entendu parler de design patterns ? Et en particulier du design
pattern "factory" ? Parce que c'est exactement conçu pour ce type de
situation :
tu as un certain nombre d'objets en entrée (dans ton cas une chaîne de
caractères ou un tableau de chaînes).
En fonction de leur valeur, tu vas créer un objet C1 ou C2, mais en tout
cas un objet F. Je te proposes la chose suivante :
- tu crées une classe FFactory, qui crée des objets de classe F.
- Cette classe n'a qu'une méthode : public F createF(String line){...}
Celle-ci examine le contenu de la ligne, et crée le bon objet.
Et voilà !
Ainsi, tu n'as plus besoin d'un code de création complexe dans F !
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000
test dans get (c pas top).
car mon but serai de creer des objets qui heritent de F sans modifier
ma methode get.
Tu veux générer de nouvelles sous-classes sans modifier le code de ta
classe de création d'objet (maintenant FFactory) ? Là, tu risques de
devoir faire appel à la magie noire Java...
Si c'est stocké dans un fichier on peut très bien y mettre aussi le nom de
la classe à charger, comme ca dans le factory
on peut avoir une méthode qui fait :
public F build(Strinf classeName) {
Class c = Class.forName(classeName);
return (F)c.newInstance();
}
J'ai une classe F, deux classes C1 et C2 qui heritent de F. Un utilisateur veut creer un objet F (C1 ou C2 je ne sais pas). cet objet, je l'ajoute a une liste d'objet F. Maintenant je veux recuperer un objet F de la liste par une methode get. Ma liste d'objet F est stockée dans un fichier. quand je recupere tous les attributs de objet F, je sais si cet objet est C1 ou C2. donc pour le creer je fais un new C1(...) ou new C2(...)
Mon probleme est donc si je veux creer plus tard un objet C3 qui herite de F. Je vais avoir un nouveau test dans ma methode get pour savoir si cet objet est C3.
Déja entendu parler de design patterns ? Et en particulier du design pattern "factory" ? Parce que c'est exactement conçu pour ce type de situation : tu as un certain nombre d'objets en entrée (dans ton cas une chaîne de caractères ou un tableau de chaînes). En fonction de leur valeur, tu vas créer un objet C1 ou C2, mais en tout cas un objet F. Je te proposes la chose suivante : - tu crées une classe FFactory, qui crée des objets de classe F. - Cette classe n'a qu'une méthode : public F createF(String line){...} Celle-ci examine le contenu de la ligne, et crée le bon objet. Et voilà ! Ainsi, tu n'as plus besoin d'un code de création complexe dans F !
et apres si j'ai 1000 objets qui heritent de F, je vais avoir 1000 test dans get (c pas top).
car mon but serai de creer des objets qui heritent de F sans modifier ma methode get.
Tu veux générer de nouvelles sous-classes sans modifier le code de ta classe de création d'objet (maintenant FFactory) ? Là, tu risques de devoir faire appel à la magie noire Java...
Si c'est stocké dans un fichier on peut très bien y mettre aussi le nom de la classe à charger, comme ca dans le factory on peut avoir une méthode qui fait :
public F build(Strinf classeName) { Class c = Class.forName(classeName); return (F)c.newInstance(); }