coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
3 juil. 2005 à 01:04
crazygogo
Messages postés135Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention17 avril 2009
-
7 août 2008 à 15:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
je fais de la pub pour ma source mais elle permet de générer de graphiques vraiment très simplement, il suffit de renseigner des tableaux avec les données en provenance de la BDD....
softwareds
Messages postés11Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention 7 mai 2008 8 mai 2008 à 16:51
Très bonne source, j'ai juste dû ajouter la gestion des mois pour obtenir ce que je recherchais.
Bravo et merci.
rlftova
Messages postés8Date d'inscriptionmardi 18 avril 2006StatutMembreDernière intervention26 mars 2008 22 févr. 2008 à 11:11
Bonjour,
j'aurais juste une question :
comment exploiter cette source avec dans les array des variables en boucle.
par exemple $y correspond à une année, $variable correspond à ma variable, $variable[$y] étant la valeur de ma variable pour l'année $y. Comment générer le tableau avec un for ($y=$annee1;$y<=$annee2;$y++) ?
merci.
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 21 févr. 2008 à 11:12
Salut,
Pour le "serie 1", "serie 2"... les valeurs sont gérés dans le init de l'objet, et stockées dans "legende"
La 1ère version de cette classe d'histogramme utilisait des balises
, et j'utilisais le champ "legende" dans la propriété "alt" de la balise
.
En gros, l'info apparaissait lorsqu'on passait la souris sur une barre (il y avait le nom de la série suivi de la valeur entre parenthèses)
Dans la 2ième version qui est ici, j'ai ré-utilisé un tronc commun objet, mais je n'ai effectivement pas géré cette valeur, donc tu as parfaitement raison, ca ne sert à rien, je ne m'en étais pas rendu compte d'ailleurs
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 16 févr. 2008 à 00:36
Bon il faut laisser tomber la seconde question, je ne voyait pas les chose correctement.
Cependant, j'aimerai afficher (par Ex:) les mois sous les chiffes que je récupèrent, les mois ou du texte différent fct de chaque barre me suis-je bien fait comprendre ?
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 15 févr. 2008 à 21:43
Une petite question a poser a l'auteur de cette source.
dans cette partie du code, ou est afficher et/ou a quoi sert "serie1", j'ai beau modifier le text ca ne change rien du tout.
Une petite explication ?
* $h1 = new TGDListeCouleur;
* $h1->init(255,0,255,
* "série 1",
* array(50, -20, 30, 7, 12));
* $maitre->add($h1);
Seconde question (je planche dessus mais a tout hasard je pose la question) :
comment decaler les chiffre de facon a rendre un poil plus claire la lecture.
D'avance merci. et 9/10 pour le fait du serie1,serie2,serie3,... qui (ne semble) servir à rien.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 22 avril 2006 à 13:24
envoi ton code à coucou747@hotmail.com, je t'aiderais volontier....
mais si la variable ne s'affiche pas, c'est qu'elle n'existe pas...
vérifie aussi que dans ton include, tu n'affiches pas de texte : en http, une requette renvoi un seul fichier...
rlftova
Messages postés8Date d'inscriptionmardi 18 avril 2006StatutMembreDernière intervention26 mars 2008 21 avril 2006 à 14:19
Bonjour,
encore moi. La variable ne s'affiche pas, mais quand je veux faire un include du fichier dans lequel sont les variables, c'est l'image qui ne veut plus s'afficher.
As-tu une solution ???
Merci
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 19 avril 2006 à 19:34
je n'ai pas regardé le code depuis longtemps mais quand tu remplace un nombre par une variable, alors ça ne change rien...
fais un echo $var, gettype($var); pour vérifier que ta variable est corecte...
rlftova
Messages postés8Date d'inscriptionmardi 18 avril 2006StatutMembreDernière intervention26 mars 2008 19 avril 2006 à 19:11
J'y avais pensé mais ca ne marche pas ! Il doit y avoir quelque chose qui m'échappe !
Quand je fais :
$h1->init(204,204,204,
"série 1",
array($valeur[$annee1], $valeur[$annee2]));
Pas moyen d'afficher les barres, ca me laisse une image plate.
Merci
A+
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 19 avril 2006 à 13:22
tu remplaces les chiffres par ta variable...
rlftova
Messages postés8Date d'inscriptionmardi 18 avril 2006StatutMembreDernière intervention26 mars 2008 18 avril 2006 à 23:11
Une petite question de néophite. Comment puis-je inclure des variables PHP au lieu de mettre directement des chiffres ?
Merci
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 5 févr. 2006 à 14:39
"Bref, la classe, c'est plus "class" ;-)"=> si c'est juste l'effet de mode...
o00zeus00o
Messages postés17Date d'inscriptionvendredi 15 mars 2002StatutMembreDernière intervention31 octobre 2007 12 juil. 2005 à 09:10
Bon travail, continue ;)
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 4 juil. 2005 à 13:38
On peut quand même trouver des avantages à l'utilisation d'une classe sur une simple fonction:
Si on met de coté la partie OO, et qu'on se consacre à ce que sait faire PHP 4, la classe en tant que "structure" est plus pratique ne serais-ce que parcequ'elle permet de saisir les paramètres de manière plus intuitive, pourvu qu'on lui donne des noms suffisement parlants.
En effet, pour appeler une fonction de 10 parametres , il faut se rappeler l'ordre, etc...
Si ces paramètres sont des proprietes d'une classe, c'est plus parlant et plus joli !
Sans compter que pour dessiner, il faut une fonction principale, ok, mais qui en appelle quelques autres: si je mets tous dans une seule procedure, je ne peux plus re-utiliser la partie commune à la gestion de l'histo en css et l'histo en GD, et je dois tout re-ecrire (copier coller, si bug trouve corriger en 2 endroits...).
Donc plusieurs fonctions avec encore passage de plein de parametres...
Bref, la classe, c'est plus "class" ;-)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 juil. 2005 à 13:24
c'est une bonne source, je ne dis pas le contraire, j'ai simplement dit que je n'aurais pas utilisé l'objet ici...
mon chat peut miauler, manger, se nourrir, bouger, griffer...
ta liste de point, bah elle a une moyenne, une médiane, un écartype, elle peut être une class!
ton histogramme, il peut s'afficher et c'est tout !
évidement, il peut s'afficher de plusieurs façons, mais ça pourrait être un paramètre de fonction... voila, la diférence avec mon chat...
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 4 juil. 2005 à 13:09
C'est vrai qu'on ne voit pas les choses du même point de vue:
"une class chat héréditaire de la class animaux..."
Moi je suis partie du principe qu'un Histogramme, c'etait plusieurs listes de points, et qu'une liste de points... c'est une liste de points !
j'ai donc fait une classe histogramme (TGDHistogramme) héreditaire de la classe
liste de points pour histo (TListePourSerieHisto) héréditaire de la classe "données" (TListeSimple)
Si je dois faire un camenbert, je ferais une classe Camembert (TGDCamenbert) héréditaire de la classe "données" (TListeSimple)
Ah, euhhh... et elle est où la différence avec ton chat ?
Bon, allez, je laisse tomber, d'toute facon, c'est vrai que parler d'objet avec php 4, c'est n'importe quoi... en tout cas j'suis content de m'être tromper et d'apprendre que t'as fait de l'objet ailleurs, n'empêche que pour ceux qui connaissent pas l'objet, le code est quand même un bon tuto à mon sens...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 juil. 2005 à 12:39
lol, je n'ai fait qu'exprimer mon point de vue...
je n'ai pas découvert la POO en php, mais en C++...
On ne programme pas de la même façon, mais j'ai déja croisé des programmeurs qui comme toi mettent des classes partout...
Moi, personellement, je mets des structs en C++, et ça ne me dérance pas plus que ça, c'est une fonctionalitée comme une autre... (et ne dis pas que la struct est au c++ ce que le goto est à la programmation !)
je fais aussi de la POO en javascript.
J'aimes bien le php, pour mon blog, j'avais fait une class Page, on pouvait ajouter des commentaire a travers une fonction, on pouvait voter pour un sondage, on pouvait la suprimer... Elle pouvait s'afficher, elle pouvait afficher un sondage et des RSS...
quand tu portes un code C++ en code C, tu transformes chaque class en une struct et plein de fonctions, donc ta class a plein de sorties... On ne devrait pas pouvoir transformer une class en une seule fonction, la, on peut faire une fonction dessiner_histogramme($array_stat, $array_couleurs, $dimx, $dimy); dans un livre de C++, on ne voit pas de class miauler, on voit une class chat héréditaire de la class animaux...
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 4 juil. 2005 à 12:06
Là, je suis à OBLIGE de répondre au 2ième paragraphe.
La POO (tu verras ça dans n'importe quel livre) est basée sur 3 principes de base:
- L'encapsulation (présente dans php 5 mais pas dans 4)
- L'héritage
- Le polymmorphisme (simulé dans php)
Tout ca à partir d'une structure appelé "classe"
La programmation objet, c'est une philosophie de programmation, pas un truc destiné à être utilisé à partir de "n" paramètres de sorties, mais au contraire tout le temps (je reviens sur
ce point à la fin du message).
L'introduction de la POO a changé le mode de pensée du programmeur : les données sont maitre de leur contenu, c'est à dire qu'elles se gèrent elles même (fonctions incluses dans l'objet pour le gérer, et non pas fonction externe qui gère les données)
De plus, un des principaux but pour lequel la POO a été introduite est d'avoir un code facilement modifiable, transformable, maintenable, notamment grace à la notion d'heritage.
Hors, j'ai parcouru la semaine quelques uns des codes php les plus populaires du site, et j'en ai ouvert une vingtaine, ceux dont les appréciations étaient bonnes: AUCUN (j'en ai peut-être sauté un, je dis pas) n'utilisait la notion d'héritage, le SEUL des 3 points principaux de la POO présent dans PHP 4 !!!
C'est pour ca que j'ai trouvé que le code fourni pouvait ammener quelque chose d'INSTRUCTIF à la communauté:
il utilise l'héritage, et m'a permis de faire mes modifications en une heure (je ne connaissais pas du tout GD), parceque le code que j'avais écrit était suffisamment générique à la base.
CONCLUSION
1) manipuler des classes ne signifie pas que l'on sait programmer en objet
(c'est comme connaitre connaitre des théorèmes par coeur: on peut savoir s'en servir pour faire des petites démonstrations, mais ca veut pas dire qu'on sait les utiliser pour démontrer des choses compliquées. )
2) je reviens sur les "n sorties" necessaires pour utiliser une classe.
C'est tout à fait faux, et en plus c'est un truc de base qu'on retrouve sur tout les bouquins: la philosophie POO, dans le cas des stats, ce serait créér un objet TDonnees de base sur lequel on va faire toutes les manips de données, et qui va avoir des fonctions abstraites "dessiner()", "inverser()" etc... qui seront implémentées dans des classes descendantes Thistogramme, TCamembert, puisqu'elles seront spécifiques à l'objet descendant...
3) Tes affirmations sur la POO montrent bien que tu à découvert par toi-même la POO à partir de PHP, et pas à partir d'un vrai langage OO, je te conseilles donc de lire un bouquin qui en parle, parceque là, t'es en train de prendre de très mauvaises habitudes, exactement comme moi quand j'utilise des "
" au lieu '
', sauf que je pense sincèrement que c'est un peu plus grave dans ton cas, vu que c'est une erreur de raisonnement: tu vas exactement à l'inverse de la philosophie OO ...
Cordialement
OC.
Ceci dit en toute amitié, perso, même si je râle quand on me dit d'utiliser telle ou telle méthode plutôt qu'une autre parcequ'on gagne 1/100 de seconde au bout de 100000 itérations, je fini quand même par le faire...
Et depuis un mois que je me suis mis à PHP, je suis pas tombé sur un seul script qui utilisait l'héritage, à part des tutoriaux sans but précis, donc c'est normal si on a pas fait de POO avec un vrai langage OO de ne pas savoir tout ca. Normal mais vraiment dommage.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 juil. 2005 à 11:14
en php, ce qui limite la fin d'une instruction, ce n'est pas le retour à la ligne, c'est le point virgule...
d'un point de vue objet, c'est sur que c'est plus simple pour créer des histogrammes, mais SELON MOI, un histogramme qui se présenterais sous forme OO devrait avoir plus de possibilitées de personalisations que add_stats... On devrait pouvoir choisir entre 3d et 2d, une échelle, les dimentions, couleurs, légende... Si elle ne reçoit qu'une série statistique, alors une fonction devrait suffire... Une class a plusieurs entrées et plusieurs sorties, je crois que dans ton script, tu as plusieurs entrées, mais une seule sortie, tu devrais proposer CSS/2d/3d, et la, la class serait plus apropriée... Une class doit donc avoir plusieurs sortie, je n'ai pas de grandes conaissances en stats, mais si j'avais fait une class qui cré des histogrammes, je l'aurais appelée stat, elle aurait pu permetre de calculer les moyennes, les médianes, les quartiles, d'afficher des boites à moustaches, des histogrammes, des camemberts...
Enfin voila, ça reste mon avis, certains programmeurs utilisent des class la ou une fonction de cinq lignes peut faire l'affaire, personellement, je ne fais des class que quand on a plusieurs entrées et plusieurs sorties, tu fais diférement, et c'est pas forcément plus mal, même si les class ne sont pas faites pour ça à l'origine...
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 4 juil. 2005 à 10:53
Ne t'en fais pas, je n'ais pas mal interprété ce que tu as écris. Je voulais juste que tu me dises si toi aussi tu trouvais le code interressant d'un point de vue "objet"...
Par contre je connaissais pas l'écriture
'
'
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 juil. 2005 à 09:24
Je n'ai pas dit que cette source était nulle, j'ai dit que j'avais trouvé quelques optimisations !
C'est un bon code, mais on peut faire plus optimisé...
ne le prends pas comme une erreur, prends ça comme une meilleur option...
PS :
'
'."\n"
est moins rapide que :
'
'
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 4 juil. 2005 à 01:15
Bon, pour les côtes et les doubles côtes, t'es dur!
le seul endroit où j'ai laissé les doubles, c qu'il y avait quelque chose à interpréter.
De plus est-ce certain (par exemple) que (même au centième de seconde près sur 100000 itérations)
"
\n" : interpréter une chaine de 8 caractères
soit plus lent que
'
'."\n" : concatener une chaine de 6 caractères avec
l'interprétation d'une chaine de 2 caractères ?
Sinon, c'est bien de voir les optimisations, mais que penses tu du fond?
Parceque là, c'est comme si tu critiquais "Notre Dame de Paris"
sur les fautes d'orthographe du manuscrit original de Victor Hugo, sans te soucier de l'histoire en elle même.
(PS: je me prends pas pour le victor Hugo de la programmation lol)
Perso, je pense que l'ensemble des 3 scripts est un bon exemple
pour ceux qui connaissent les classes et qui veulent avoir une idée de ce qu'apporte la programmation objet
(et je sais, PHP 4 n'est pas un langage orienté objet !)
C'est pour cette unique raison que j'ai re-publié un nouveau source histogramme, sinon, je l'aurai gardé pour moi, vu le nombre de sources qui doivent faire ca...
(encore que je suis content, j'ai pas trouvé ma représentation sur le site de jpgraph, donc elle a quelque chose d'original !)
Quand à la 3ieme couleur, je laisse ceux qui éventuellement voudraient utiliser ce source faire toutes les modifs qu'ils veulent: trivial pour quelqu'un comme toi, un bon exercice de compréhension pour un débutant... Perso, je trouve que c'est très bien comme ca, et en plus ca a l'air d'etre une norme, en tout cas pour jpgraph qui n'utilise qu'une seule même couleur pour les 2 faces en perspective !
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 3 juil. 2005 à 23:05
pour le someil... question d'habitude...
pour le code, j'ai trouvé quelque chose à redire : tu peux augmenter la vitesse d'exécution de ta class css :
-les doubles guillemets sont à éviter, mieux vaut utiliser les simples, ils sont plus rapide d'exécution.
-les sont préférables aux quand les types sont identiques.
sinon, tu peux mettre une troisième couleur comme on voit trois cotés...
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 3 juil. 2005 à 10:07
Dégradé rajouté!
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 3 juil. 2005 à 02:28
C'est vraiment pas ça le plus dur...
Dès que j'aurais un moment, je "corrigerais" ça...
A propos, tu dors jamais, toi ?
Bonne nuit !
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 3 juil. 2005 à 01:04
je n'ai pas pris le temps de regarder le code (je le ferais sous peu) mais je tiens quand même à dire que quand on fait de la 3d, il faut savoir mettre différentes teintes de couleurs pour montrer les expositions différentes des différentes faces...
7 août 2008 à 15:05
je fais de la pub pour ma source mais elle permet de générer de graphiques vraiment très simplement, il suffit de renseigner des tableaux avec les données en provenance de la BDD....
http://www.phpcs.com/code.aspx?ID=47171
8 mai 2008 à 16:51
Bravo et merci.
22 févr. 2008 à 11:11
j'aurais juste une question :
comment exploiter cette source avec dans les array des variables en boucle.
par exemple $y correspond à une année, $variable correspond à ma variable, $variable[$y] étant la valeur de ma variable pour l'année $y. Comment générer le tableau avec un for ($y=$annee1;$y<=$annee2;$y++) ?
merci.
21 févr. 2008 à 11:12
Pour le "serie 1", "serie 2"... les valeurs sont gérés dans le init de l'objet, et stockées dans "legende"
La 1ère version de cette classe d'histogramme utilisait des balises
, et j'utilisais le champ "legende" dans la propriété "alt" de la balise
.
En gros, l'info apparaissait lorsqu'on passait la souris sur une barre (il y avait le nom de la série suivi de la valeur entre parenthèses)
Dans la 2ième version qui est ici, j'ai ré-utilisé un tronc commun objet, mais je n'ai effectivement pas géré cette valeur, donc tu as parfaitement raison, ca ne sert à rien, je ne m'en étais pas rendu compte d'ailleurs
PS: les 2 versions du code se trouvent sur mon site,
http://mywebdev.free.fr/PHP/index.php
16 févr. 2008 à 00:36
Cependant, j'aimerai afficher (par Ex:) les mois sous les chiffes que je récupèrent, les mois ou du texte différent fct de chaque barre me suis-je bien fait comprendre ?
_ _ _
| | | | _ | |
| | | | | | | | (Bon faut imaginer que c'est l'histogramme).
| | | | | | | |
|_| |_| |_| |_|
4 4 2 5
jan fev Mar Avr
Il me faudrait quelque chose comme ça !
Merci.
15 févr. 2008 à 21:43
dans cette partie du code, ou est afficher et/ou a quoi sert "serie1", j'ai beau modifier le text ca ne change rien du tout.
Une petite explication ?
* $h1 = new TGDListeCouleur;
* $h1->init(255,0,255,
* "série 1",
* array(50, -20, 30, 7, 12));
* $maitre->add($h1);
Seconde question (je planche dessus mais a tout hasard je pose la question) :
comment decaler les chiffre de facon a rendre un poil plus claire la lecture.
D'avance merci. et 9/10 pour le fait du serie1,serie2,serie3,... qui (ne semble) servir à rien.
22 avril 2006 à 13:24
mais si la variable ne s'affiche pas, c'est qu'elle n'existe pas...
vérifie aussi que dans ton include, tu n'affiches pas de texte : en http, une requette renvoi un seul fichier...
21 avril 2006 à 14:19
encore moi. La variable ne s'affiche pas, mais quand je veux faire un include du fichier dans lequel sont les variables, c'est l'image qui ne veut plus s'afficher.
As-tu une solution ???
Merci
19 avril 2006 à 19:34
fais un echo $var, gettype($var); pour vérifier que ta variable est corecte...
19 avril 2006 à 19:11
Quand je fais :
$h1->init(204,204,204,
"série 1",
array($valeur[$annee1], $valeur[$annee2]));
Pas moyen d'afficher les barres, ca me laisse une image plate.
Merci
A+
19 avril 2006 à 13:22
18 avril 2006 à 23:11
Merci
5 févr. 2006 à 14:39
12 juil. 2005 à 09:10
4 juil. 2005 à 13:38
Si on met de coté la partie OO, et qu'on se consacre à ce que sait faire PHP 4, la classe en tant que "structure" est plus pratique ne serais-ce que parcequ'elle permet de saisir les paramètres de manière plus intuitive, pourvu qu'on lui donne des noms suffisement parlants.
En effet, pour appeler une fonction de 10 parametres , il faut se rappeler l'ordre, etc...
Si ces paramètres sont des proprietes d'une classe, c'est plus parlant et plus joli !
Sans compter que pour dessiner, il faut une fonction principale, ok, mais qui en appelle quelques autres: si je mets tous dans une seule procedure, je ne peux plus re-utiliser la partie commune à la gestion de l'histo en css et l'histo en GD, et je dois tout re-ecrire (copier coller, si bug trouve corriger en 2 endroits...).
Donc plusieurs fonctions avec encore passage de plein de parametres...
Bref, la classe, c'est plus "class" ;-)
4 juil. 2005 à 13:24
mon chat peut miauler, manger, se nourrir, bouger, griffer...
ta liste de point, bah elle a une moyenne, une médiane, un écartype, elle peut être une class!
ton histogramme, il peut s'afficher et c'est tout !
évidement, il peut s'afficher de plusieurs façons, mais ça pourrait être un paramètre de fonction... voila, la diférence avec mon chat...
4 juil. 2005 à 13:09
"une class chat héréditaire de la class animaux..."
Moi je suis partie du principe qu'un Histogramme, c'etait plusieurs listes de points, et qu'une liste de points... c'est une liste de points !
j'ai donc fait une classe histogramme (TGDHistogramme) héreditaire de la classe
liste de points pour histo (TListePourSerieHisto) héréditaire de la classe "données" (TListeSimple)
Si je dois faire un camenbert, je ferais une classe Camembert (TGDCamenbert) héréditaire de la classe "données" (TListeSimple)
Ah, euhhh... et elle est où la différence avec ton chat ?
Bon, allez, je laisse tomber, d'toute facon, c'est vrai que parler d'objet avec php 4, c'est n'importe quoi... en tout cas j'suis content de m'être tromper et d'apprendre que t'as fait de l'objet ailleurs, n'empêche que pour ceux qui connaissent pas l'objet, le code est quand même un bon tuto à mon sens...
4 juil. 2005 à 12:39
je n'ai pas découvert la POO en php, mais en C++...
On ne programme pas de la même façon, mais j'ai déja croisé des programmeurs qui comme toi mettent des classes partout...
Moi, personellement, je mets des structs en C++, et ça ne me dérance pas plus que ça, c'est une fonctionalitée comme une autre... (et ne dis pas que la struct est au c++ ce que le goto est à la programmation !)
je fais aussi de la POO en javascript.
J'aimes bien le php, pour mon blog, j'avais fait une class Page, on pouvait ajouter des commentaire a travers une fonction, on pouvait voter pour un sondage, on pouvait la suprimer... Elle pouvait s'afficher, elle pouvait afficher un sondage et des RSS...
quand tu portes un code C++ en code C, tu transformes chaque class en une struct et plein de fonctions, donc ta class a plein de sorties... On ne devrait pas pouvoir transformer une class en une seule fonction, la, on peut faire une fonction dessiner_histogramme($array_stat, $array_couleurs, $dimx, $dimy); dans un livre de C++, on ne voit pas de class miauler, on voit une class chat héréditaire de la class animaux...
4 juil. 2005 à 12:06
La POO (tu verras ça dans n'importe quel livre) est basée sur 3 principes de base:
- L'encapsulation (présente dans php 5 mais pas dans 4)
- L'héritage
- Le polymmorphisme (simulé dans php)
Tout ca à partir d'une structure appelé "classe"
La programmation objet, c'est une philosophie de programmation, pas un truc destiné à être utilisé à partir de "n" paramètres de sorties, mais au contraire tout le temps (je reviens sur
ce point à la fin du message).
L'introduction de la POO a changé le mode de pensée du programmeur : les données sont maitre de leur contenu, c'est à dire qu'elles se gèrent elles même (fonctions incluses dans l'objet pour le gérer, et non pas fonction externe qui gère les données)
De plus, un des principaux but pour lequel la POO a été introduite est d'avoir un code facilement modifiable, transformable, maintenable, notamment grace à la notion d'heritage.
Hors, j'ai parcouru la semaine quelques uns des codes php les plus populaires du site, et j'en ai ouvert une vingtaine, ceux dont les appréciations étaient bonnes: AUCUN (j'en ai peut-être sauté un, je dis pas) n'utilisait la notion d'héritage, le SEUL des 3 points principaux de la POO présent dans PHP 4 !!!
C'est pour ca que j'ai trouvé que le code fourni pouvait ammener quelque chose d'INSTRUCTIF à la communauté:
il utilise l'héritage, et m'a permis de faire mes modifications en une heure (je ne connaissais pas du tout GD), parceque le code que j'avais écrit était suffisamment générique à la base.
CONCLUSION
1) manipuler des classes ne signifie pas que l'on sait programmer en objet
(c'est comme connaitre connaitre des théorèmes par coeur: on peut savoir s'en servir pour faire des petites démonstrations, mais ca veut pas dire qu'on sait les utiliser pour démontrer des choses compliquées. )
2) je reviens sur les "n sorties" necessaires pour utiliser une classe.
C'est tout à fait faux, et en plus c'est un truc de base qu'on retrouve sur tout les bouquins: la philosophie POO, dans le cas des stats, ce serait créér un objet TDonnees de base sur lequel on va faire toutes les manips de données, et qui va avoir des fonctions abstraites "dessiner()", "inverser()" etc... qui seront implémentées dans des classes descendantes Thistogramme, TCamembert, puisqu'elles seront spécifiques à l'objet descendant...
3) Tes affirmations sur la POO montrent bien que tu à découvert par toi-même la POO à partir de PHP, et pas à partir d'un vrai langage OO, je te conseilles donc de lire un bouquin qui en parle, parceque là, t'es en train de prendre de très mauvaises habitudes, exactement comme moi quand j'utilise des "
" au lieu '
', sauf que je pense sincèrement que c'est un peu plus grave dans ton cas, vu que c'est une erreur de raisonnement: tu vas exactement à l'inverse de la philosophie OO ...
Cordialement
OC.
Ceci dit en toute amitié, perso, même si je râle quand on me dit d'utiliser telle ou telle méthode plutôt qu'une autre parcequ'on gagne 1/100 de seconde au bout de 100000 itérations, je fini quand même par le faire...
Et depuis un mois que je me suis mis à PHP, je suis pas tombé sur un seul script qui utilisait l'héritage, à part des tutoriaux sans but précis, donc c'est normal si on a pas fait de POO avec un vrai langage OO de ne pas savoir tout ca. Normal mais vraiment dommage.
4 juil. 2005 à 11:14
d'un point de vue objet, c'est sur que c'est plus simple pour créer des histogrammes, mais SELON MOI, un histogramme qui se présenterais sous forme OO devrait avoir plus de possibilitées de personalisations que add_stats... On devrait pouvoir choisir entre 3d et 2d, une échelle, les dimentions, couleurs, légende... Si elle ne reçoit qu'une série statistique, alors une fonction devrait suffire... Une class a plusieurs entrées et plusieurs sorties, je crois que dans ton script, tu as plusieurs entrées, mais une seule sortie, tu devrais proposer CSS/2d/3d, et la, la class serait plus apropriée... Une class doit donc avoir plusieurs sortie, je n'ai pas de grandes conaissances en stats, mais si j'avais fait une class qui cré des histogrammes, je l'aurais appelée stat, elle aurait pu permetre de calculer les moyennes, les médianes, les quartiles, d'afficher des boites à moustaches, des histogrammes, des camemberts...
Enfin voila, ça reste mon avis, certains programmeurs utilisent des class la ou une fonction de cinq lignes peut faire l'affaire, personellement, je ne fais des class que quand on a plusieurs entrées et plusieurs sorties, tu fais diférement, et c'est pas forcément plus mal, même si les class ne sont pas faites pour ça à l'origine...
4 juil. 2005 à 10:53
Par contre je connaissais pas l'écriture
'
'
4 juil. 2005 à 09:24
C'est un bon code, mais on peut faire plus optimisé...
ne le prends pas comme une erreur, prends ça comme une meilleur option...
PS :
'
'."\n"
est moins rapide que :
'
'
4 juil. 2005 à 01:15
le seul endroit où j'ai laissé les doubles, c qu'il y avait quelque chose à interpréter.
De plus est-ce certain (par exemple) que (même au centième de seconde près sur 100000 itérations)
"
\n" : interpréter une chaine de 8 caractères
soit plus lent que
'
'."\n" : concatener une chaine de 6 caractères avec
l'interprétation d'une chaine de 2 caractères ?
Sinon, c'est bien de voir les optimisations, mais que penses tu du fond?
Parceque là, c'est comme si tu critiquais "Notre Dame de Paris"
sur les fautes d'orthographe du manuscrit original de Victor Hugo, sans te soucier de l'histoire en elle même.
(PS: je me prends pas pour le victor Hugo de la programmation lol)
Perso, je pense que l'ensemble des 3 scripts est un bon exemple
pour ceux qui connaissent les classes et qui veulent avoir une idée de ce qu'apporte la programmation objet
(et je sais, PHP 4 n'est pas un langage orienté objet !)
C'est pour cette unique raison que j'ai re-publié un nouveau source histogramme, sinon, je l'aurai gardé pour moi, vu le nombre de sources qui doivent faire ca...
(encore que je suis content, j'ai pas trouvé ma représentation sur le site de jpgraph, donc elle a quelque chose d'original !)
Quand à la 3ieme couleur, je laisse ceux qui éventuellement voudraient utiliser ce source faire toutes les modifs qu'ils veulent: trivial pour quelqu'un comme toi, un bon exercice de compréhension pour un débutant... Perso, je trouve que c'est très bien comme ca, et en plus ca a l'air d'etre une norme, en tout cas pour jpgraph qui n'utilise qu'une seule même couleur pour les 2 faces en perspective !
3 juil. 2005 à 23:05
pour le code, j'ai trouvé quelque chose à redire : tu peux augmenter la vitesse d'exécution de ta class css :
-les doubles guillemets sont à éviter, mieux vaut utiliser les simples, ils sont plus rapide d'exécution.
-les sont préférables aux quand les types sont identiques.
sinon, tu peux mettre une troisième couleur comme on voit trois cotés...
3 juil. 2005 à 10:07
3 juil. 2005 à 02:28
Dès que j'aurais un moment, je "corrigerais" ça...
A propos, tu dors jamais, toi ?
Bonne nuit !
3 juil. 2005 à 01:04