Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche un objet à partir de sa classe abstraite : comment faire ?

3 réponses
Avatar
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 ?

3 réponses

Avatar
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.

Avatar
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

Avatar
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