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

Couple, et interface de tableau

8 réponses
Avatar
Nicolas M
Bonjour,

j'aimerai faire un couple tout bête avec un élément A et un élément B,
est-ce que java (1.6) propose (enfin) une classe/collection suceptible
d'être intéressante, ou faut il que je passe par une classe utilitaire
"couple" paramétrée par deux types ?

Si c'est le cas, existe t-il une interface ou autre, qui me permette
d'appeler un objet Couple c de la manière suivante : c[0], c[1] ?
(impossible de me rappeler si c'est en Java que j'avais vu ce mécanisme,
et impossible de retrouver comment faire)

Merci d'avance !

Nicolas

8 réponses

Avatar
Al
Bonjour,

j'aimerai faire un couple tout bête avec un élément A et un élément B,
est-ce que java (1.6) propose (enfin) une classe/collection suceptible
d'être intéressante, ou faut il que je passe par une classe utilitaire
"couple" paramétrée par deux types ?


le plus simple et ca se code en 3 minutes depuis eclipse avec les
accesseurs.

mais ne vaut t'il pas mieux faire une classe pour ton problème


plutot que
class <T,U> Paire<T,U> {
private T premier;
private U second;
... et les accessues
}

pourquoi ne pas créer

class Mariage {
private Homme epoux;
private Femme epouse;
... accesseurs
}

class Abricot {
private Noix noyau;
private Aliment chair;
...
}

et là très vite tu va trouver que des méthodes utiles apparaissent....
la classe paire pourrait néanmoins te servir en héritage, surtout si tu
a des opérations générique (échange entre couple, arbre binaire)



Si c'est le cas, existe t-il une interface ou autre, qui me permette
d'appeler un objet Couple c de la manière suivante : c[0], c[1] ?


souvent les débutants cherchent les moyens de ne pas créer de classe.
mon expérience est qu'il est à terme toujours payant de créer une petite
classe de ce type.

au début on peut la mettre en classe interne (eh ou moi aussi je tombe
dans le panneau), mais quasiment toujours elle fini par grossir et
prendre du métier.

d'expérience il ne fait pas chercher à limiter le nombre de classe, au
contraire.
ce qu'il faut éviter ce sont les grosses classe, et les grosses méthode,
et donc les découper.



(impossible de me rappeler si c'est en Java que j'avais vu ce mécanisme,
et impossible de retrouver comment faire)


tu peux utiliser un tableau

Personne[] couple=new Personne[]{monsieur,madame};
System.println("Bienvenue chez "+couple[0].getNom()+" et
"+couple[1].getNom());

c'est de la mauvaise paresse la plupart du temps car le couple devra
porter des méthodes métiers...



Merci d'avance !

Nicolas


Avatar
Nicolas M


Bonjour,

j'aimerai faire un couple tout bête avec un élément A et un élément B,
est-ce que java (1.6) propose (enfin) une classe/collection suceptible
d'être intéressante, ou faut il que je passe par une classe utilitaire
"couple" paramétrée par deux types ?


le plus simple et ca se code en 3 minutes depuis eclipse avec les
accesseurs.

mais ne vaut t'il pas mieux faire une classe pour ton problème


Je ne suis pas spécialement débutant,

mais je ne comprends pas pourqoi java ne fourni pas une sorte de
collection qui représente deux éléments, c'est tellement courant ...


Avatar
Raphael Tagliani
Et pourquoi pas une HashMap<?,?>?

Nicolas M wrote:


Bonjour,

j'aimerai faire un couple tout bête avec un élément A et un élément
B, est-ce que java (1.6) propose (enfin) une classe/collection
suceptible d'être intéressante, ou faut il que je passe par une
classe utilitaire "couple" paramétrée par deux types ?


le plus simple et ca se code en 3 minutes depuis eclipse avec les
accesseurs.

mais ne vaut t'il pas mieux faire une classe pour ton problème


Je ne suis pas spécialement débutant,

mais je ne comprends pas pourqoi java ne fourni pas une sorte de
collection qui représente deux éléments, c'est tellement courant ...




Avatar
Al

Je ne suis pas spécialement débutant,
désolé... j'ai tendance a trouver que moins de 20 ans d'expérience c'est

jeune... ;-)
et je tombe aussi dans le panneau de la fausse économie, de la peur
d'ajouter des classes, après 25 ans de programmation... avec le temps je
comprend que c'est une mauvaise économie...

en passant regarde les bouquins sur le refactoring (et donc sur les
design pattern)... c'est bon pour plus avoir peur des petites classes.

mais je ne comprends pas pourqoi java ne fourni pas une sorte de
collection qui représente deux éléments, c'est tellement courant ...


parce que faire une paire c'est quelques secondes

parce que les template sont récents, et que l'intérêt d'une classe c'est
de l'utiliser pour des méthodes génériques, et que a par les Map il 'y
a pas d'algorithme utilisant des paires...

mais en fait il y a plein de paires dans les Map, ce sont les Entry...

tu trouve certainement plein de paires, mais chacune a son objectif...
et l'avantage c'est que les paires d'un jour devienne des trio, voir des
bandes...

sinon le tableau ca marche, mais très vite tu te rendra compte que faire
une classe à 2 balles c'est utile...

Avatar
Aris


Bonjour,

j'aimerai faire un couple tout bête avec un élément A et un élément
B, est-ce que java (1.6) propose (enfin) une classe/collection
suceptible d'être intéressante, ou faut il que je passe par une
classe utilitaire "couple" paramétrée par deux types ?


le plus simple et ca se code en 3 minutes depuis eclipse avec les
accesseurs.

mais ne vaut t'il pas mieux faire une classe pour ton problème


Je ne suis pas spécialement débutant,

mais je ne comprends pas pourqoi java ne fourni pas une sorte de
collection qui représente deux éléments, c'est tellement courant ...
Je répondrai que si tu dois utiliser un type générique pour réunir deux

éléments, c'est qu'il y a une entité que tu n'as pas relevé dans ton
design de classes, parce qu'il y a un sens à mettre ces deux objets
ensemble. Si tu dois envoyer ces deux objets ou les retourner par paire,
c'est effectivement qu'il te manque une classe.
Je pense qu'il n'y a pas de classe "paire" dans java parce qu'il n'y a
pas de design pattern correct utilisant des paires, ceux que l'on
pourrait développer sont cassés par design. En tout cas je ne vois pas
de contre-exemple comme ça.



Avatar
Nicolas M

mais je ne comprends pas pourqoi java ne fourni pas une sorte de
collection qui représente deux éléments, c'est tellement courant ...
Je répondrai que si tu dois utiliser un type générique pour réunir deux

éléments, c'est qu'il y a une entité que tu n'as pas relevé dans ton
design de classes, parce qu'il y a un sens à mettre ces deux objets
ensemble. Si tu dois envoyer ces deux objets ou les retourner par paire,
c'est effectivement qu'il te manque une classe.


Ah mais ça je veux bien le croire, déjà il me manque une classe couple ;)

Même si ça prend deux secondes à faire une classe Couple, je trouve
qu'une classe java prédéfinie permettrait d'éviter du travail
supplémentaire et pourrait éviter certaines erreurs (il pourrait par
exemple y avoir une classe couple parametrée, avec les méthodes
hashcode, tostring, equals, des getters, setters déjà définis).

Ensuite on peut toujours créer une classe qui modélise le couple dans
notre schéma de classes, mais en créant tout simplement une sous classe
de la classe couple paramétrée par nos deux éléments (et éventuellement
redéfinir, ajouter des méthodes)

Peut être y a t'il des choses que je ne vois pas, mais ça me parait pas
stupide comme démarche

Nicolas


Avatar
Aris

mais je ne comprends pas pourqoi java ne fourni pas une sorte de
collection qui représente deux éléments, c'est tellement courant ...
Je répondrai que si tu dois utiliser un type générique pour réunir

deux éléments, c'est qu'il y a une entité que tu n'as pas relevé dans
ton design de classes, parce qu'il y a un sens à mettre ces deux
objets ensemble. Si tu dois envoyer ces deux objets ou les retourner
par paire, c'est effectivement qu'il te manque une classe.


Ah mais ça je veux bien le croire, déjà il me manque une classe couple ;)

Même si ça prend deux secondes à faire une classe Couple, je trouve
qu'une classe java prédéfinie permettrait d'éviter du travail
supplémentaire et pourrait éviter certaines erreurs (il pourrait par
exemple y avoir une classe couple parametrée, avec les méthodes
hashcode, tostring, equals, des getters, setters déjà définis).

Ensuite on peut toujours créer une classe qui modélise le couple dans
notre schéma de classes, mais en créant tout simplement une sous classe
de la classe couple paramétrée par nos deux éléments (et éventuellement
redéfinir, ajouter des méthodes)

Peut être y a t'il des choses que je ne vois pas, mais ça me parait pas
stupide comme démarche

Nicolas
Je pense que s'il n'y a pas de classe prédéfinie, c'est à cause d'une

limitation du langage : pour que ta classe Couple (parlons d'un couple
de mariés) aie un sens, il faut que les getters et setters aient comme
nom le paramètre que tu veux obtenir/changer.
or un template java ne te permetra que de faire un getElem1() et
getElem2() et pas getMari() et getFemme() (qui en fait ne sont pas
ordonnés : il n'y a pas de raison logique de définir le mari à 1 et la
femme à 2 ou inversement).
Je ne sais pas s'il y a moyen de faire une classe dérivée d'une classe
paramétrée. Mais dans ce cas il faudrait redéfinir les getters etc. bref
autant de travail que de le faire soi-même.



Avatar
Nicolas M

Je pense que s'il n'y a pas de classe prédéfinie, c'est à cause d'une
limitation du langage : pour que ta classe Couple (parlons d'un couple
de mariés) aie un sens, il faut que les getters et setters aient comme
nom le paramètre que tu veux obtenir/changer.
or un template java ne te permetra que de faire un getElem1() et
getElem2() et pas getMari() et getFemme() (qui en fait ne sont pas
ordonnés : il n'y a pas de raison logique de définir le mari à 1 et la
femme à 2 ou inversement).



Je ne suis pas d'accord, un couple a un premier élément et un second
élément, ce n'est pas un ensemble à deux éléments.

Je ne sais pas s'il y a moyen de faire une classe dérivée d'une classe
paramétrée. Mais dans ce cas il faudrait redéfinir les getters etc. bref
autant de travail que de le faire soi-même.


C'est possible :
public class Marries extends Couple<Human,Human>

après il n'y a pas besoin de redéfinir quoi que soit,
on peut éventuellement ajouter des méthodes redondantes getMari() et
getFemme() qui invoquent getElement1() et getElement2(), mais c'est
juste pour une meilleure compréhension.

Nicolas