30

Pen^2 (./28) :
(Et si tu veux bloquer l'héritage, tu déclares A finale et puis hop embarrassed)
C’est en effet un problème d’héritage : si une classe dérive de Singleton, elle pourrait, elle, implémenter Cloneable.
Et même si ça paraît débile de marquer explicitement comme Cloneable une classe dérivant d’un Singleton, il faut se dire que que Singleton ne portera peut-être pas un nom si spécifique et n’aura peut-être pas de documentation.

Certes, on peut marquer le Singleton final, mais peut-être aura-t-on besoin un jour d’en dériver, c’est donc d’après moi une mauvaise idée.

Comme une implémentation de clone() est censée appeler super.clone(), ce clone() du Singleton devrait suffire, mais si le programmeur ne le fait pas (zOMGWTFBBQ eek), une protection supplémentaire est de le marquer final (le clone(), pas le Singleton).
Hop, je corrige hehe.
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

31

Ethaniel (./31) :
besoin un jour d'en dériver


fleche ce jour la ça suffit de virer final embarrassed

32

Ethaniel (./30) :
on peut marquer le Singleton final, mais peut-être aura-t-on besoin un jour d’en dériver
Les 2 « on » ne désignent pas forcément la même personne, ni la même équipe.
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

33

./25> cest pas un problème de langage, c'est un problème de JVM (plus spécifiquement, c'est le memory model qui est foireux). C'est un problème spécifique à Java et à quelques autres environnements à VM mal foutus.

C'est la même raison qui fait que le "code" suivant :
x = 0; y = 0;
ThreadA.start(); ThreadB.start();

Thread A

x = 1;
a = y;

Thread B

y = 1;b = x;


...peut se terminer avec l'un des résultats suivants au choix

a=0 et b=1
a=1 et b=0
a=1 et b=1
a=0 et b=0

Les trois premiers résutats sont assez évidents. Le dernier est déjà beaucoup moins intuitif.

34

D'ailleurs je ne comprends pas comment le dernier cas peut se produire, est-ce que tu peux m'expliquer ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

35

x et y n’étant pas définis comme volatile, les 2 instructions de chaque thread sont indépendantes et peuvent être effectuées dans n’importe quel ordre.
En effet, dans le thread A, l’instructions « a=y; » peut être exécutées avant ou après « x=1; » sans changement.
Idem dans le thread B.
Par contre, avec les 2 threads ensemble…

On a donc ce scénario possible :
¤ [A] a=y; fleche a=0
¤ [B] b=x; fleche b=0
¤ [A] x=1; fleche x=1
¤ [B] y=1; fleche y=1
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

36

Ah ok effectivement.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

37

Ethaniel (./30) :
Comme une implémentation de clone() est censée appeler super.clone(), ce clone() du Singleton devrait suffire, mais si le programmeur ne le fait pas (zOMGWTFBBQ eek), une protection supplémentaire est de le marquer final (le clone(), pas le Singleton).

Quand je lis ça, ça me fait marrer à quel point on considère que les codeurs qui passeront après nous peuvent être des nulos. Moi je me dis que si un gars est suffisamment con pour faire ça ben tant pis pour lui, il passera un peu de temps à déboguer et c'est bien fait pour sa gueule, il lira mieux la doc la prochaine fois et fera perdre moins de temps à lui / toi / l'entreprise... embarrassed
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

38

Entièrement d'accord.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité