[java] Philosophie java

Philosophie java [java] - Java - Programmation

Marsh Posté le 11-05-2004 à 11:23:55    

Bien j'ai un peu de mal a voir comment un programme java est qualifie de bien "structure". En clair je me trouve dans une situation un peu etrange : je desire trier simplement un tableau en passant en parametre a la fonction sort() le tableau et la fonction de comparaison.
Le probleme c'est que la fonction de comparaison est une interface. Pour implementer l'interface (Comparator), j'ai donc besoin de creer une classe avec le mot cle "implements" juste pour creer ma fonction de comparaison pour le trie du tableau.
Conclusion : je sais que java est fortement oriente objet, mais dans le cas d'un tri d'un pauvre tableau, suis-je vraiment oblige de creer une classe dans le but d'implementer l'interface ?
Je trouve ceci un peu etrange dans la mesure ou ma classe ne reflete nullement un objet mais une chose elementaire ; d'ou ma question :)

Reply

Marsh Posté le 11-05-2004 à 11:23:55   

Reply

Marsh Posté le 11-05-2004 à 11:29:00    

oui, tu dois.

Reply

Marsh Posté le 11-05-2004 à 11:29:23    

tu peux aussi implementer Comparable sur les objet de ta collection ou de ton tableau

Reply

Marsh Posté le 11-05-2004 à 11:31:00    

Giz a écrit :

Bien j'ai un peu de mal a voir comment un programme java est qualifie de bien "structure". En clair je me trouve dans une situation un peu etrange : je desire trier simplement un tableau en passant en parametre a la fonction sort() le tableau et la fonction de comparaison.
Le probleme c'est que la fonction de comparaison est une interface. Pour implementer l'interface (Comparator), j'ai donc besoin de creer une classe avec le mot cle "implements" juste pour creer ma fonction de comparaison pour le trie du tableau.
Conclusion : je sais que java est fortement oriente objet, mais dans le cas d'un tri d'un pauvre tableau, suis-je vraiment oblige de creer une classe dans le but d'implementer l'interface ?
Je trouve ceci un peu etrange dans la mesure ou ma classe ne reflete nullement un objet mais une chose elementaire ; d'ou ma question :)


 
Bin le tri de ton bête tableau se base surement sur des bêtes critères mais faut bien les spécifier quelque part. Ce que tu spécifies c'est quelles sont les conditions pour qu'un objet soit "plus grand, plus petit ou égal" à un autre.
 
Tu veux écrire où ces critères sinon dans une classe? Ecrire une classe ne veut pas dire avoir un fichier .java avec rien que ce code là dedans (voir inner classes)

Reply

Marsh Posté le 11-05-2004 à 11:31:36    

Tu as des méthodes statiques de tri dans la classe java.util.Arrays
Attention, quand même : il faudra que les objets dans ton tableau soient comparables.
 
Et sinon, ta classe reflète une chose pas si élémentaire : c'est un trieur. Et une chose, c'est un objet, aussi.
 
[Edit] grillaid par Darklord et the real --, la classe! :D


Message édité par gfive le 11-05-2004 à 11:32:38
Reply

Marsh Posté le 11-05-2004 à 11:31:55    

'tain, des forumeurs que je connais! :D

Reply

Marsh Posté le 11-05-2004 à 11:33:23    

[:drapo]


---------------
IVG en france
Reply

Marsh Posté le 11-05-2004 à 12:11:19    

Pour un trieur sans état, tu peux faire une unique instance dans le système.
Dans ta classe à trier, tu mets un beau champ statique :
 

Code :
  1. public class Brol {
  2. public static final Comparator BrolTelCritèreComparator = new Comparator() {
  3.   public int compare(Object o1, Object o2) {
  4.      //blabla
  5.   }
  6. };
  7. //le reste de la classe
  8. }


 
Ce qui a pour gros bénéfice de ne pas te polluer ni l'espace de nom avec une classe dont on a rien à foutre, ni la mémoire avec des instances inutiles.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-05-2004 à 12:51:31    

OK merci tous !
 
Pour la fonction de trie, elle a pour prototype :
static <T> void sort(T[] a, Comparator<? super T> c)
 
J'ai regarde la doc mais j'ai un peu de mal a comprendre ce que veut dire Comparator<? super T> c
Une autre chose le type <T> signifie quoi exactement ? : il faut cree un iterateur ? (l'interface Iterator est marquee comme suit sur la doc : Interface Iterator<E> )
Jsuis un peu paume la :/
 
PS : j'ai l'impression de devoir ecrire 100 lignes de code pour cette foutue fct de comparaison  :pfff:

Reply

Marsh Posté le 11-05-2004 à 12:57:08    

houla, tu regardes le truc en jdk1.5 ... t'es sûr de toi là ? pkoi tu restes pas en 1.4 pour le moment ?
 
Sinon, c'est la signature d'une méthode prototypée. Ca signifie que le comparator que tu passes en paramêtre doit être un comparator de classe égale ou supérieur (dans la hierarchie d'héritage) à la classe de ton tableau.  
 
en gros, si tu lui passes un tableau d'Integer, il faut que le comparator soit un comparator d'Integer, de Number ou d'Object (je simplifie volontairement en ne parlant que d'héritage et pas d'implémentation).


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 11-05-2004 à 12:57:08   

Reply

Marsh Posté le 11-05-2004 à 13:08:03    

saloperie de JDK 1.5 pas encore dispo pour mac :'(
 
java 1.5 sapu !


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-05-2004 à 13:09:46    

bon OK !
je lis sur la console :


[koko@localhost ant]$ java -version
Kaffe Virtual Machine
 
Copyright (c) 1996-2002 Kaffe.org project contributors (please see
  the source code for a full list of contributors).  All rights reserved.
Portions Copyright (c) 1996-2002 Transvirtual Technologies, Inc.
 
The Kaffe virtual machine is free software, licensed under the terms of
the GNU General Public License.  Kaffe.org is a an independent, free software
community project, not directly affiliated with Transvirtual Technologies,
Inc.  Kaffe is a Trademark of Transvirtual Technologies, Inc.  Kaffe comes
with ABSOLUTELY NO WARRANTY.
 
Engine: Just-in-time v3   Version: 1.1.2   Java Version: 1.1
[koko@localhost ant]$


 
J'ai dc le sdk 1.1 : la doc n'est meme pas presente sur le site de Java (ca commence au 1.2) :sweat:

Reply

Marsh Posté le 11-05-2004 à 13:10:30    

au s'cours

Reply

Marsh Posté le 11-05-2004 à 13:12:12    


 
+1 [:mlc]


Message édité par darklord le 11-05-2004 à 13:12:21
Reply

Marsh Posté le 11-05-2004 à 13:17:18    

huhuhuhu! :D

Reply

Marsh Posté le 11-05-2004 à 13:20:44    

[:ciler] mais pourquoi??


---------------
IVG en france
Reply

Marsh Posté le 11-05-2004 à 13:22:27    

Déjà, quand tu installes Linux, première chose à faire : désinstaller kafee, et installer le jdk.
Sinon, t'es pas dans la merde!
 
Là, si tu veux faire une analogie avec le C++, c'est un peu comme tu compilais avec Visual, tout en étant persuadé de faire du Borland, par exemple (je fais mon kéké, parce que y'a des mecs dans mon bureau qui se font des noeuds au cerveau avec ça. Moi, je les regarde, et je rigole.)


Message édité par gfive le 11-05-2004 à 13:23:15
Reply

Marsh Posté le 11-05-2004 à 13:25:09    

C'est pas possible...1.1 doit concerner autre chose :/
Bref, jsuis arriver a passer le probleme en utilisant la doc 1.4.2 ou le prototype est plus clair :
static void
sort(Object[] a, Comparator c)
:)

Reply

Marsh Posté le 11-05-2004 à 13:31:40    

non, mais au delà de ça....tu utilises une machine virtuelle qui s'appelle Kafee, et tu lis la doc associée à une machine virtuelle Sun....Donc, à moins d'une compatiblité à 100% entre la JVM Sun 1.4.x et la JVM Kaffee, tu cours vers les emmerdes à toute vitesse!!!!
 
Quand tu lances java --version, ça doit te répondre :  
 
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
 
ou qqchse dans ce goût là.
 

Reply

Marsh Posté le 11-05-2004 à 13:35:22    

gfive a écrit :

Déjà, quand tu installes Linux, première chose à faire : désinstaller kafee


 
en general il l'installe pas, en tout cas, pas par defaut


---------------
IVG en france
Reply

Marsh Posté le 11-05-2004 à 13:36:20    

gfive a écrit :

non, mais au delà de ça....tu utilises une machine virtuelle qui s'appelle Kafee, et tu lis la doc associée à une machine virtuelle Sun....Donc, à moins d'une compatiblité à 100% entre la JVM Sun 1.4.x et la JVM Kaffee, tu cours vers les emmerdes à toute vitesse!!!!
 
Quand tu lances java --version, ça doit te répondre :  
 
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
 
ou qqchse dans ce goût là.


 
t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!)
La seule diff c que c de l'open source

Reply

Marsh Posté le 11-05-2004 à 13:38:31    

uriel a écrit :

en general il l'installe pas, en tout cas, pas par defaut


 
bah, je sais pas pkoi, moi, il me le met toujours! :) Ca doit être parce que je coche toutes les packages de dev à l'installation! :D

Reply

Marsh Posté le 11-05-2004 à 13:38:52    

Giz a écrit :

t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!)
La seule diff c que c de l'open source


 
elle est de taille pour certaines personnes cette difference


---------------
IVG en france
Reply

Marsh Posté le 11-05-2004 à 13:39:06    

uriel a écrit :

en general il l'installe pas, en tout cas, pas par defaut


 
exact, mais c t les package internet que j'avais (url sur des package Mandrake=>open source only=>kaffe).
Jverrais si ca me gonfle.
Mais mon programme n'est pas gros, c juste un truc a rajouter dans une librairie

Reply

Marsh Posté le 11-05-2004 à 13:40:00    

Giz a écrit :

t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere),


 
ben a ta place, je serais pas si optimiste, mais bon.
 

Reply

Marsh Posté le 11-05-2004 à 13:40:20    

uriel a écrit :

elle est de taille pour certaines personnes cette difference


 
gcc est mieux que le compilo de visual  :o

Reply

Marsh Posté le 11-05-2004 à 13:41:01    

gfive a écrit :

ben a ta place, je serais pas si optimiste, mais bon.


 
+1 , demandez a -- ce qu'on a vu au FOSDEM sur les JVM open  :sweat:


---------------
IVG en france
Reply

Marsh Posté le 11-05-2004 à 13:41:30    

gfive a écrit :

bah, je sais pas pkoi, moi, il me le met toujours! :) Ca doit être parce que je coche toutes les packages de dev à l'installation! :D


+1 c ce que j'ai fais  :whistle:

Reply

Marsh Posté le 11-05-2004 à 13:44:49    

uriel a écrit :

demandez a -- ce qu'on a vu au FOSDEM sur les JVM open  


 
Vazy, tonton --, racontes! :bounce: :D

Reply

Marsh Posté le 11-05-2004 à 13:45:58    

Giz a écrit :

t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!)
La seule diff c que c de l'open source


compatible avec la jdk1.1, pas la 1.4. lis tes messages.

Reply

Marsh Posté le 11-05-2004 à 14:03:56    

za'vez quoi contre Kaffe ?

Reply

Marsh Posté le 11-05-2004 à 14:33:52    

Taz a écrit :

za'vez quoi contre Kaffe ?

de la haine.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-05-2004 à 14:36:29    

oui mais pourquoi ? d'accord c'est pas aussi complet que le bazar de sun, mais sinon ?

Reply

Marsh Posté le 11-05-2004 à 14:40:22    

ben on a un java pas complet et qui rame, c'est chiant.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-05-2004 à 14:54:56    

Giz a écrit :

t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!)
La seule diff c que c de l'open source


 
Arrête de confondre pensée et certitude, ça sera déjà bien.

Reply

Marsh Posté le 11-05-2004 à 14:59:15    

[:necris]

Reply

Marsh Posté le 11-05-2004 à 15:01:11    

Giz a écrit :

gcc est mieux que le compilo de visual  :o


cay trolly

Reply

Marsh Posté le 11-05-2004 à 15:05:24    

Et pis, il est mieux, peut être, mais si tu codes avec la doc Visual, et que tu compiles avec gcc, ça va pas tout le temps marcher, et c'est ça qui importe, dans ton cas.

Reply

Marsh Posté le 11-05-2004 à 15:48:01    

logiquement l'API est standard => d'une JVM à l'autre ca doit passer.
 
Mais le problème là c'est la version de java. Dans le 13 post on voit clairement :  

Citation :

Engine: Just-in-time v3   Version: 1.1.2   Java Version: 1.1


donc, regarder la javadoc de l'API 1.5 ca risque de poser problème forcément ...
 
D'ailleur je suis étonné que ton truc compile vu que la classe Arrays est apparu à la version 1.2 de java ...
 
bref, si tu ne tiens pas à totu prix à avoir un truc full open source, installe la jdk1.42.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 11-05-2004 à 18:10:17    

Un petit detail :
Soit une classe interne toto dans une autre classe :

public class parent
{
 public class toto
 {
  public void sort (...)
 }
 toto[] ex = new toto[20];
 ex.sort //compile pas
}

la ligne ex.sort ne compile pas car ex est un tableau.
les seuls 2 solutions sont bien :
-ex[0].sort(ex);//utliser la 1ere valeur par exmple pour l'appel
-toto bidon;//cree une variable bidon pour l'appel
bidon.sort(ex);
 
J'aurai voulu faire un truc du style toto.sort(ex) mais pour cela faut mettre la classe et la fonction en statique ce qui est refuse pour une classe interne par le compilo :/
Y'a-t-il mieux que les 2 solutions que j'ai propose ?


Message édité par Giz le 11-05-2004 à 18:10:48
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed