Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Avis sur les includes files

59 réponses
Avatar
Gégé
Salut,

Dans mon projet, j'ai cr=E9e un global.h qui contient tous les includes
des librairies annexes que j'utilise.
Du coup je mets ce global.h dans l'ent=EAte de mes classes ( qui
n'utilisent pas n=E9cessairement toutes les librairies =E0 la fois ).

Question : Est-ce qu'il vaut mieux mettre les #include au cas par cas
dans chaque header de les classes ? ( Et pourquoi ? )

Merci
G

ma principale motivation =E9tait de ne pas copier / coller des tonnes de
#include dans chaque .h

10 réponses

1 2 3 4 5
Avatar
Marc Boyer
On 2009-02-02, Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...



Euh, mauvaise logique, changer de logique.



Je pense que tu as mal compris mon propos.

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.



Je n'autorise pas ce genre de chose. Simplement, quand tu énonces
une règles "genre, les variables partagées, c'est mal", et que les
étudiants voient dans leur pratique (TP) qu'en fait, ça leur
simplifie la vie (ce qui est vrai), il faut expliquer la différence
de contexte.

Un étudiant a souvent du mal à réaliser que ce qu'il prend
pour un gros projet (5000 LOC, 240h de travail) ne représente
pas grand chose au niveau industriel, et que les règles qu'on
présente sont là pour gérer des problèmes qui ne se posent
pas sur d'aussi petit projets.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
Michael DOUBEZ
Jean-Marc Bourguet wrote:
Michael DOUBEZ writes:

Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...


Euh, mauvaise logique, changer de logique.
Une bonne partie de l'informatique, c'est cense etre faire des choses
qui marchent de facon previsible.
99% de ce qu'on fait est debile, c'est le 1% restant qui presente
de l'interet.
Il faut s'arranger pour que les 99% soient les plus simples possibles,
de facon mecanique, ce qui veut dire prendre des automatismes corrects.
(comme presenter son code toujours de la meme facon, verifier les appels
systemes qui peuvent echouer, ne pas laisser passer de warnings a la
compilation).
Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.


Un TP est un temps limité. Je comprends qu'il soit souhaitable de se
concentrer sur les objectifs du TP plutôt que de passer du temps sur
l'aspect qualité (qui est une mesure assez vague). En plus, le message est
plus clair si il n'est pas parasité par des considérations secondes par
rapport à ce qui doit être démontré.



Si dans les TP on ne voit pas les bonnes pratiques, on prend beaucoup trop
de mauvaises habitudes.



C'est vrai mais il y a une différence de contexte et certaines pratiques
industrielles qui sont utilisée en support de valeurs non fonctionnelles
comme: la maintenabilité, le travail en équipe, la résilience ... ne
doivent pas, à mon avis, prendre le pas sur l'objectif pédagogique.

Je ne suis pas professeur et c'est une vue extérieur mais,
intellectuellement, je comprends la logique.

Je suis d'accord que la difficulté pour l'étudiant sera alors de faire
le travaille de passer d'un contexte à l'autre et d'unifier ce qu'il
aura appris. C'est d'ailleurs, à mon sens, un des points principaux de
la période d'apprentissage d'un junior.

--
Michael
Avatar
Marc Boyer
On 2009-02-03, Jean-Marc Bourguet wrote:
Michael DOUBEZ writes:
Un TP est un temps limité. Je comprends qu'il soit souhaitable de se
concentrer sur les objectifs du TP plutôt que de passer du temps sur
l'aspect qualité (qui est une mesure assez vague). En plus, le message est
plus clair si il n'est pas parasité par des considérations secondes par
rapport à ce qui doit être démontré.



Si dans les TP on ne voit pas les bonnes pratiques, on prend beaucoup trop
de mauvaises habitudes.



C'est difficile à évaluer comme compromis.
Ceci dit, je commence toujours mes cours par dire que le défis de
l'informatique depuis environ 15 ans, c'est pas d'avoir un code qui
tourne le jour de son développement, mais un code maintenable.
Mais par exemple, on a pas le temps de faire des tests unitaires
corrects en TP.

(Personnellement, j'avais pris le texte de Marc Boyer comme de l'ironie).



En effet, une façon de dire que "chez les pros", on ne
fait pas comme ça, et de dire pourquoi (durée de vie du logiciel).

Marc
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
espie
In article <4988104a$0$17008$,
Michael DOUBEZ wrote:
Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...



Euh, mauvaise logique, changer de logique.

Une bonne partie de l'informatique, c'est cense etre faire des choses
qui marchent de facon previsible.

99% de ce qu'on fait est debile, c'est le 1% restant qui presente
de l'interet.

Il faut s'arranger pour que les 99% soient les plus simples possibles,
de facon mecanique, ce qui veut dire prendre des automatismes corrects.
(comme presenter son code toujours de la meme facon, verifier les appels
systemes qui peuvent echouer, ne pas laisser passer de warnings a la
compilation).

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.



Un TP est un temps limité. Je comprends qu'il soit souhaitable de se
concentrer sur les objectifs du TP plutôt que de passer du temps sur
l'aspect qualité (qui est une mesure assez vague). En plus, le message
est plus clair si il n'est pas parasité par des considérations secondes
par rapport à ce qui doit être démontré.



Oui, enfin la, on parle d'une astuce a la con, qui ne gagne meme pas
specialement de temps sur le TP, qui demande a y reflechir un peu rien
que pour l'appliquer, et qui est nocive sur du vrai code.

Lorsque je bosse avec mes etudiants, je n'insiste pas non plus pour leur
faire faire des tests unitaires, mais j'insiste pour qu'ils bannissent
tout "truc" qui va les faire lyncher sur du vrai code, histoire qu'ils prennent
de bonnes habitudes, et j'insiste aussi pour qu'ils trouvent des noms de
fonctions et de variables censees.


Je ne vois pas l'interet de s'encombrer la tete avec plusieurs facons
de faire du code. On s'en prend une qui est correcte et on s'y tient.





Les aficionados de PERL vont faire une attaque. :)



Dommage, j'en fais partie. Comme quoi...
les afficionados de perl ont generalement un regard extremement critique sur
les pratiques de developpement. Ils ont transcende depuis quelques annees
les petits details de syntaxe concrete, et savent ecrire du code qui marche,
pour une definition adequate de "qui marche".
Avatar
Wykaaa
Michael DOUBEZ a écrit :
Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...



Euh, mauvaise logique, changer de logique.

Une bonne partie de l'informatique, c'est cense etre faire des choses
qui marchent de facon previsible.

99% de ce qu'on fait est debile, c'est le 1% restant qui presente
de l'interet.

Il faut s'arranger pour que les 99% soient les plus simples possibles,
de facon mecanique, ce qui veut dire prendre des automatismes corrects.
(comme presenter son code toujours de la meme facon, verifier les appels
systemes qui peuvent echouer, ne pas laisser passer de warnings a la
compilation).

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.



Un TP est un temps limité. Je comprends qu'il soit souhaitable de se
concentrer sur les objectifs du TP plutôt que de passer du temps sur
l'aspect qualité (qui est une mesure assez vague). En plus, le message
est plus clair si il n'est pas parasité par des considérations secondes
par rapport à ce qui doit être démontré.



L'aspect qualité est en aucune manière une mesure "assez vague". Il
existe des facteurs et des critères qualité définis depuis au moins 1977
(approche de Mac Call, à l'époque chez General Electric) et des
métriques qui permettent de les mesurer. des outils logiciels comme
Logiscope de Telelogic mettent en oeuvre cette démarche et j'utilise cet
outil pour les audits de code. C'est là qu'on s'aperçoit, dans
l'industrie, les ravages que peut faire une approche pédagogique qui ne
prend pas en compte les aspects qualité lors de l'écriture de code...

Par ailleurs, ce n'est pas pour rien qu'il existe tant de manuels de
règles de programmation dans les projets industriels et ce, quel que
soit le langage utilisé.

Je ne vois pas l'interet de s'encombrer la tete avec plusieurs facons
de faire du code. On s'en prend une qui est correcte et on s'y tient.





Tout à fait d'accord

Les aficionados de PERL vont faire une attaque. :)



Ben oui mais Perl encourage-t-il une approche qualité ?
Je te laisse le soin de répondre à cette question.
Avatar
Wykaaa
Marc Boyer a écrit :
On 2009-02-02, Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...


Euh, mauvaise logique, changer de logique.



Je pense que tu as mal compris mon propos.

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.



Je n'autorise pas ce genre de chose. Simplement, quand tu énonces
une règles "genre, les variables partagées, c'est mal", et que les
étudiants voient dans leur pratique (TP) qu'en fait, ça leur
simplifie la vie (ce qui est vrai), il faut expliquer la différence
de contexte.

Un étudiant a souvent du mal à réaliser que ce qu'il prend
pour un gros projet (5000 LOC, 240h de travail) ne représente
pas grand chose au niveau industriel, et que les règles qu'on
présente sont là pour gérer des problèmes qui ne se posent
pas sur d'aussi petit projets.

Marc Boyer



C'est toute la difficulté de l'apprentissage de la programmation.

Pour la raison que tu énonces à la fin, il est nécessaire de leur
apprendre à BIEN programmer dès le début même si ça "les embête" (et le
prof avec...). C'est pour le bien de leur carrière de futur développeur !
Avatar
Michael DOUBEZ
Wykaaa wrote:
Michael DOUBEZ a écrit :
Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...



Euh, mauvaise logique, changer de logique.

Une bonne partie de l'informatique, c'est cense etre faire des choses
qui marchent de facon previsible.

99% de ce qu'on fait est debile, c'est le 1% restant qui presente
de l'interet.

Il faut s'arranger pour que les 99% soient les plus simples possibles,
de facon mecanique, ce qui veut dire prendre des automatismes corrects.
(comme presenter son code toujours de la meme facon, verifier les appels
systemes qui peuvent echouer, ne pas laisser passer de warnings a la
compilation).

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.



Un TP est un temps limité. Je comprends qu'il soit souhaitable de se
concentrer sur les objectifs du TP plutôt que de passer du temps sur
l'aspect qualité (qui est une mesure assez vague). En plus, le message
est plus clair si il n'est pas parasité par des considérations
secondes par rapport à ce qui doit être démontré.



L'aspect qualité est en aucune manière une mesure "assez vague". Il
existe des facteurs et des critères qualité définis depuis au moins 1977
(approche de Mac Call, à l'époque chez General Electric) et des
métriques qui permettent de les mesurer. des outils logiciels comme
Logiscope de Telelogic mettent en oeuvre cette démarche et j'utilise cet
outil pour les audits de code.



Je ne dit pas qu'il n'y a pas de métriques de qualités mais je doute
qu'il y en ait de fiable concernant le design d'un code. Il y a tout au
plus des analyses statiques qui donnent des indicateurs (loc, nombre
cyclomatique,...) ou encore le respect de certaines norme comme MISRA.
Et oui, la notion de qualité est floue du point de vue de l'ingénierie
logicielle: de toutes façons le client veut toujours du code robuste,
maintenable avec une durée de 1000 ans entre pannes mais dans un projet,
avec des contraintes de temps et de budget c'est la mesure la moins
précise et la plus tentante à baisser (à tort).

Je ne connais pas Logiscope de Telelogic mais en regardant rapidement
sur google, je vois qu'il s'agit d'outils de QA ce qui est loin du
propos ici.
L'objectif d'un TP est AMA de démontrer une technique ou un concept ou
autre mais pas d'avoir une acceptance d'un programme ou une garantie sur
sa robustesse.

C'est là qu'on s'aperçoit, dans
l'industrie, les ravages que peut faire une approche pédagogique qui ne
prend pas en compte les aspects qualité lors de l'écriture de code...



Il y a des cours et des TP de qualité et des cours et des TP sur
d'autres sujets. C'est à l'étudiant d'unifier ses connaissances en
environnent industriel. Pour ma part, je ne blâme pas l'enseignement
pour ça mais plutôt pour le manque de structure de mentoring quand une
entreprise accepte un junior.

Je l'ai bien vu avec d'anciens camarades de classe avec qui j'ai eu
l'occasion de travailler. 5-7 ans après certains travaillaient toujours
comme des étudiants alors que ceux qui avaient évolué le faisait de
façon industrielle.

Par ailleurs, ce n'est pas pour rien qu'il existe tant de manuels de
règles de programmation dans les projets industriels et ce, quel que
soit le langage utilisé.



Qu'il en existe autant n'est pas un signe de bonne santé.

Je ne vois pas l'interet de s'encombrer la tete avec plusieurs facons
de faire du code. On s'en prend une qui est correcte et on s'y tient.





Tout à fait d'accord



Oui, jusqu'à ce qu'on en apprenne une mieux.


Les aficionados de PERL vont faire une attaque. :)



Ben oui mais Perl encourage-t-il une approche qualité ?
Je te laisse le soin de répondre à cette question.



Je ne connais pas les processus mis en jeux pour Perl en particulier
mais je suppose que, comme dans tout langage dynamique, l'aspect QA est
doublement important puisque seule la couverture de test permet de
valider que le code est correct.

--
Michael
Avatar
pjb
Wykaaa writes:

Marc Boyer a écrit :
On 2009-02-02, Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...


Euh, mauvaise logique, changer de logique.


Je pense que tu as mal compris mon propos.

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.


Je n'autorise pas ce genre de chose. Simplement, quand tu énonces
une règles "genre, les variables partagées, c'est mal", et que les
étudiants voient dans leur pratique (TP) qu'en fait, ça leur
simplifie la vie (ce qui est vrai), il faut expliquer la différence
de contexte.
Un étudiant a souvent du mal à réaliser que ce qu'il prend
pour un gros projet (5000 LOC, 240h de travail) ne représente
pas grand chose au niveau industriel, et que les règles qu'on
présente sont là pour gérer des problèmes qui ne se posent
pas sur d'aussi petit projets.
Marc Boyer



C'est toute la difficulté de l'apprentissage de la programmation.

Pour la raison que tu énonces à la fin, il est nécessaire de leur
apprendre à BIEN programmer dès le début même si ça "les embête" (et
le prof avec...). C'est pour le bien de leur carrière de futur
développeur !



C'est idiot. C'est avec des principes comme ça qu'on arrive avec des
générations entières ne sachant ni lire ni écrire en sixième. Quand
on écrit "b, a, b, a, ba, baba", ce n'est du français correct ni
syntaxiquement, ni gramaticalement, ni sémantiquement. Et pourtant,
si on ne le fait pas, on ne saura jamais lire et écrire en français.

De même quand on fait des gammes au piano, ça n'a rien d'une oeuvre
magistrale. Et pourtant il faut le faire pour ensuite être capable de
jouer Chopin.

Alors en TP de programmation, je m'attends à ce qu'on apprenne et
qu'on fasse des exercices de programmations avec des bouts de code qui
seraient totalement déplacés dans un projet professionnel, mais qui
enseigne un point important pour devenir un programmeur professionnel
au bout de quelques années.


--
__Pascal Bourguignon__
Avatar
Wykaaa
Pascal J. Bourguignon a écrit :
Wykaaa writes:

Marc Boyer a écrit :
On 2009-02-02, Marc Espie wrote:
In article ,
Marc Boyer wrote:
Ce qui suppose de savoir comment va se dérouler
la suite de la vie de ce code, ce qui est raisonnable
si on sait qu'on va jeter le code à la fin du TP,
un peu moins si on envisage que ce code soit utilisé
pour de vrai, maintenu, ré-utilisé, adapté...


Euh, mauvaise logique, changer de logique.


Je pense que tu as mal compris mon propos.

Si tu autorises les gens a prendre des habitudes differentes "parce que
c'est juste un TP", tu les formes a faire du code qui marchera mal.


Je n'autorise pas ce genre de chose. Simplement, quand tu énonces
une règles "genre, les variables partagées, c'est mal", et que les
étudiants voient dans leur pratique (TP) qu'en fait, ça leur
simplifie la vie (ce qui est vrai), il faut expliquer la différence
de contexte.
Un étudiant a souvent du mal à réaliser que ce qu'il prend
pour un gros projet (5000 LOC, 240h de travail) ne représente
pas grand chose au niveau industriel, et que les règles qu'on
présente sont là pour gérer des problèmes qui ne se posent
pas sur d'aussi petit projets.
Marc Boyer


C'est toute la difficulté de l'apprentissage de la programmation.

Pour la raison que tu énonces à la fin, il est nécessaire de leur
apprendre à BIEN programmer dès le début même si ça "les embête" (et
le prof avec...). C'est pour le bien de leur carrière de futur
développeur !



C'est idiot. C'est avec des principes comme ça qu'on arrive avec des
générations entières ne sachant ni lire ni écrire en sixième. Quand
on écrit "b, a, b, a, ba, baba", ce n'est du français correct ni
syntaxiquement, ni gramaticalement, ni sémantiquement. Et pourtant,
si on ne le fait pas, on ne saura jamais lire et écrire en français.

De même quand on fait des gammes au piano, ça n'a rien d'une oeuvre
magistrale. Et pourtant il faut le faire pour ensuite être capable de
jouer Chopin.

Alors en TP de programmation, je m'attends à ce qu'on apprenne et
qu'on fasse des exercices de programmations avec des bouts de code qui
seraient totalement déplacés dans un projet professionnel, mais qui
enseigne un point important pour devenir un programmeur professionnel
au bout de quelques années.




Je ne suis absolument pas d'accord, mais vraiment pas du tout, avec vous
car ce que l'on constate c'est que les débutants, quand ils sont "lâchés
dans la nature", reproduisent les premiers exemples qu'ils ont eu sous
les yeux. Si ces exemples ne sont pas ce qu'on peut attendre d'un
programmeur professionnel, ce sera la catastrophe à moins que le
débutant ne se trouve dans un "environnement riche" avec un encadrement
au top (ce qui est de plus en plus rare de nos jours).
Je persiste à penser qu'il n'est pas plus dur de donner des exemples
professionnels dès le début. Un des absolus de la qualité n'est-il pas,
d'ailleurs, de "le faire bien dès la première fois".
Avatar
espie
In article ,
Pascal J. Bourguignon wrote:
C'est idiot. C'est avec des principes comme ça qu'on arrive avec des
générations entières ne sachant ni lire ni écrire en sixième. Quand
on écrit "b, a, b, a, ba, baba", ce n'est du français correct ni
syntaxiquement, ni gramaticalement, ni sémantiquement. Et pourtant,
si on ne le fait pas, on ne saura jamais lire et écrire en français.

De même quand on fait des gammes au piano, ça n'a rien d'une oeuvre
magistrale. Et pourtant il faut le faire pour ensuite être capable de
jouer Chopin.

Alors en TP de programmation, je m'attends à ce qu'on apprenne et
qu'on fasse des exercices de programmations avec des bouts de code qui
seraient totalement déplacés dans un projet professionnel, mais qui
enseigne un point important pour devenir un programmeur professionnel
au bout de quelques années.



Faut quand meme rappeler le contexte, hein. On parlait du bien-fonde
d'utiliser
using namespace std;
au top-level (et dans un fichier d'entete, de surcroit).

Le seul point que ca peut illustrer, c'est toutes les merdouilles qu'on
va se prendre avec de telles pratiques.

A proscrire absolument.


Un peu comme quand j'enseigne le C. Je ne parle que peu du preprocesseur,
et dans des contextes bien definis. Style,
#define TAILLE 1024
(necessaire en C, je le rappelle, puisque const int taille24; ne fonctionne
pas).

Je leur dis qu'il existe des choses qui s'appellent des macros, que c'est
super-dangereux, et qu'ils n'ont aucune raison de s'en servir...

... avant tres tard, parce que c'est nocif avant le polymorphisme, et en C
moderne, on a inline de toutes facons.

Bref... fin de digression.
1 2 3 4 5