Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1099 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Instanciation dynamique d'un attribut d'une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Instanciation dynamique d'un attribut d'une classe

n°1916181
tiyo33
Posté le 18-08-2009 à 13:49:38  profilanswer
 

Bonjour,
 
Mon titre n'est peut être pas trés clair :s
En fait j'aurais besoin, à l'instanciation d'une classe, suivant les paramètres passés par l'utilisateur, de changer un attribut d'une classe...

Code :
  1. Classe Exemple{
  2.       private Attribut attribut;
  3.       public void init(String str){
  4.             if(str=="A" ){
  5.                     attribut = new AttributA();
  6.             }
  7.              else {
  8.                     attribut = new AttributB();
  9.            }
  10. }


Avec les classes (implémentant ou héritant de la Classe Attribut):

Code :
  1. Classe AttributA{
  2.          private String champA;
  3.          public void methodA();
  4.          //....
  5. }
  6. Classe AttributB{
  7.         private String champB1;
  8.         private String champB2;
  9.        public void methodB();
  10. }


 
Les méthodes et champs dans les classes Attributs A et B complètements différentes.
J'aimerai que l'utilisateur , si il passe le paramètre A dans l'initialisation, il n'est accès que aux méthodes de AttributA...  
 
J'ai pas trouvé réponse à mon problème pour l'instant, donc j'aimerai savoir si c'est possible :)
 
Merci

mood
Publicité
Posté le 18-08-2009 à 13:49:38  profilanswer
 

n°1916185
Deamon
Posté le 18-08-2009 à 14:00:57  profilanswer
 

Et c'est quoi le problème avec ton 1er code ?

n°1916192
tiyo33
Posté le 18-08-2009 à 14:07:15  profilanswer
 

Dans mon main, comme les classes AttributA et B implémentent l'interface Attribut(qui regroupe toutes les méthodes déclarées dans AttributA et B), qund je déclare un object de type Attribut, j'ai accées aux méthodes de AttributA et B, or je ne veut avoir accès qu'à une seule partie....

n°1916200
Deamon
Posté le 18-08-2009 à 14:27:40  profilanswer
 

Comment tu peux avoir accès aux méthodes de B si t'as instancié un A ?  :??:

n°1916202
tiyo33
Posté le 18-08-2009 à 14:33:24  profilanswer
 

oué..... c'est pas possible, je viens de m'en rendre compte. Mais ce que je voulais c'est instancier un A et avoir accés seulement aux méthodes de A. En gros j'ai fait de la délégation... vais me débrouiller autrement
merci

n°1916225
Deamon
Posté le 18-08-2009 à 15:21:36  profilanswer
 

C'est ça non : http://en.wikipedia.org/wiki/Delegation_pattern ?
C'est ce que tu veux ou ce que tu veux pas ?

 

Et c'est quoi le contexte de ton problème ?


Message édité par Deamon le 18-08-2009 à 15:22:41
n°1916235
tiyo33
Posté le 18-08-2009 à 15:52:03  profilanswer
 

oué c'est comme ça que j'ai fait en fait...
Suivant le "Complex Java example", je voulais que suivant le main() :  

Code :
  1. C c = new C();
  2. c.f();     // output: A: doing f()
  3. c.g();     // output: A: doing g()


jussque là nikel, mais quand tu fais appel à

Code :
  1. c.toB();


la suite devienne :

Code :
  1. c.anotherMethod();     // output: B: doing anotherMethod(), qui ne s'appelle plus f() du coup
  2. c.g();     // output: B: doing g()


J'ai un peu de mal à expliquer, mais de toute façon ce n'est pas possible... J'ai aussi vu du coté Decorator mais ça ne me convient pas non plus.
 
En fait il me faudrait, avant la compilation savoir quel méthode l'utilisateur va appeller :pt1cable: tout simplement impossible...  
Un peu plus de réflexion et de bon sens ne me fera pas de mal la prochaine fois... avant de poser des questions débiles... :pfff:  mais bon des fois quand tu as la tête trop dans le code... :)
 
merci à toi

n°1916439
brisssou
8-/
Posté le 19-08-2009 à 09:58:47  profilanswer
 

la vraie question c'est "pourquoi ?".
 
c'est quoi le but de ce que tu veux faire ? c'est quoi le fonctionnel ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1916468
tiyo33
Posté le 19-08-2009 à 10:46:44  profilanswer
 

brisssou a écrit :

la vraie question c'est "pourquoi ?".
 
c'est quoi le but de ce que tu veux faire ? c'est quoi le fonctionnel ?


 
En fait, je propose une sorte d'API pour une base de données biologique. Je fournit donc à l'utilisateur des objets pour qu'il puisse requéter cett Bdd.
Lors de l'initialisation, il doit choisir entre deux méthodes de recherches sur cette bdd. Je voulais donc un objet polymorphe qui puisse,  
selon la méthode de recherche choisie, avoir des attributs et des méthodes différentes. Je voyais pas trop comment faire, donc je me suis penché sur du décorator  
ou de la delegation. Mais cela me donnais un objet ayant les méthodes des deux méthodes différentes et m'obligais à lancer des exceptions dés que l'utilisateur tentais d'utiliser
une méthode non correspondante à sa méthode de recherche.
J'ai donc fait autrement, l'utilisateur appelle mon object par une méthode get() qui lui renvoie le bon object selon sa méthode
et je l'oblige caster selon la méthode choisie... Il se retrouve donc bien avec un objet avec les seules méthodes qui lui correspondent.
Je sais pas si je me fait bien comprendre, mais si t'as une idée je suis preneur. Le fait de l'obliger à caster l'object, je trouve pas ça trés beau....
En tout cas, ça fonctionne :)
Merci
 

n°1916497
brisssou
8-/
Posté le 19-08-2009 à 11:09:41  profilanswer
 

est-ce que t'es obligé de différentier à ce point tes Objets d'accès à la base ?
 
Les méthodes et leurs paramètres sont si éloignés que ça pour tes deux objets ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le 19-08-2009 à 11:09:41  profilanswer
 

n°1916514
tiyo33
Posté le 19-08-2009 à 11:21:42  profilanswer
 

En fait, pour l'instant, il ne sont pas si éloignés que ça, et je pourrai m'en tirer avec de la décoration, mais une troisième méthode de recherche est en train d'être developpée avec de nouvelles relations dans la bdd,et sera complètement différentes des deux autres par contre... donc je pensais au problème avant qu'il arrive en quelque sorte...

n°1917692
Flaie
No it's necessary
Posté le 23-08-2009 à 21:56:22  profilanswer
 

Et pourquoi ne pas avoir deux (trois) classes qui représentent les méthodes de recherche dans ta base de données, qui implémentent une interface qui contient les différentes méthodes style select ou autres je ne sais pas ce que tu veux proposer. De cette façon ton API n'aura qu'a proposer une méthode setSearchAlgorithm qui permettra à l'utilisateur de séléctionner celui qui lui fait envie.
 
Sinon tu peux utiliser les generics et passer la classe de rechercher désirée directement si vraiment tu veux absolument des classes avec des méthodes différentes.
 
As-tu vraiment un avantage à proposer des méthodes qui ont des noms et signatures différentes pour chacune de tes classes de recherche ?


---------------
Always wear a camera!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Instanciation dynamique d'un attribut d'une classe

 

Sujets relatifs
Utilité classe CustomerOrderStatus EnumLinkage d'une bibliothèque dynamique
VB label dynamiqueMacro Excel : tableau dynamique
[VBS] Tableau dynamique croiséCreation dynamique d'accesseurs
surcharger une classe / prototype[résolu]variables de classe; raccourcis syntaxiques
déclarer une classe dans un .cppNorme de Nommage des classe Java
Plus de sujets relatifs à : Instanciation dynamique d'un attribut d'une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR