Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
845 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Pourquoi tout n'est pasobjet dans java ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pourquoi tout n'est pasobjet dans java ?

n°1535347
meringue7
Posté le 28-03-2007 à 16:48:19  profilanswer
 

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 ;)

mood
Publicité
Posté le 28-03-2007 à 16:48:19  profilanswer
 

n°1535348
flo850
moi je
Posté le 28-03-2007 à 16:50:24  profilanswer
 

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 )

n°1535365
meringue7
Posté le 28-03-2007 à 17:06:48  profilanswer
 

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 ?  :??:  
 

n°1535366
_darkalt3_
Proctopathe
Posté le 28-03-2007 à 17:07:43  profilanswer
 

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
n°1535380
kadreg
profil: Utilisateur
Posté le 28-03-2007 à 17:17:34  profilanswer
 

_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.)

n°1535381
flo850
moi je
Posté le 28-03-2007 à 17:18:27  profilanswer
 

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 )

n°1535384
_darkalt3_
Proctopathe
Posté le 28-03-2007 à 17:19:31  profilanswer
 

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
n°1535386
kadreg
profil: Utilisateur
Posté le 28-03-2007 à 17:21:27  profilanswer
 


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

n°1535389
Giz
Posté le 28-03-2007 à 17:23:08  profilanswer
 

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

n°1535395
meringue7
Posté le 28-03-2007 à 17:32:11  profilanswer
 

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 :)

mood
Publicité
Posté le 28-03-2007 à 17:32:11  profilanswer
 

n°1535397
meringue7
Posté le 28-03-2007 à 17:33:03  profilanswer
 

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 ;)

n°1535398
kadreg
profil: Utilisateur
Posté le 28-03-2007 à 17:35:13  profilanswer
 

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 :/

n°1535401
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2007 à 17:42:40  profilanswer
 

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
n°1535405
meringue7
Posté le 28-03-2007 à 17:51:34  profilanswer
 

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

n°1535415
kadreg
profil: Utilisateur
Posté le 28-03-2007 à 18:14:48  profilanswer
 

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
n°1535417
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2007 à 18:28:50  profilanswer
 

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
n°1535434
Chronoklaz​m
Posté le 28-03-2007 à 19:28:39  profilanswer
 

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 !
n°1535460
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2007 à 21:10:54  profilanswer
 

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
n°1535527
Chronoklaz​m
Posté le 29-03-2007 à 00:42:16  profilanswer
 

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 !
n°1535539
0x90
Posté le 29-03-2007 à 02:14:10  profilanswer
 

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.
n°1535543
SekYo
Posté le 29-03-2007 à 03:34:41  profilanswer
 

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.

n°1535579
meringue7
Posté le 29-03-2007 à 09:22:41  profilanswer
 

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

n°1535703
masklinn
í dag viðrar vel til loftárása
Posté le 29-03-2007 à 11:27:33  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Pourquoi tout n'est pasobjet dans java ?

 

Sujets relatifs
[Java] lecture d'un fichier : y'a un lézard quelque part...[Java] WorkSpace Eclipse: lecteur réseau possible?
Java video event detectionPb d'accent et autres Java - Oracle
ergonomie ecran et code javaJava Applet - Télécharger/Uploader un fichier
java : appeler des methodes d'un programme en CConseils pour imprimer en Java : quel est l'API ultime ?
Avis pour programme utilisant JAI (Java Advanced Imaging)applet java et recuperation des variables de session
Plus de sujets relatifs à : Pourquoi tout n'est pasobjet dans java ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR