Recherche un objet à partir de sa classe abstraite : comment faire ?
3 réponses
Vox
Voila, j'ai un petit souci concernant la recherche d'un objet dans une
liste.
Pour résumé, j'ai une classe "avion" qui contient une liste d'objet de
classe "point". cette liste (exploitée par l'interface List) correspond au
plan de vol de l'avion.
La classe "point" est une classe abstraite qui a a pour seule et unique
fonction d'associer un point à un "avion" et une "balise".
La classe point est dérivée en plusieurs types de point pour ajouter des
informations de vol.
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie du
plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas
instanciable (c'est une classe abstraite).
Le problème n'est pas résolu non plus si la classe point n'est plus
abstraite : je me rerouve avec pas mal d'erreurs dues aux methodes
abstraites définies dans cette classe.
Donc ma question est la suivante : existe-t-il un moyen élégant pour
rechercher un objet à partir de sa classe abstraite ?
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
Sebastien Mathy
Vox wrote:
Voila, j'ai un petit souci concernant la recherche d'un objet dans une liste.
Pour résumé, j'ai une classe "avion" qui contient une liste d'objet de classe "point". cette liste (exploitée par l'interface List) correspond au plan de vol de l'avion.
La classe "point" est une classe abstraite qui a a pour seule et unique fonction d'associer un point à un "avion" et une "balise".
La classe point est dérivée en plusieurs types de point pour ajouter des informations de vol.
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie du plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas instanciable (c'est une classe abstraite).
Le problème n'est pas résolu non plus si la classe point n'est plus abstraite : je me rerouve avec pas mal d'erreurs dues aux methodes abstraites définies dans cette classe.
Donc ma question est la suivante : existe-t-il un moyen élégant pour rechercher un objet à partir de sa classe abstraite ?
J'ai un peu de mal a comprendre ton probleme mais a mon avis tu as un probleme de conception : est-ce necessaire de mettre un avion dans un point? Les points sont deja present dans le plan de vol.
Vox wrote:
Voila, j'ai un petit souci concernant la recherche d'un objet dans une
liste.
Pour résumé, j'ai une classe "avion" qui contient une liste d'objet de
classe "point". cette liste (exploitée par l'interface List) correspond au
plan de vol de l'avion.
La classe "point" est une classe abstraite qui a a pour seule et unique
fonction d'associer un point à un "avion" et une "balise".
La classe point est dérivée en plusieurs types de point pour ajouter des
informations de vol.
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie
du plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas
instanciable (c'est une classe abstraite).
Le problème n'est pas résolu non plus si la classe point n'est plus
abstraite : je me rerouve avec pas mal d'erreurs dues aux methodes
abstraites définies dans cette classe.
Donc ma question est la suivante : existe-t-il un moyen élégant pour
rechercher un objet à partir de sa classe abstraite ?
J'ai un peu de mal a comprendre ton probleme mais a mon avis tu as un
probleme de conception : est-ce necessaire de mettre un avion dans un
point?
Les points sont deja present dans le plan de vol.
Voila, j'ai un petit souci concernant la recherche d'un objet dans une liste.
Pour résumé, j'ai une classe "avion" qui contient une liste d'objet de classe "point". cette liste (exploitée par l'interface List) correspond au plan de vol de l'avion.
La classe "point" est une classe abstraite qui a a pour seule et unique fonction d'associer un point à un "avion" et une "balise".
La classe point est dérivée en plusieurs types de point pour ajouter des informations de vol.
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie du plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas instanciable (c'est une classe abstraite).
Le problème n'est pas résolu non plus si la classe point n'est plus abstraite : je me rerouve avec pas mal d'erreurs dues aux methodes abstraites définies dans cette classe.
Donc ma question est la suivante : existe-t-il un moyen élégant pour rechercher un objet à partir de sa classe abstraite ?
J'ai un peu de mal a comprendre ton probleme mais a mon avis tu as un probleme de conception : est-ce necessaire de mettre un avion dans un point? Les points sont deja present dans le plan de vol.
Hervé AGNOUX
Vox wrote:
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie du plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas instanciable (c'est une classe abstraite).
Même si point avait été instanciable, cela n'aurait pas marché, car indexOf recherche dans la liste une instance égale à celle passée en paramètre.
Donc ma question est la suivante : existe-t-il un moyen élégant pour rechercher un objet à partir de sa classe abstraite ?
C'est une question philosophique très intéressante !
Je n'ai pas très bien compris, mais pour l'élégance cela peut certainement se faire à partir de Arrays.binarySearch(Object, Object, Comparator), en te créant ton comparateur (mais il faudrait pouvoir ordonner des points, je ne sais pas si c'est possible ? )
Pour le coté prosaïque, si tu n'as pas un très grand nombre de points, il me semble qu'il serait plus facile de créer, au niveau de ta classe point abstraite, un méthode renvoyant ok si le point contient "this" et "balise", et d'utiliser ça en plaçant ta liste de points dans un tableau que tu balaieras jusqu'à trouver le bon élément.
-- Hervé AGNOUX http://www.diaam-informatique.com
Vox wrote:
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie
du plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas
instanciable (c'est une classe abstraite).
Même si point avait été instanciable, cela n'aurait pas marché, car indexOf
recherche dans la liste une instance égale à celle passée en paramètre.
Donc ma question est la suivante : existe-t-il un moyen élégant pour
rechercher un objet à partir de sa classe abstraite ?
C'est une question philosophique très intéressante !
Je n'ai pas très bien compris, mais pour l'élégance cela peut certainement
se faire à partir de Arrays.binarySearch(Object, Object, Comparator), en te
créant ton comparateur (mais il faudrait pouvoir ordonner des points, je ne
sais pas si c'est possible ? )
Pour le coté prosaïque, si tu n'as pas un très grand nombre de points, il me
semble qu'il serait plus facile de créer, au niveau de ta classe point
abstraite, un méthode renvoyant ok si le point contient "this" et "balise",
et d'utiliser ça en plaçant ta liste de points dans un tableau que tu
balaieras jusqu'à trouver le bon élément.
A partir d'une balise quelconque, je dois trouver si celle-ci fait partie du plan de vol de l'avion courant et pour çà, j'ai ecris ceci :
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
evidement, je me fais jeter dans la mesure ou point n'est pas instanciable (c'est une classe abstraite).
Même si point avait été instanciable, cela n'aurait pas marché, car indexOf recherche dans la liste une instance égale à celle passée en paramètre.
Donc ma question est la suivante : existe-t-il un moyen élégant pour rechercher un objet à partir de sa classe abstraite ?
C'est une question philosophique très intéressante !
Je n'ai pas très bien compris, mais pour l'élégance cela peut certainement se faire à partir de Arrays.binarySearch(Object, Object, Comparator), en te créant ton comparateur (mais il faudrait pouvoir ordonner des points, je ne sais pas si c'est possible ? )
Pour le coté prosaïque, si tu n'as pas un très grand nombre de points, il me semble qu'il serait plus facile de créer, au niveau de ta classe point abstraite, un méthode renvoyant ok si le point contient "this" et "balise", et d'utiliser ça en plaçant ta liste de points dans un tableau que tu balaieras jusqu'à trouver le bon élément.
-- Hervé AGNOUX http://www.diaam-informatique.com
Olivier Thomann
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ; Si this.plan_de_vol contient les points de l'avion courant. Tu devrais
plutôt faire en sorte que le plan de vol contienne uniquement des balises et dans ce cas en faisant: int idx = this.plan_de_vol.indexOf(balise);
tu auras implicitement ta réponse vu que tu n'utilises que les balises de l'avion courant.
Idéalement tu devrais ordonner tes balises d'une certaine manière de façon à pouvoir utiliser des méthodes de recherche plus optimisé. Une recherche linéraire est rapidement lente quand le nombre de balises augmente. Tu devrais peut-être utilisé le temps comme façon d'ordonner les balises. Tout dépend de l'information que tu as dans tes balises. -- Olivier
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ;
Si this.plan_de_vol contient les points de l'avion courant. Tu devrais
plutôt faire en sorte que le plan de vol contienne uniquement des
balises et dans ce cas en faisant:
int idx = this.plan_de_vol.indexOf(balise);
tu auras implicitement ta réponse vu que tu n'utilises que les balises
de l'avion courant.
Idéalement tu devrais ordonner tes balises d'une certaine manière de
façon à pouvoir utiliser des méthodes de recherche plus optimisé. Une
recherche linéraire est rapidement lente quand le nombre de balises
augmente. Tu devrais peut-être utilisé le temps comme façon d'ordonner
les balises.
Tout dépend de l'information que tu as dans tes balises.
--
Olivier
int idx = this.plan_de_vol.indexOf(new point(this,balise)) ; Si this.plan_de_vol contient les points de l'avion courant. Tu devrais
plutôt faire en sorte que le plan de vol contienne uniquement des balises et dans ce cas en faisant: int idx = this.plan_de_vol.indexOf(balise);
tu auras implicitement ta réponse vu que tu n'utilises que les balises de l'avion courant.
Idéalement tu devrais ordonner tes balises d'une certaine manière de façon à pouvoir utiliser des méthodes de recherche plus optimisé. Une recherche linéraire est rapidement lente quand le nombre de balises augmente. Tu devrais peut-être utilisé le temps comme façon d'ordonner les balises. Tout dépend de l'information que tu as dans tes balises. -- Olivier