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

  FORUM HardWare.fr
  Programmation
  Java

  [K.D.KOL] runtime class d'un Object et polymorphisme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[K.D.KOL] runtime class d'un Object et polymorphisme

n°655233
boulax
Inserer phrase hype en anglais
Posté le 25-02-2004 à 22:30:10  profilanswer
 

Bonjour, une petite reflexion sur un choix que j'ai a faire :
 
tout d'abord j'ai une fonction qui prends deux Object en parametres, et j'aimerai savoir si la ligne de code suivante me permettra de savoir s'ils sont du meme type :
 

Code :
  1. value1.getClass().equals(value2.getClass())


 
De plus je m'interroge sur cette façon de faire. Mon problème est que je dois avoir un algo modulaire, cad que le meme algo peut s'executer avec differents mode de calcul mais ayant les memes methodes, a la maniere d'une interface.
 
En realité j'utilise une classe abstraite dans l'algo, sachant bien sur qu'à l'execution cet algo se verra fourni une extension-implementation de la classe abstraite. Et selon cette derniere, on peut avoir differentes valeurs en entrée / valeurs de retour , expliquant le choix de Object lors de la definition de la classe abstraite.
 
Maintenant, les extensions de la classe abstraite doivent redefinir les methodes abstraites avec des object en entré et sortie sachant qu'une telle prendra à l'execution des doubles, l'autre un tableau de byte etc...
 
Bon c'est pas super limpide comme ca donc voila un exemple :
 

Code :
  1. abstract class Modele
  2. {
  3. abstract boolean compare(Object value1, Object value2) ;
  4. abstract Object calculModele (Region r) ;
  5. public Modele()
  6. {
  7. }
  8. }


 

Code :
  1. public class MoyenneTSL extends Modele
  2. {
  3. public boolean compare(Object value1, Object value2)
  4. {
  5. // cette implementation renvoi et attends des double comme representation d'un modele
  6. if ( value1.getClass().equals(value2.getClass()) )
  7. {
  8.   double val1 = ((Double)value1).doubleValue();
  9.   double val2 = ((Double)value2).doubleValue();
  10. [...]
  11. }
  12. public Object calculModele(Region r)
  13. {
  14. [...]
  15. return (Object)new Double(sommeT/nbPixel);
  16. }
  17. }

 
 
Je pense que cela peut fonctionner mais je reste perplexe, existe-il une solution plus élégante ? D'ailleurs celle ci est elle fonctionnelle ?
 
N'hesitez pas a me demander des precisions, jsuis la dessus depuis quelques jours, le sens des réalités commence a m'échapper peu à peu  :heink:


Message édité par boulax le 25-02-2004 à 22:32:20
mood
Publicité
Posté le 25-02-2004 à 22:30:10  profilanswer
 

n°655859
LAs3R
Posté le 26-02-2004 à 07:59:43  profilanswer
 

ca te permettra bien de vérifier qu'ils sont du meme type, mais c'est pas vraiement normal que tu fasses ca.
 
par contre je comprends pas :
1. pourquoi tu testes si tes instances sont du meme type ?  
2. a quoi sert ta methode "compare" ?


Message édité par LAs3R le 26-02-2004 à 08:22:18
n°655953
boulax
Inserer phrase hype en anglais
Posté le 26-02-2004 à 10:43:31  profilanswer
 

LAs3R a écrit :

ca te permettra bien de vérifier qu'ils sont du meme type, mais c'est pas vraiement normal que tu fasses ca.
 
par contre je comprends pas :
1. pourquoi tu testes si tes instances sont du meme type ?  
2. a quoi sert ta methode "compare" ?


 
1. Euh ouais en fait je devrais tester que ce sont tout les deux des objets "Double" tant qu'a faire.
 
2. Jvais essayer d'etre plus concert. La j'implemente un algo de segmentation multiresolution d'une image. (ca sert a separer le fond des objets) Et pour cela, on compare des bouts d'images à une image de reference pour savoir s'ils contiennent ou non des objets. En fait lorsque l'on compare des zones d'images, on compare leur 'modele', une representation particuliere.
 
L'algo se sert d'une classe abstraite 'modele' et a l'execution aura a la place une extension qui permettra de calculer le modele et de le comparer a celui d'une autre zone. la 'valeur' du modele peut etre theoriquement n'importe quoi (selon le modele utilisé) mais si on commence avec un modele, on le garde tout au long d'une execution.  
 
La méthode compare prends deux objets qui sont les valeurs de deux zone selon son modele et renvoi si oui ou non elles sont assez similaire pour etre considérée comme identique. (cad si la zone testée peut etre considéré comme faisant partie du fond de l'image)

n°656002
LAs3R
Posté le 26-02-2004 à 11:37:18  profilanswer
 

Ok,
donc a mon avis tu n'as pas besoin de faire le test d'egalite entre les classes des instances, caste directement. Si les objets ne sont pas pas du meme type tu auras une ClassCastException qui sera bien assez clair à mon avis
 

Code :
  1. public boolean compareZone(Object o1, Objet o2) {
  2. double val1 = ((Double)o1).doubleValue();
  3. double val2 = ((Double)o2).doubleValue();
  4. ...
  5. }


Message édité par LAs3R le 26-02-2004 à 11:37:30
n°656354
R3g
fonctionnaire certifié ITIL
Posté le 26-02-2004 à 15:10:15  profilanswer
 

Je suis pas sur d'avoir bien compris ce que tu veux, mais j'ai une suggestion à faire : que dirais-tu d'avoir une classe ModeleFactory, qui aurait des méthodes genre public Modele getModele(Double param).
En fait une méthode getModele par type de paramètre que tu est susceptible d'avoir, et la méthode renvoie une instance de la sous-classe de Modele qui correspond à ce type de paramètre. J'espère avoir été clair et pas trop à coté de la plaque.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°656377
boulax
Inserer phrase hype en anglais
Posté le 26-02-2004 à 15:27:50  profilanswer
 

Ouep j'ai tres bien compris, seulement pour un meme type de parametres je suis susceptible d'avoir plusieurs modele différents. En fait j'en sais trop rien vu que la je travaille avec un seul modele en test mais je dois etre prevoyant.
 
Pour re-tenter une explication, je dirais que ce que je cherche a avoir est un algo abstrait (du moins concernant le calcul des modeles) et que du coup la classe abstraite semble etre une bonne solution. L'emploi d'objet me permet d'avoir la souplesse souhaitée au nivo des types en entré/sortie donc je pense que je vais faire comme ca.
 
Merci pour ton idée ;-)


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

  [K.D.KOL] runtime class d'un Object et polymorphisme

 

Sujets relatifs
"unable to initialize threads: cannot find class java/lang/Thread"JSP [Tomcat + Eclipse + Sysdeo] pb de visibilité des .class
[Résolu]nOOb, problème de class pathAppler une méthode C++ dans un shared object
Business objectClass Align
univers Bussiness object[C++] pb avec un return d une fonction dans une class
Trouver toutes les instances d'un type de class connu[PHP] include et class : petite question
Plus de sujets relatifs à : [K.D.KOL] runtime class d'un Object et polymorphisme


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