Pourquoi tout n'est pasobjet dans java ?

Pourquoi tout n'est pasobjet dans java ? - Java - Programmation

Marsh Posté le 28-03-2007 à 16:48:19    

question de debutant mais je comprend pas pourquoi on a des int , float ?
 
alors qu il existe des objets Integer, Float
 
enfin vous voyez ma questions , pourquoi il y a des types (primitifs je crois) qui ne sont aps objets ?
 
merci ;)

Reply

Marsh Posté le 28-03-2007 à 16:48:19   

Reply

Marsh Posté le 28-03-2007 à 16:50:24    

pour simplifier les choses simples
 
tu n'as pas forcement envie de faire 1.add(3)   ou 1.equals(2) , si ?  
 
( il y a surement d'autre raisons, mais c'est la premiere que je vois )

Reply

Marsh Posté le 28-03-2007 à 17:06:48    

ben perso je trouve ca vraiment pas top , je trouverais ca beaucoup plus pratique que tout soit objet... et surtout beaucoup plus cohérent , donc je pense que y a peut etre des "vraies" raisons non ?  :??:  
 

Reply

Marsh Posté le 28-03-2007 à 17:07:43    

flo850 a écrit :

pour simplifier les choses simples
 
tu n'as pas forcement envie de faire 1.add(3)   ou 1.equals(2) , si ?  
 
( il y a surement d'autre raisons, mais c'est la premiere que je vois )


On peut pas définir d'opérateurs en java ?


---------------
Töp of the plöp
Reply

Marsh Posté le 28-03-2007 à 17:17:34    

_darkalt3_ a écrit :

On peut pas définir d'opérateurs en java ?


 
bah non :o
 
(en fait, il y a quelques un sur string, mais c'est dans le compilo, et c'est une des raison qui fait que string est finale.)

Reply

Marsh Posté le 28-03-2007 à 17:18:27    

meringue7 a écrit :

ben perso je trouve ca vraiment pas top , je trouverais ca beaucoup plus pratique que tout soit objet... et surtout beaucoup plus cohérent , donc je pense que y a peut etre des "vraies" raisons non ?  :??:


si tu veux tout gerer en objet, pourquoi tu ne te sers pas des wrappers ( Int, Long , ...) ?  
 

_darkalt3_ a écrit :

On peut pas définir d'opérateurs en java ?


non ( enfi pas a ma connaissance )

Reply

Marsh Posté le 28-03-2007 à 17:19:31    

kadreg a écrit :

bah non :o
 
(en fait, il y a quelques un sur string, mais c'est dans le compilo, et c'est une des raison qui fait que string est finale.)


:jap:
 
Ca craint :o


---------------
Töp of the plöp
Reply

Marsh Posté le 28-03-2007 à 17:21:27    


 
c'est un choix [:spamafote]
 
je les regrette dans certains cas, mais je suis content d'y echapper dans d'autres [:spamafote]

Reply

Marsh Posté le 28-03-2007 à 17:23:08    

Question performance aussi fait que les types primitifs ont été gardés. Alloué un objet est couteux.

Reply

Marsh Posté le 28-03-2007 à 17:32:11    

flo850 a écrit :

si tu veux tout gerer en objet, pourquoi tu ne te sers pas des wrappers ( Int, Long , ...) ?  


 
je dis pas le contarire , mais j aurais aimé savoir de maniére "intelectule" le pourquoi de ces types primitifs :)

Reply

Marsh Posté le 28-03-2007 à 17:32:11   

Reply

Marsh Posté le 28-03-2007 à 17:33:03    

Giz a écrit :

Question performance aussi fait que les types primitifs ont été gardés. Alloué un objet est couteux.


 
ha oui c'est pas con ca   :wahoo:  
 
deja que java est pas forcement top rapide
 
merci pour te reponse ;)

Reply

Marsh Posté le 28-03-2007 à 17:35:13    

meringue7 a écrit :

je dis pas le contarire , mais j aurais aimé savoir de maniére "intelectule" le pourquoi de ces types primitifs :)


 
garder aussi le langage accessible. Parce que tout objet, c'est violent pour rentrer dedans :/

Reply

Marsh Posté le 28-03-2007 à 17:42:40    

flo850 a écrit :

pour simplifier les choses simples

 

tu n'as pas forcement envie de faire 1.add(3)   ou 1.equals(2) , si ?

 

( il y a surement d'autre raisons, mais c'est la premiere que je vois )


1. C'est pour ça que d.ieu a inventé l'operator overloading
2. C'est pour ça que Microsoft a pensé à l'autoboxing qui fonctionne (pas celui de java, quoi)

Giz a écrit :

Question performance aussi fait que les types primitifs ont été gardés. Alloué un objet est couteux.


Fallacy, en C# le compilo et le runtime autoboxent de manière intelligente et totalement transparente les types primitifs, on s'en fout de l'implémentation en java il y a surtout une interface totalement inconsistente (pas d'accès uniforme) pour des raisons totalement arbitraires.

kadreg a écrit :

garder aussi le langage accessible. Parce que tout objet, c'est violent pour rentrer dedans :/


J'vois pas en quoi [:petrus75]

 

Si on prend l'exemple de Ruby

Code :
  1. # Ajout de deux entiers
  2. puts 1 + 5
  3. #=> 6
  4.  
  5. # Multiplication de deux entiers
  6. puts 5 * 9
  7. #=> 45
  8.  
  9. # Pourtant mes entiers sont des objets
  10. puts 5.class
  11. #=> Fixnum
  12.  
  13. # Avec tout un tas de méthodes
  14. puts 5.methods.join(", " )
  15. #=> %, inspect, <<, singleton_method_added, &, clone, >>, method, round, public_methods, instance_variable_defined?
  16. # divmod, equal?, freeze, integer?, chr, *, +, to_i, methods, respond_to?, -, upto, between?, prec, truncate, /, dup
  17. # instance_variables, __id__, modulo, object_id, succ, |, eql?, zero?, ~, id, to_f, singleton_methods, send, prec_i, taint
  18. # step, to_int, frozen?, instance_variable_get, ^, __send__, instance_of?, remainder, to_a, +@, nonzero?, -@, type, **
  19. # floor, <, protected_methods, <=>, instance_eval, ==, prec_f, quo, >, display, ===, downto, id2name, size
  20. # instance_variable_set, kind_of?, abs, extend, >=, next, to_s, <=, coerce, hash, ceil, class, tainted?, =~
  21. # private_methods, div, nil?, untaint, times, to_sym, [], is_a?
 

Il est beaucoup plus illogique de créer cette dichotomie entre les types primitifs et les types objets sans aucune raison [:spamafote]

Message cité 2 fois
Message édité par masklinn le 28-03-2007 à 17:43:30

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-03-2007 à 17:51:34    

masklinn a écrit :


Il est beaucoup plus illogique de créer cette dichotomie entre les types primitifs et les types objets sans aucune raison [:spamafote]


 
ha ben c'est exactement ce que je voulais dire  :sweat:  
 
mais je me disais que si ca existait ca devait avoir une raison (compatibilité, raison d anciennneté etc etc...)
 
 

Reply

Marsh Posté le 28-03-2007 à 18:14:48    

masklinn a écrit :

2. C'est pour ça que Microsoft a pensé à l'autoboxing qui fonctionne (pas celui de java, quoi)

 

Il est rigolo plop(3) appelle plop(Object) au lieu de pas trouver  :lol:

Message cité 1 fois
Message édité par kadreg le 28-03-2007 à 18:15:05
Reply

Marsh Posté le 28-03-2007 à 18:28:50    

kadreg a écrit :

Il est rigolo plop(3) appelle plop(Object) au lieu de pas trouver  :lol:


Uniquement si tu as défini un plop(Object), ce que tu n'as strictement aucune raison de faire :non:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-03-2007 à 19:28:39    

meringue7 a écrit :

question de debutant mais je comprend pas pourquoi on a des int , float ?
 
alors qu il existe des objets Integer, Float
 
enfin vous voyez ma questions , pourquoi il y a des types (primitifs je crois) qui ne sont aps objets ?
 
merci ;)


 
Aussi pour ne pas trop rebuter les programmeurs Fortran, C, C++ et autres à l'époque.  
 
Au passage le "tout objet" c'est grave chiant (voir Eiffel) et le "overloading" d'opérateur c'est de la sucrerie syntaxique et ça peut vite devenir un casse tête.

Message cité 1 fois
Message édité par Chronoklazm le 28-03-2007 à 19:31:00

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 28-03-2007 à 21:10:54    

Chronoklazm a écrit :

Aussi pour ne pas trop rebuter les programmeurs Fortran, C, C++ et autres à l'époque.


Mauvaise réponse, en C# quand on déclare un int (avec type "int" ) il se comporte exactement comme un Integer [:spamafote]  

Chronoklazm a écrit :

Au passage le "tout objet" c'est grave chiant (voir Eiffel)


N'importe quoi... (voir Smalltalk, Ruby, Python, D, C# 3.0, Nemerle, Scala)

Chronoklazm a écrit :

et le "overloading" d'opérateur c'est de la sucrerie syntaxique et ça peut vite devenir un casse tête.


C'est le cas de tout ce qu'on peut trouver en programmation, le problème est de trouver une balance entre les intérêts (légèreté et clarté de la syntaxe, puissance des constructs, ...) et les problèmes potentiels (magie, incohérence du code).
 
L'operator overloading, c'est comme la métaprogrammation, les first-class functions, les continuations ou les macros hygiénique (pas les macros textuelles ça c'est de la daube :o), c'est dangereux, mais c'est d'une puissance incompréhensible quand on ne les as pas essayés [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-03-2007 à 00:42:16    

masklinn a écrit :

Mauvaise réponse, en C# quand on déclare un int (avec type "int" ) il se comporte exactement comme un Integer [:spamafote]  


 
A la sortie de Java il n'y avait pas de C# ! [:spamafote]
 
Quand je dit le "tout objet" c'est grave chiant : j'entends que ça implique forcement des notions abstraites (heritage, polymorphisme etc ...) qui ne sont pas toujours évidentes à comprendre pour les débutant en POO d'ou la nécessité d'avoir un équilibre comme tu le dis plus bas, ce qui est justement le cas de Java.

Message cité 1 fois
Message édité par Chronoklazm le 29-03-2007 à 00:58:52

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 29-03-2007 à 02:14:10    

Chronoklazm a écrit :

A la sortie de Java il n'y avait pas de C# ! [:spamafote]

 

Quand je dit le "tout objet" c'est grave chiant : j'entends que ça implique forcement des notions abstraites (heritage, polymorphisme etc ...) qui ne sont pas toujours évidentes à comprendre pour les débutant en POO d'ou la nécessité d'avoir un équilibre comme tu le dis plus bas, ce qui est justement le cas de Java.

 

Je vois pas en quoi le fait de faire

Code :
  1. int i = 42;
  2. i = i + 124;


et que i soit un objet t'oblige à connaitre tout les principe de la POO. Tant que tu ne les utilise pas, ils ne t'embètent pas [:spamafote]


Message édité par 0x90 le 29-03-2007 à 02:14:20

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 29-03-2007 à 03:34:41    

Je plussoie Masklinn, tout est objet en Ruby, ca t'empeche absolument pas d'écrire du code à la C comme il a montré plus haut. Après c'est clair qu'un langage 100% objet sans "raccourcis", ie faire 3.add(4) pour une addition, c'est un peu une connerie.

Reply

Marsh Posté le 29-03-2007 à 09:22:41    

donc je suis plutot d accord avec Masklinn , mais alors pourquoi avoir mis des types primitifs à votre avis ?
 
ca me tracasse  :pt1cable:

Reply

Marsh Posté le 29-03-2007 à 11:27:33    

Chronoklazm a écrit :

A la sortie de Java il n'y avait pas de C# ! [:spamafote]


Quelle importance? Je disais simplement que ça n'a rien d'impossible et que la limitation de Java n'a aucun sens et aucun intérêt (on peut aussi citer Smalltalk 80 dans lequel le concept de types primitifs n'existe même pas si ça t'amuse, il précède Java de 15 ans [:spamafote] )

Chronoklazm a écrit :

Quand je dit le "tout objet" c'est grave chiant : j'entends que ça implique forcement des notions abstraites (heritage, polymorphisme etc ...) qui ne sont pas toujours évidentes à comprendre pour les débutant en POO d'ou la nécessité d'avoir un équilibre comme tu le dis plus bas, ce qui est justement le cas de Java.


J'vois pas en quoi, c'est pas parce que tu manipules un objet que tu es obligé de comprendre tout ce qu'il y a derrière, ou même que tu es obligé d'utiliser ses "capacités objet" [:petrus75]

 

Suffit de regarder C#, tu manipules tes ints strictement comme un `int` Java jusqu'au moment ou tu as besoin de manipuler un Integer: en Java tu es obligé de wrapper, et tu ne peux pas indexer tes collections génériques sur <int> (tu dois les indexer sur <Integer> ), en C# ton int a directement une interface d'objet donc tu ne te poses pas de question [:spamafote]

meringue7 a écrit :

donc je suis plutot d accord avec Masklinn , mais alors pourquoi avoir mis des types primitifs à votre avis ?

 

ca me tracasse  :pt1cable:


Simplicité d'implémentation "haute performance": avec des types primitifs et pas d'autoboxing, on simplifie grandement le boulot du compilateur puisqu'on a pas besoin dans le cas 1 (types objets uniquement) de gérer les optimisations de perfs (en remplaçant à la compilation ou au runtime les objets par des valeurs quand ça a du sens) et dans le cas 2 (autoboxing) de générer la création d'objets à partir des valeurs (qui est ce que fait C#, et Java5 en fait également un peu, mais franchement pas assez pour donner un accès uniforme entre les types primitifs et objets).

 

De plus le cas 1 demande impérativement l'ajout d'operator overloading, au moins pour les classes "built-in" du langage (ce qu'a déjà Java d'ailleurs, "+" est overloadé sur les String pour effectuer des conversions + concaténations).

 

Au final, c'est la seule raison que je vois: se simplifier la tâche parce qu'on a pas envie de s'emmerder.


Message édité par masklinn le 29-03-2007 à 11:30:44

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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