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

 

Sujet(s) à lire :
    - Who's who@Programmation
 

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  19703  19704  19705  ..  27169  27170  27171  27172  27173  27174
Auteur Sujet :

[blabla@olympe] Le topic du modo, dieu de la fibre et du monde

n°2136789
gelatine_v​elue
Posté le 16-04-2012 à 09:56:59  profilanswer
 

Reprise du message précédent :
Pour en revenir à mon exemple de la semaine passée:

 


gelatine_velue a écrit :


 Imaginez des classes Chien, Chat, Loutre qui héritent de Animal.

 
Code :
  1. uneMethode (AnimalFactory facto)
  2. {
  3. Animal an = facto.creer(TypeAnimal); //Ici on cree un chien ou un chat, etc...
  4. ObjetQuiCaresse.caresser(an);
  5. }
 

Le code va planter au niveau de caresser() (enfin il compile meme pas) car elle est définie pour caresser(Chien)/caresser(Chat)/caresser(Loutre) mais pas caresser(Animal), vu qu'on caresse pas les trois animaux pareil.

 

J'ai l'impression que y'a une couille au niveau du langage. La méthode créer va retourner un Chien par ex., et non pas un Animal. Dés qu'on affecte ce Chien à la variable an de type Animal toute information sur son "vrai" type est perdu. Il faudra la recaster pour cela.

 

Qu'est-ce qui justifie que le java perde ainsi des informations de type? J'ai pas pu penser à un use case où ce serait utile.

Message cité 1 fois
Message édité par gelatine_velue le 16-04-2012 à 09:57:15
mood
Publicité
Posté le 16-04-2012 à 09:56:59  profilanswer
 

n°2136791
flo850
moi je
Posté le 16-04-2012 à 10:03:00  profilanswer
 

stiffler a écrit :


A 3 ans elle regarde la TV ? O_O


oui.
( uniquement de BR / DVD , pas de pub entrecoupées par les dessins animés )  

Spoiler :


I SEE WHAT YOU DID THERE  


---------------

n°2136792
___alt
Posté le 16-04-2012 à 10:07:47  profilanswer
 

gelatine_velue a écrit :

J'ai l'impression que y'a une couille au niveau du langage. La méthode créer va retourner un Chien par ex., et non pas un Animal. Dés qu'on affecte ce Chien à la variable an de type Animal toute information sur son "vrai" type est perdu. Il faudra la recaster pour cela.
 
Qu'est-ce qui justifie que le java perde ainsi des informations de type? J'ai pas pu penser à un use case où ce serait utile.


 
Les infos ne sont jamais perdues. Au runtime, c'est un Chien et ça n'a jamais cessé de l'être.
Le fait d'y accéder via une référence Animal dit juste que tu souhaites le manipuler comme un animal.
 
C'est pas propre à Java, c'est comme ça dans n'importe quel langage statiquement typé, non ?


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
n°2136793
gfive
Posté le 16-04-2012 à 10:08:00  profilanswer
 

zapan666 a écrit :

:o ham, j'ai trouvé une url google calendar pour devoxx https://www.google.com/calendar/ica [...] /basic.ics (pas de chance, sur cet url là, il manque le programme de vendredi...)
 
la grosse blague étant que je l'ai trouvé l'url dans le code de l'appli de valtech qui fourni aussi un agenda pour devoxx...mais pas avec les bons horaires. Je sais pas comment ils ont fait leurs trucs, mais ils récupèrent les bonnes infos & arrivent à les rendre inutilisables.


 
En fait, l'appli OneCalendar a les bons horaires, en GMT. Or en ce moment, on est en GMT +2. Donc tout est décalé de 2h :o


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2136794
gelatine_v​elue
Posté le 16-04-2012 à 10:14:21  profilanswer
 

___alt a écrit :


 
Les infos ne sont jamais perdues. Au runtime, c'est un Chien et ça n'a jamais cessé de l'être.
Le fait d'y accéder via une référence Animal dit juste que tu souhaites le manipuler comme un animal.
 
C'est pas propre à Java, c'est comme ça dans n'importe quel langage statiquement typé, non ?


 
Mais j'ai pas d'autre choix. Supposons que je veux le manipuler comme un chien , je fais comment? Auto n'existe pas...

n°2136795
BenO
Profil: Chercheur
Posté le 16-04-2012 à 10:15:21  profilanswer
 

et tu castes  [:papyflingueur]


---------------
Python Python Python
n°2136796
___alt
Posté le 16-04-2012 à 10:17:31  profilanswer
 

gelatine_velue a écrit :

Mais j'ai pas d'autre choix. Supposons que je veux le manipuler comme un chien , je fais comment? Auto n'existe pas...


 
Bah t'as pas d'autre choix que de demander au runtime si c'est effectivement un Chien et de caster.
C'est pas un problème de langage que t'as ici, c'est un problème d'abstraction.


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
n°2136797
Lam's
Profil: bas.
Posté le 16-04-2012 à 10:18:58  profilanswer
 


Tiens, je me souvenais plus à quoi ça ressemblait (le truc a été écrit il y a 6 ans), alors j'ai été voir. C'était pas si degueu que ça en fait. Si ce n'est que je ne maîtrisais clairement pas les tuples en sortie d'Excel.
 
Le code python 2.4 (bah oui...)
   http://pastebin.com/LATUq8jr
 
Les macros VB nécessaire pour faire l'insertion dans Excel (bah ouais...)
   http://pastebin.com/cqNVkW8K
 

n°2136799
gelatine_v​elue
Posté le 16-04-2012 à 10:20:50  profilanswer
 

___alt a écrit :


 
Bah t'as pas d'autre choix que de demander au runtime si c'est effectivement un Chien et de caster.
C'est pas un problème de langage que t'as ici, c'est un problème d'abstraction.


 
Je comprends le point de vue de dire que c'est un pb d'abstraction , mais là n'est pas le pb pou moi. Je réfléchis juste à ce qui justifie la perte de sa classe.
Devoir demander si l'objet fait partie de chaque type possible pour déterminer de quel type il est vraiment, je trouve ça tout pourri.

n°2136800
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 16-04-2012 à 10:21:11  profilanswer
 

___alt a écrit :

 

Bah t'as pas d'autre choix que de demander au runtime si c'est effectivement un Chien et de caster.
C'est pas un problème de langage que t'as ici, c'est un problème d'abstraction.

 

:jap: La méthode blablablaFactory(...) ne peut avoir qu'un seul type de retour, donc oui elle retourne un type 'interface' et après faut caster  [:spamafote]

 

Si tu utilises une animalFactory, tu récupères un animal. Si tu utilises le ctor de Chien, tu récupères un chien. Si tu veux obtenir un chien de la factory (genre avec un changement de type de retour dynamique) je pense qu'il te faut un autre langage (pitet un truc comme pharo, à confirmer)

Message cité 3 fois
Message édité par Xavier_OM le 16-04-2012 à 10:27:28

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
mood
Publicité
Posté le 16-04-2012 à 10:21:11  profilanswer
 

n°2136802
el muchach​o
Comfortably Numb
Posté le 16-04-2012 à 10:29:35  profilanswer
 

Xavier_OM a écrit :

 

:jap: La méthode blablablaFactory(...) ne peut avoir qu'un seul type de retour, donc oui elle retourne un type 'interface' et après faut caster  [:spamafote]

 

Ouaip, et la solution au pb initial a été donnée par Lam's: soit un pattern Visiteur, soit une matrice (type/implémentation de carresser()).
Sinon, au début, gélatine_velue parlait d'héritage "Imaginez des classes Chien, Chat, Loutre qui héritent de Animal.", ce que tu veux, ça n'est pas de l'héritage, c'est une interface commune.

 

Mais même après cast vers le type parent, le type initial n'est pas perdu.

Code :
  1. public class Animal{}
  2. public class Chien extends Animal{}
  3. public class Chat extends Animal{}
  4. public class Test {
  5.     public static void main(String[] args) {
  6.         Animal chien = new Chien();
  7.         Animal chat = new Chat();
  8.         System.out.println(chien.getClass());
  9.         System.out.println(chat.getClass());
  10.         System.out.println((((Animal) chien).getClass()));
  11.     }
  12. }



class Chien
class Chat
class Chien


Message édité par el muchacho le 16-04-2012 à 10:48:17

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2136803
R3g
fonctionnaire certifié ITIL
Posté le 16-04-2012 à 10:30:56  profilanswer
 

Lam's a écrit :


Tiens, je me souvenais plus à quoi ça ressemblait (le truc a été écrit il y a 6 ans), alors j'ai été voir. C'était pas si degueu que ça en fait. Si ce n'est que je ne maîtrisais clairement pas les tuples en sortie d'Excel.
 
Le code python 2.4 (bah oui...)
   http://pastebin.com/LATUq8jr
 
Les macros VB nécessaire pour faire l'insertion dans Excel (bah ouais...)
   http://pastebin.com/cqNVkW8K
 


Code :
  1. if False: #appartement
  2.                 url += "&idtypebien=1"
  3.             else:
  4.                 url += "&idtypebien=2"


 [:lectrodz]


---------------
Au royaume des sourds, les borgnes sont sourds.
n°2136804
___alt
Posté le 16-04-2012 à 10:33:55  profilanswer
 

gelatine_velue a écrit :

Je comprends le point de vue de dire que c'est un pb d'abstraction , mais là n'est pas le pb pour moi. Je réfléchis juste à ce qui justifie la perte de sa classe.


 
Je te confirme que si, c'est bien un problème d'abstraction. Après bon, tu peux essayer de l'ignorer autant que tu veux, moi je m'en fous hein :D
 
Pourquoi ça fonctionne comme ça ? Parce que c'est typé statiquement. Statiquement, ton compilateur il a comme info que ton objet est de type Animal mais ne peut pas savoir ce que c'est.
Quand tu le castes, tu dis à ton compilateur : "fais moi confiance, je sais qu'au runtime c'est un Chien". Sauf qu'il faut pouvoir t'en assurer parce que sinon la JVM va t'envoyer chier.
Donc tu dois explicitement vérifier si c'est un Chien avant de caster et si tu as d'autres types, faut faire pareil avec les autres.
 
Ce que je me demande en fait, c'est pas quel mécanisme magique tu penses échapper à cette contrainte ?
Tu peux fournir une représentation de code (arbitraire) où tu nous montres ce mécanisme en action ? J'arrive pas à visualiser.
 
 
 

Xavier_OM a écrit :

:jap: La méthode blablablaFactory(...) ne peut avoir qu'un seul type de retour, donc oui elle retourne un type 'interface' et après faut caster  [:spamafote]


 
Tu décides qu'une méthode doit te fournir des animaux. C'est donc que tu dois les manipuler comme des animaux.
T'as demandé explicitement à avoir des animaux, pas des chiens. Donc oui faut caster, j'ai bien compris ça.
 
Mais c'est pas le méchant langage tout pourri qui a "perdu" l'information, c'est le développeur qui a choisi de la masquer en utilisant une abstraction.


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
n°2136805
nraynaud
lol
Posté le 16-04-2012 à 10:34:31  profilanswer
 

gelatine_velue a écrit :


 
Mais j'ai pas d'autre choix. Supposons que je veux le manipuler comme un chien , je fais comment? Auto n'existe pas...


Il faut jouer avec le généricité, mais c'est rapidement chiant.


---------------
trainoo.com, c'est fini
n°2136806
Dion
Acceuil
Posté le 16-04-2012 à 10:36:19  profilanswer
 

Lam's a écrit :


Tiens, je me souvenais plus à quoi ça ressemblait (le truc a été écrit il y a 6 ans), alors j'ai été voir. C'était pas si degueu que ça en fait. Si ce n'est que je ne maîtrisais clairement pas les tuples en sortie d'Excel.
 
Le code python 2.4 (bah oui...)
   http://pastebin.com/LATUq8jr
 
Les macros VB nécessaire pour faire l'insertion dans Excel (bah ouais...)
   http://pastebin.com/cqNVkW8K
 


:love:


---------------
It is not called show art
n°2136807
Lam's
Profil: bas.
Posté le 16-04-2012 à 10:36:23  profilanswer
 

R3g a écrit :


Code :
  1. if False: #appartement
  2.                 url += "&idtypebien=1"
  3.             else:
  4.                 url += "&idtypebien=2"


 [:lectrodz]


Franchement, est-ce que j'ai la tête de quelqu'un qui cherchait à acheter un appart ?  
 

n°2136808
Lam's
Profil: bas.
Posté le 16-04-2012 à 10:37:42  profilanswer
 

___alt a écrit :

Mais c'est pas le méchant langage tout pourri qui a "perdu" l'information, c'est le développeur qui a choisi de la masquer en utilisant une abstraction.


C++. Superior.
http://en.wikipedia.org/wiki/Covar [...] e)#C.2B.2B
 
edit: juste, comme c'est le matin, y en a qui sont pas frais ici. C'est une blague, hein ! Je ne le pense pas vraiment (enfin, pas sur cet exemple). :o


Message édité par Lam's le 16-04-2012 à 10:39:43
n°2136810
stiffler
Lâche mon profil putain ! :o
Posté le 16-04-2012 à 10:42:46  profilanswer
 

flo850 a écrit :


oui.
( uniquement de BR / DVD , pas de pub entrecoupées par les dessins animés )  

Spoiler :


I SEE WHAT YOU DID THERE  



Ha okay. C'est bien.


---------------
I'm failing as fast as I can !! -- Vision-360, vos photos en grand format -- !! -- Les nouilles c'est bon
n°2136811
Dion
Acceuil
Posté le 16-04-2012 à 10:43:10  profilanswer
 

Lam's a écrit :


Franchement, est-ce que j'ai la tête de quelqu'un qui cherchait à acheter un appart ?  
 


lam'sette qui fait les caves c'est pas exactement comme vapeur :/


---------------
It is not called show art
n°2136812
kadreg
profil: Utilisateur
Posté le 16-04-2012 à 10:44:37  profilanswer
 


 
le problème, c'est pas la télé, c'est ce qu'on regarde. Il y a deux type de gens :  
- qu'es-ce qu'on regarde ?
- es-ce qu'il y a quelque chose ?
 


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°2136814
Dion
Acceuil
Posté le 16-04-2012 à 10:45:35  profilanswer
 

Kadreg et Stiffler sur l'education des enfants :love:
 
La semaine commence bien, manque plus que much et growmachine [:classe++]


---------------
It is not called show art
n°2136815
kadreg
profil: Utilisateur
Posté le 16-04-2012 à 10:47:18  profilanswer
 

Dion a écrit :

Kadreg et Stiffler sur l'education des enfants :love:


 
le saviez vous  [:idee]  
 
c'est la semaine internationale de la couche lavable :D


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°2136816
Dion
Acceuil
Posté le 16-04-2012 à 10:49:05  profilanswer
 


Avec stiffler qui ramene sa tronche on devait se douter que le gros paquet de merde n'etait pas loin


---------------
It is not called show art
n°2136817
___alt
Posté le 16-04-2012 à 10:49:09  profilanswer
 

Hier y'avait un truc intéressant sur la 6 sur les gosses.
Fallait juste passer la partie confessions intimes pour arriver à l'interview de la fin et c'était pas mal.


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
n°2136818
lorill
Posté le 16-04-2012 à 10:49:39  profilanswer
 

___alt a écrit :


 
Les infos ne sont jamais perdues. Au runtime, c'est un Chien et ça n'a jamais cessé de l'être.
Le fait d'y accéder via une référence Animal dit juste que tu souhaites le manipuler comme un animal.
 
C'est pas propre à Java, c'est comme ça dans n'importe quel langage statiquement typé, non ?


y'en a qui ne donnent pas accès aux infos au runtime, genre ocaml.
une fois que tu as casté vers un type général, tu ne peux pas revenir au particulier.

n°2136819
lorill
Posté le 16-04-2012 à 10:51:01  profilanswer
 

Xavier_OM a écrit :


 
 :jap: La méthode blablablaFactory(...) ne peut avoir qu'un seul type de retour, donc oui elle retourne un type 'interface' et après faut caster  [:spamafote]  
 
Si tu utilises une animalFactory, tu récupères un animal. Si tu utilises le ctor de Chien, tu récupères un chien. Si tu veux obtenir un chien de la factory (genre avec un changement de type de retour dynamique) je pense qu'il te faut un autre langage (pitet un truc comme pharo, à confirmer)


non, la factory peut retourner un type différent avec les generics (mais il faut lui passer en parametre d'une facon ou d'une autre)

n°2136822
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 16-04-2012 à 10:54:07  profilanswer
 

lorill a écrit :


non, la factory peut retourner un type différent avec les generics (mais il faut lui passer en parametre d'une facon ou d'une autre)


 
Ha oui pas con, si tu as des generics ou du template... (je suis rouillé en java, pas touché depuis 5 ans)


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2136823
ratibus
Posté le 16-04-2012 à 10:56:36  profilanswer
 

Se faire basher sur Github par Douglas Crockford c'est beau qd même https://github.com/twitter/bootstrap/issues/3057

n°2136824
uriel
blood pt.2
Posté le 16-04-2012 à 10:57:05  profilanswer
 

Dion a écrit :

Kadreg et Stiffler sur l'education des enfants :love:


 
eh oh, il regarde les maternelles tous les jours [:dawao]


---------------
IVG en france
n°2136825
Dion
Acceuil
Posté le 16-04-2012 à 10:58:41  profilanswer
 

uriel a écrit :


 
eh oh, il regarde les maternelles tous les jours [:dawao]


Reponds moi [:natas]


---------------
It is not called show art
n°2136827
___alt
Posté le 16-04-2012 à 10:59:37  profilanswer
 

ratibus a écrit :

Se faire basher sur Github par Douglas Crockford c'est beau qd même https://github.com/twitter/bootstrap/issues/3057


 [:julien rodriguez]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
n°2136828
gfive
Posté le 16-04-2012 à 10:59:54  profilanswer
 

Mais de toutes façons, il y aura un moment où tu devra dire  
 
"ouais, bon, là, j'ai une ChienFactory, il me faut un ChienDAO pour persister mon Chien".
 
Le switch, c'est une manière de centraliser cette logique à un seul endroit. C'est mal parce que ça sera peu évolutif en cas d'ajout d'animal.
 
Construire une classe qui sait te fournir ton Chien et son DAO - une factory, en gros-  (ou le Chien et un accès à son DAO), c'est mieux découpé, mais à uin moment ou à un autre, il faudra que tu détermines quelle Factory utiliser en fonction de ton contexte d'exécution.. Et là, tu va retrouver un switch (codé de manière plus ou moins élégante : ça peut être de la reflexivité, de l'injection, etc...), mais t'aura pas le choix.
 
A mon sens, le point important, c'est de faire en sorte que cette résolution ne soit faisable que d'une seule manière en passant par un seul chemin, sinon tu prends le risque d'avoir des incohérences.


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2136829
kadreg
profil: Utilisateur
Posté le 16-04-2012 à 11:00:11  profilanswer
 

uriel a écrit :


 
eh oh, il regarde les maternelles tous les jours [:dawao]


 
il espère voir des boobs sur les reportages sur l'allaitement oui :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°2136830
gelatine_v​elue
Posté le 16-04-2012 à 11:00:34  profilanswer
 

___alt a écrit :


 
Tu peux fournir une représentation de code (arbitraire) où tu nous montres ce mécanisme en action ? J'arrive pas à visualiser.


 
Ben supposons que la factory retourne un Chien, et que je fasse ensuite an.aboyer() (avec aboyer une méthode Chien et pas des autres classes). Je devrais avoir une RuntimeException que si la factory retourne une autre classe que Chien, alors que là ça compilera meme pas.

n°2136831
uriel
blood pt.2
Posté le 16-04-2012 à 11:00:45  profilanswer
 

Dion a écrit :


Reponds moi [:natas]


je lis pas tout blabla :O
 j'ai sauté des pages


---------------
IVG en france
n°2136832
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 16-04-2012 à 11:02:49  profilanswer
 

___alt a écrit :


 
Bah t'as pas d'autre choix que de demander au runtime si c'est effectivement un Chien et de caster.
C'est pas un problème de langage que t'as ici, c'est un problème d'abstraction.


 
http://en.wikipedia.org/wiki/Dynamic_dispatch non ?

n°2136833
gelatine_v​elue
Posté le 16-04-2012 à 11:03:56  profilanswer
 
n°2136835
uriel
blood pt.2
Posté le 16-04-2012 à 11:05:09  profilanswer
 

Dion a écrit :

Muriel> je churches une pochette iPad, slim et type metrosexuel


j'ai une targus, slim mais plus businesslike en cuir noir pour faire le cake en avion :O


---------------
IVG en france
n°2136836
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 16-04-2012 à 11:06:43  profilanswer
 

gelatine_velue a écrit :

 

Y'a pas d'exemple en java :/


Nan mais je comprends pas, tu veux pas me dire si je suis hors sujet là ou bien ?


Message édité par hephaestos le 16-04-2012 à 11:06:48
n°2136837
Dion
Acceuil
Posté le 16-04-2012 à 11:08:58  profilanswer
 

uriel a écrit :


j'ai une targus, slim mais plus businesslike en cuir noir pour faire le cake en avion :O


et sur une echelle de muchacho a brad pitt tu arrives a pecho avec ?

 

Et comment tu affiches ta citation intello gravee ? :/

Message cité 1 fois
Message édité par Dion le 16-04-2012 à 11:11:24

---------------
It is not called show art
n°2136838
___alt
Posté le 16-04-2012 à 11:09:44  profilanswer
 

gelatine_velue a écrit :

Ben supposons que la factory retourne un Chien, et que je fasse ensuite an.aboyer() (avec aboyer une méthode Chien et pas des autres classes). Je devrais avoir une RuntimeException que si la factory retourne une autre classe que Chien, alors que là ça compilera meme pas.


 
Donc en fait tu reproches à un langage typé statiquement de signaler à la compilation une très probable erreur à l'exécution ? [:pingouino]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  19703  19704  19705  ..  27169  27170  27171  27172  27173  27174

Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : [blabla@olympe] Le topic du modo, dieu de la fibre et du monde


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)