conception objet, ça vous choque ça !?

conception objet, ça vous choque ça !? - Java - Programmation

Marsh Posté le 05-07-2002 à 15:45:36    

Dans mon prog Java, j'ai 3 singletons static qui j'utilise comme des variables globales. 1 pour mon fichier properties, 1 pour mes Ressources, et un pour mon pool de connections.
ça vous choque ?

Reply

Marsh Posté le 05-07-2002 à 15:45:36   

Reply

Marsh Posté le 05-07-2002 à 15:52:39    

bof ...
 
c'est pas top mais bon ...
 
fait gaffe de bien ne montrer que les interface read-only

Reply

Marsh Posté le 05-07-2002 à 16:02:08    

Ce serait peut-être mieux de donner ces 3 classes en tant que paramètre dans les constructeurs de classes qui les utilisent (à moins que tu le fasses déjà d'une manière semblable). Par après si tu veux utiliser une classe spécialisée d'une de ces 3 classes, t'es pas obligé de changer le code client.


Message édité par MelloW le 05-07-2002 à 16:02:24

---------------
Belgian Connection
Reply

Marsh Posté le 05-07-2002 à 16:18:54    

benou a écrit a écrit :

bof ...
 
c'est pas top mais bon ...
 
fait gaffe de bien ne montrer que les interface read-only




 
Comment ça !? comment je peux faire ? j'ai besoin d'avoir des méthodes public qui sont pas read-only !
Comment faire pour les cacher dans certains cas !?

Reply

Marsh Posté le 05-07-2002 à 17:07:21    

benou a écrit a écrit :

bof ...
 
c'est pas top mais bon ...
 
fait gaffe de bien ne montrer que les interface read-only




dis benou, c quoi que tu trouves pas top? le fait d'avoir les 3 singletons ?
pq?

Reply

Marsh Posté le 05-07-2002 à 17:08:41    

--greg-- a écrit a écrit :

 
dis benou, c quoi que tu trouves pas top? le fait d'avoir les 3 singletons ?
pq?
 




 
moi ce que je trouve pas top c'est d'avoir des variables globales, mais bon, je suis une peu extremiste...
 
Renaud

Reply

Marsh Posté le 05-07-2002 à 18:14:32    

--greg-- a écrit a écrit :

 
dis benou, c quoi que tu trouves pas top? le fait d'avoir les 3 singletons ?
pq?




 
ben c'est pas les singletons qui me poses problème, mais d'après ce que j'imagine, il doit y accéder en fesant par exemple : PropertieFile.singleton.getPath() et ca c'est pas top niveau évolutivité : si demain tu veux étendre la classe PropertieFile, ca va être difficile parce que les références à la classe sont faite en dur : pour accéder à une variable static, il faut préfixer par le nom de la classe => c'est pas top.

Reply

Marsh Posté le 05-07-2002 à 18:35:51    

benou a écrit a écrit :

 
 
ben c'est pas les singletons qui me poses problème, mais d'après ce que j'imagine, il doit y accéder en fesant par exemple : PropertieFile.singleton.getPath() et ca c'est pas top niveau évolutivité : si demain tu veux étendre la classe PropertieFile, ca va être difficile parce que les références à la classe sont faite en dur : pour accéder à une variable static, il faut préfixer par le nom de la classe => c'est pas top.



euh j'ai pas tout compris à ce que tu crois qu'il fait mais bon, spa grave, chuis pressé.
donc si c'est des VRAIS singletons bien propres ça te pose pb quoi?

Reply

Marsh Posté le 08-07-2002 à 08:38:45    

benou a écrit a écrit :

 
 
ben c'est pas les singletons qui me poses problème, mais d'après ce que j'imagine, il doit y accéder en fesant par exemple : PropertieFile.singleton.getPath() et ca c'est pas top niveau évolutivité : si demain tu veux étendre la classe PropertieFile, ca va être difficile parce que les références à la classe sont faite en dur : pour accéder à une variable static, il faut préfixer par le nom de la classe => c'est pas top.




 
Ouais, c bel et bien comme ça que je fais. c vachement plus pratique que passer en paramètre à chaque fois que g besoin d'une proptiétés par exemple. Et puis le nom de ma classe, je compte bien ne jammais le changer !
 [:thraell]

Reply

Marsh Posté le 08-07-2002 à 11:16:50    

benou a écrit a écrit :

 
 
ben c'est pas les singletons qui me poses problème, mais d'après ce que j'imagine, il doit y accéder en fesant par exemple : PropertieFile.singleton.getPath() et ca c'est pas top niveau évolutivité : si demain tu veux étendre la classe PropertieFile, ca va être difficile parce que les références à la classe sont faite en dur : pour accéder à une variable static, il faut préfixer par le nom de la classe => c'est pas top.




 
Pourtant, j'crois bien que c toi qui avait posté sur HFR, ta méthode replace, qui s'utilise comme ça : StringUtils.replace...

Reply

Marsh Posté le 08-07-2002 à 11:16:50   

Reply

Marsh Posté le 08-07-2002 à 11:21:54    

el_gringo a écrit a écrit :

 
 
Pourtant, j'crois bien que c toi qui avait posté sur HFR, ta méthode replace, qui s'utilise comme ça : StringUtils.replace...




faut apprendre à faire la difference entre une methode publique statique et un membre public mon beau :D

Reply

Marsh Posté le 08-07-2002 à 11:25:04    

et chtoc  :fuck:  
 
(eh je rigole hein)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 11:27:55    

DarkLord a écrit a écrit :

et chtoc  :fuck:  
 
(eh je rigole hein)



oui moi aussi ... il est pas beau !  
:D

Reply

Marsh Posté le 08-07-2002 à 11:55:06    

--greg-- a écrit a écrit :

 
faut apprendre à faire la difference entre une methode publique statique et un membre public mon beau :D




 
Bah oui, je sais. Ms son truc, ça pose exactement le même problème que celui dont il me parle: 'faut préfixer par le nom de la classe. Donc le nom de la classe est en dur !
D'ou le même pb que ce qu'il m'a dit pour mon cas !
(et je suis pas ton beau à toi, égoïste va ! je suis beau, un point c tout !)
 :fuck:

Reply

Marsh Posté le 08-07-2002 à 12:00:43    

une classe d'utilitaire sur les String peut s'appeller difficilement autrement que StringUtils ... enfin moi je dit ca je dis rien hein  :ange:  
 
 [:titprem]  
 
Ceci dit ca ne pose pas le meme probleme du tout !! Tu donne un accès direct à ton singleton. C'est pas comme ca que ca fonctionne. Tu ne cache rien là. En fait ta classe avec un membre statique te sert juste de container, de poubelles quoi.
 
Ca n'a rien à voir avec l'OO. La méthode statique de Benou est 100% correcte car tu ne dois pas avoir une instance d'un objet particulier pour pouvoir l'utiliser.
 
Donc tu as tout faux. Exposer ton singleton comme ca directement c'est pourris. Tu verras jamais personne faire ca ... Au contraire tu utilise une méthode getMachin qui te renvoie le membre privé. Ensuit tu peux appliquer des méthodes sur machin.


Message édité par darklord le 08-07-2002 à 12:01:11

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 12:07:19    

tain et il ose encore me dire que mes posts son incompréhensibles
 
 :??:

Reply

Marsh Posté le 08-07-2002 à 12:07:22    

DarkLord a écrit a écrit :

Au contraire tu utilise une méthode getMachin qui te renvoie le membre privé. Ensuit tu peux appliquer des méthodes sur machin.




 
...toujours aussi délicat toi !
j'comprend pas trop. la citation de toi, là, juste au dessus, c ce qu'y faut faire ou ce qu'y faut pas faire !?

Reply

Marsh Posté le 08-07-2002 à 12:07:56    

--greg-- a écrit a écrit :

tain et il ose encore me dire que mes posts son incompréhensibles
 
 :??:  




 
...qui ça !? moi ?

Reply

Marsh Posté le 08-07-2002 à 12:09:29    

el_gringo a écrit a écrit :

 
 
...qui ça !? moi ?



meuh, non, je parlais de mon darkounet chéri bien sur

Reply

Marsh Posté le 08-07-2002 à 12:10:22    

--greg-- a écrit a écrit :

meuh, non, je parlais de mon darkounet chéri bien sur




 
...fayo ! :D

Reply

Marsh Posté le 08-07-2002 à 12:11:53    

Ce que je dis est très simple.  
 
Donner accès comme ca à un membre statique de manière publique ca ne signifie qu'une chose, que la classe qui la contient est une classe poubelle (dans la plupart des cas).
 
Tu peux très bien faire des trucs élégants avec des membres "statiques" qui en font n'en sont pas. Example
 

Code :
  1. public class PropertiesFile {
  2.     private static Properties p;
  3.     // p est initialisé je ne sais où ...
  4.    
  5.     public static Properties getProperties() {
  6.         return p;
  7.     }
  8. }


 
Ca change quoi? Ca change que tu peux faire tout ce que tu veux dans ta classe PropertiesFile sur p sans avoir de compte à rendre aux classes qui y accèdent. Tu peux changer son nom, tu peux meme changer sa classe si ca te chnate (par une sous classe bien sur sinon y aura un type mismatch).
 
Ca change aussi que tu voudrais que tes clients puissent accéder à ce membre (p) uniquement quand tu l'as décidé. Avec ta méthode tu peux faire PropertiesFile.p n'importe quand (alors que il n'a pas encore été initialisé par exemple)
 
et ca ca pue ...
 
est ce plus clair ?


Message édité par darklord le 08-07-2002 à 12:13:57

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 12:12:12    

--greg-- a écrit a écrit :

tain et il ose encore me dire que mes posts son incompréhensibles
 
 :??:  




 
mais enfin keski est pas clair ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 12:12:50    

el_gringo a écrit a écrit :

 
 
...toujours aussi délicat toi !




 
tu préfère que je te dise que t'es un Dieu en java. Surtout ne change rien à ton code machin ... Bin désolé si tu veux ce genre de réponse c'est pas demain la veille :)
 
Edit : je veux pas dire que t'es nul hein ! Je pense juset que ce que tu veux faire là cpasbien :) Donc je te le dit ;)


Message édité par darklord le 08-07-2002 à 12:13:25

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 12:18:05    

DarkLord a écrit a écrit :

Ce que je dis est très simple.  
 
Donner accès comme ca à un membre statique de manière publique ca ne signifie qu'une chose, que la classe qui la contient est une classe poubelle (dans la plupart des cas).
 
Tu peux très bien faire des trucs élégants avec des membres "statiques" qui en font n'en sont pas. Example
 

Code :
  1. public class PropertiesFile {
  2.     private static Properties p;
  3.     // p est initialisé je ne sais où ...
  4.    
  5.     public static Properties getProperties() {
  6.         return p;
  7.     }
  8. }


 
Ca change quoi? Ca change que tu peux faire tout ce que tu veux dans ta classe PropertiesFile sur p sans avoir de compte à rendre aux classes qui y accèdent. Tu peux changer son nom, tu peux meme changer sa classe si ca te chnate (par une sous classe bien sur sinon y aura un type mismatch).
 
Ca change aussi que tu voudrais que tes clients puissent accéder à ce membre (p) uniquement quand tu l'as décidé. Avec ta méthode tu peux faire PropertiesFile.p n'importe quand (alors que il n'a pas encore été initialisé par exemple)
 
et ca ca pue ...
 
est ce plus clair ?




 
Bah oui, mais, qui t'as dit que ds ma méthode p est public !? il est privé ! je peux pas faire PropertieFile.p !!

Reply

Marsh Posté le 08-07-2002 à 12:19:47    

DarkLord a écrit a écrit :

 
 
tu préfère que je te dise que t'es un Dieu en java. Surtout ne change rien à ton code machin ... Bin désolé si tu veux ce genre de réponse c'est pas demain la veille :)
 
Edit : je veux pas dire que t'es nul hein ! Je pense juset que ce que tu veux faire là cpasbien :) Donc je te le dit ;)




 
Ouais, heureusement, j'voudrais pas que tu m'fasses croire que je suis une brute (de toute façon j'y croirais pas !).
Mais, disons que, quand tu fais un reproche, tu le fais de façon... hum, disons brutale !
Je suis sur que je suis pas le seul à penser ça !:D

Reply

Marsh Posté le 08-07-2002 à 12:32:46    

el_gringo a écrit a écrit :

 
 
Ouais, heureusement, j'voudrais pas que tu m'fasses croire que je suis une brute (de toute façon j'y croirais pas !).
Mais, disons que, quand tu fais un reproche, tu le fais de façon... hum, disons brutale !
Je suis sur que je suis pas le seul à penser ça !:D




 
bin ouais c comme ca, que veux tu que je te dise moi ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 12:32:55    

el_gringo a écrit a écrit :

 
 
Ouais, heureusement, j'voudrais pas que tu m'fasses croire que je suis une brute (de toute façon j'y croirais pas !).
Mais, disons que, quand tu fais un reproche, tu le fais de façon... hum, disons brutale !
Je suis sur que je suis pas le seul à penser ça !:D




 
+1
 
 :o

Reply

Marsh Posté le 08-07-2002 à 12:33:21    

el_gringo a écrit a écrit :

 
 
Bah oui, mais, qui t'as dit que ds ma méthode p est public !? il est privé ! je peux pas faire PropertieFile.p !!




 
bin alors on parle de la meme chose sans le savoir. Bon je laisse tomber parce que ca part dans tout les sens la :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 12:33:49    

el_gringo a écrit a écrit :

 
 
Ouais, heureusement, j'voudrais pas que tu m'fasses croire que je suis une brute (de toute façon j'y croirais pas !).
Mais, disons que, quand tu fais un reproche, tu le fais de façon... hum, disons brutale !
Je suis sur que je suis pas le seul à penser ça !:D




 
te plains pas, il t'as pas encore tappai  ;)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 08-07-2002 à 12:37:49    

--greg-- a écrit a écrit :

 
 
+1
 
 :o  




 
bon d'accord ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2002 à 14:33:23    

Bon, bah merci à ceux qui m'ont aidé. (oui, toi aussi Dark, même surtout toi ! :D)

Reply

Marsh Posté le 08-07-2002 à 14:45:46    

DarkLord a écrit a écrit :

 
 
bon d'accord ...



bien mangé au fait?
:D

Reply

Marsh Posté le 08-07-2002 à 14:54:40    

fantastique ... A moitié couché sur ma console tellement que j'en avais marre de voir ces logs ... MAis bon ca fonctionne avec un test réel ce qui n'est déjà pas rien ;)
 
Je suis assez content. Mais bon on va voir le soir qd il aura 5000 appels à faire :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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