Instanciation dynamique d'un attribut d'une classe - Java - Programmation
Marsh Posté le 18-08-2009 à 14:07:15
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....
Marsh Posté le 18-08-2009 à 14:27:40
Comment tu peux avoir accès aux méthodes de B si t'as instancié un A ?
Marsh Posté le 18-08-2009 à 14:33:24
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
Marsh Posté le 18-08-2009 à 15:21:36
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 ?
Marsh Posté le 18-08-2009 à 15:52:03
oué c'est comme ça que j'ai fait en fait...
Suivant le "Complex Java example", je voulais que suivant le main() :
Code :
|
jussque là nikel, mais quand tu fais appel à
Code :
|
la suite devienne :
Code :
|
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 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... mais bon des fois quand tu as la tête trop dans le code...
merci à toi
Marsh Posté le 19-08-2009 à 10:46:44
brisssou a écrit : la vraie question c'est "pourquoi ?". |
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
Marsh Posté le 19-08-2009 à 11:09:41
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 ?
Marsh Posté le 19-08-2009 à 11:21:42
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...
Marsh Posté le 23-08-2009 à 21:56:22
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 ?
Marsh Posté le 18-08-2009 à 13:49:38
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...
Avec les classes (implémentant ou héritant de la Classe Attribut):
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