On Wed, 22 Feb 2006 14:18:13 +0100, Laurent Deniau
:Non, dans basics je n'aborderais rien qui soit lie a la STL
basic porterait plutot sur [char,int,unsigned,double],
Se passer totalement de tableaux et de chaînes pendant
plusieurs chapitres, ça risque d'être dur à gérer, non ?
Après tout, ce sont des types presque aussi fréquents que
"int", et (au moins dans mon code) très largement plus
fréquents que "double".
On Wed, 22 Feb 2006 14:18:13 +0100, Laurent Deniau
<laurent.deniau@cern.ch>:
Non, dans basics je n'aborderais rien qui soit lie a la STL
basic porterait plutot sur [char,int,unsigned,double],
Se passer totalement de tableaux et de chaînes pendant
plusieurs chapitres, ça risque d'être dur à gérer, non ?
Après tout, ce sont des types presque aussi fréquents que
"int", et (au moins dans mon code) très largement plus
fréquents que "double".
On Wed, 22 Feb 2006 14:18:13 +0100, Laurent Deniau
:Non, dans basics je n'aborderais rien qui soit lie a la STL
basic porterait plutot sur [char,int,unsigned,double],
Se passer totalement de tableaux et de chaînes pendant
plusieurs chapitres, ça risque d'être dur à gérer, non ?
Après tout, ce sont des types presque aussi fréquents que
"int", et (au moins dans mon code) très largement plus
fréquents que "double".
Fabien LE LEZ wrote:On Wed, 22 Feb 2006 15:36:46 +0100, Laurent Deniau
:Si tu veux tout de meme utiliser string ou vector, tu peux
preparer un include fait-mains dans lequel tu mets des
typedefs ou des macros pour que les eleves ne voit pas
l'aspect template
Pourquoi ?
Parce qu'un simple typedef vector<int> int_vec + une
utilisation de [] sans explication est tres proche de int v[].
Le seul point eventuellement positif d'utiliser tout de suite
vector, c'est la verification de l'index, mais lorsque
l'exception apparaitra, il te faudra au moins 15min
d'explication du pourquoi du comment de ce que voit l'etudiant
a ce stade du cours.
Fabien LE LEZ wrote:
On Wed, 22 Feb 2006 15:36:46 +0100, Laurent Deniau
<laurent.deniau@cern.ch>:
Si tu veux tout de meme utiliser string ou vector, tu peux
preparer un include fait-mains dans lequel tu mets des
typedefs ou des macros pour que les eleves ne voit pas
l'aspect template
Pourquoi ?
Parce qu'un simple typedef vector<int> int_vec + une
utilisation de [] sans explication est tres proche de int v[].
Le seul point eventuellement positif d'utiliser tout de suite
vector, c'est la verification de l'index, mais lorsque
l'exception apparaitra, il te faudra au moins 15min
d'explication du pourquoi du comment de ce que voit l'etudiant
a ce stade du cours.
Fabien LE LEZ wrote:On Wed, 22 Feb 2006 15:36:46 +0100, Laurent Deniau
:Si tu veux tout de meme utiliser string ou vector, tu peux
preparer un include fait-mains dans lequel tu mets des
typedefs ou des macros pour que les eleves ne voit pas
l'aspect template
Pourquoi ?
Parce qu'un simple typedef vector<int> int_vec + une
utilisation de [] sans explication est tres proche de int v[].
Le seul point eventuellement positif d'utiliser tout de suite
vector, c'est la verification de l'index, mais lorsque
l'exception apparaitra, il te faudra au moins 15min
d'explication du pourquoi du comment de ce que voit l'etudiant
a ce stade du cours.
On Wed, 22 Feb 2006 17:19:13 +0100, Laurent Deniau
:Parce qu'un simple typedef vector<int> int_vec + une
utilisation de [] sans explication est tres proche de int
v[].
Tu peux rajouter push_back assez vite.
Et size
On Wed, 22 Feb 2006 17:19:13 +0100, Laurent Deniau
<laurent.deniau@cern.ch>:
Parce qu'un simple typedef vector<int> int_vec + une
utilisation de [] sans explication est tres proche de int
v[].
Tu peux rajouter push_back assez vite.
Et size
On Wed, 22 Feb 2006 17:19:13 +0100, Laurent Deniau
:Parce qu'un simple typedef vector<int> int_vec + une
utilisation de [] sans explication est tres proche de int
v[].
Tu peux rajouter push_back assez vite.
Et size
Laurent Deniau wrote:Fabien LE LEZ wrote:On Wed, 22 Feb 2006 12:15:03 +0100, Laurent Deniau
:basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)STL-use I (vector, iostream, iterator, algoI)
[...]
STL-use II (string, map, iostream, algoII)J'imagine que par "vector", "iostream" et "string", tu
entends "étude des détails de ces machins", car tu as abordé
les bases de l'utilisation de ces trois-là dans "basics" ?Non, dans basics je n'aborderais rien qui soit lie a la STL
Seulement que ça ne marche pas. Les élèves vont vouloir afficher
des résultats -- ils sont donc obligés à se servir au moins de
std::cout. Et je vois les tableaux aussi comme quelque chose
d'assez fondamental. Donc, std::vector.
basic porterait plutot sur [char,int,unsigned,double], un ou
deux POD (sous forme de struct), main, qque var, while (pas de
do-while ni de switch, et for je le garde pour plus tard, par
ex avec les iterateurs), qques fonctions, const mais seulement
vu comme du read-only (a-la-C), la notion d'include et de TU
(avec un peu de pp). Qqchose de tres succint mais essentiel
et indispensable pour commencer. Surtout pas commencer un
cours magistral de C ou de C vu du C++.
OK. C'est même plus basic que je ne l'aurais imaginé.
J'adapterais eventuellement la pertinence de basics au niveau
des eleves, par exemple s'ils ont deja vu le C ou Java a un
niveau avance.
Il me semble que Marc a dit qu'ils connaissent déjà le C. Ce qui
change beaucoup. Par exemple, je suis d'accord avec ta rémarque
de ne pas comparer aux autres langages. Mais s'ils connaissent
le C, on ne pourrait pas empécher qu'ils reconnaissent les
ressemblances, et qu'ils font la comparaison eux-mêmes.
Laurent Deniau wrote:
Fabien LE LEZ wrote:
On Wed, 22 Feb 2006 12:15:03 +0100, Laurent Deniau
<laurent.deniau@cern.ch>:
basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
[...]
STL-use II (string, map, iostream, algoII)
J'imagine que par "vector", "iostream" et "string", tu
entends "étude des détails de ces machins", car tu as abordé
les bases de l'utilisation de ces trois-là dans "basics" ?
Non, dans basics je n'aborderais rien qui soit lie a la STL
Seulement que ça ne marche pas. Les élèves vont vouloir afficher
des résultats -- ils sont donc obligés à se servir au moins de
std::cout. Et je vois les tableaux aussi comme quelque chose
d'assez fondamental. Donc, std::vector.
basic porterait plutot sur [char,int,unsigned,double], un ou
deux POD (sous forme de struct), main, qque var, while (pas de
do-while ni de switch, et for je le garde pour plus tard, par
ex avec les iterateurs), qques fonctions, const mais seulement
vu comme du read-only (a-la-C), la notion d'include et de TU
(avec un peu de pp). Qqchose de tres succint mais essentiel
et indispensable pour commencer. Surtout pas commencer un
cours magistral de C ou de C vu du C++.
OK. C'est même plus basic que je ne l'aurais imaginé.
J'adapterais eventuellement la pertinence de basics au niveau
des eleves, par exemple s'ils ont deja vu le C ou Java a un
niveau avance.
Il me semble que Marc a dit qu'ils connaissent déjà le C. Ce qui
change beaucoup. Par exemple, je suis d'accord avec ta rémarque
de ne pas comparer aux autres langages. Mais s'ils connaissent
le C, on ne pourrait pas empécher qu'ils reconnaissent les
ressemblances, et qu'ils font la comparaison eux-mêmes.
Laurent Deniau wrote:Fabien LE LEZ wrote:On Wed, 22 Feb 2006 12:15:03 +0100, Laurent Deniau
:basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)STL-use I (vector, iostream, iterator, algoI)
[...]
STL-use II (string, map, iostream, algoII)J'imagine que par "vector", "iostream" et "string", tu
entends "étude des détails de ces machins", car tu as abordé
les bases de l'utilisation de ces trois-là dans "basics" ?Non, dans basics je n'aborderais rien qui soit lie a la STL
Seulement que ça ne marche pas. Les élèves vont vouloir afficher
des résultats -- ils sont donc obligés à se servir au moins de
std::cout. Et je vois les tableaux aussi comme quelque chose
d'assez fondamental. Donc, std::vector.
basic porterait plutot sur [char,int,unsigned,double], un ou
deux POD (sous forme de struct), main, qque var, while (pas de
do-while ni de switch, et for je le garde pour plus tard, par
ex avec les iterateurs), qques fonctions, const mais seulement
vu comme du read-only (a-la-C), la notion d'include et de TU
(avec un peu de pp). Qqchose de tres succint mais essentiel
et indispensable pour commencer. Surtout pas commencer un
cours magistral de C ou de C vu du C++.
OK. C'est même plus basic que je ne l'aurais imaginé.
J'adapterais eventuellement la pertinence de basics au niveau
des eleves, par exemple s'ils ont deja vu le C ou Java a un
niveau avance.
Il me semble que Marc a dit qu'ils connaissent déjà le C. Ce qui
change beaucoup. Par exemple, je suis d'accord avec ta rémarque
de ne pas comparer aux autres langages. Mais s'ils connaissent
le C, on ne pourrait pas empécher qu'ils reconnaissent les
ressemblances, et qu'ils font la comparaison eux-mêmes.
Fabien LE LEZ wrote:On Wed, 22 Feb 2006 14:18:13 +0100, Laurent Deniau
:Non, dans basics je n'aborderais rien qui soit lie a la STL
basic porterait plutot sur [char,int,unsigned,double],Se passer totalement de tableaux et de chaînes pendant
plusieurs chapitres, ça risque d'être dur à gérer, non ?
Après tout, ce sont des types presque aussi fréquents que
"int", et (au moins dans mon code) très largement plus
fréquents que "double".
Est-ce que ça ne dépend pas du domaine d'application ? D'après
son adresse email, Laurent travaille au CERN, un centre de
récherche scientifique où, j'imagine, les double servent
énormement. Tandis que les chaînes de caractères, c'est surtout
les étiquettes d'affichage, donc, des chaînes littérales. Si tes
applications gèrent du texte, les rapports risquent d'être bien
différents.
Fabien LE LEZ wrote:
On Wed, 22 Feb 2006 14:18:13 +0100, Laurent Deniau
<laurent.deniau@cern.ch>:
Non, dans basics je n'aborderais rien qui soit lie a la STL
basic porterait plutot sur [char,int,unsigned,double],
Se passer totalement de tableaux et de chaînes pendant
plusieurs chapitres, ça risque d'être dur à gérer, non ?
Après tout, ce sont des types presque aussi fréquents que
"int", et (au moins dans mon code) très largement plus
fréquents que "double".
Est-ce que ça ne dépend pas du domaine d'application ? D'après
son adresse email, Laurent travaille au CERN, un centre de
récherche scientifique où, j'imagine, les double servent
énormement. Tandis que les chaînes de caractères, c'est surtout
les étiquettes d'affichage, donc, des chaînes littérales. Si tes
applications gèrent du texte, les rapports risquent d'être bien
différents.
Fabien LE LEZ wrote:On Wed, 22 Feb 2006 14:18:13 +0100, Laurent Deniau
:Non, dans basics je n'aborderais rien qui soit lie a la STL
basic porterait plutot sur [char,int,unsigned,double],Se passer totalement de tableaux et de chaînes pendant
plusieurs chapitres, ça risque d'être dur à gérer, non ?
Après tout, ce sont des types presque aussi fréquents que
"int", et (au moins dans mon code) très largement plus
fréquents que "double".
Est-ce que ça ne dépend pas du domaine d'application ? D'après
son adresse email, Laurent travaille au CERN, un centre de
récherche scientifique où, j'imagine, les double servent
énormement. Tandis que les chaînes de caractères, c'est surtout
les étiquettes d'affichage, donc, des chaînes littérales. Si tes
applications gèrent du texte, les rapports risquent d'être bien
différents.
Marc Boyer wrote:Bonjour à tous,
risquant d'avoir à faire un cours de C++, je réflechissais
un peu à la présentation générale, à la hiérarchisation des
connaissances en C++.
Je vois actuellement 3 strates dans C++:
D'un point de vue general, je ne parlerais pas des autres langages (C
inclu) parce que ca n'apporte rien et ca ne peux que produire des
confusions, ou des racourcis abusifs dans la tete de certains etudiants.
Je suis d'accord, c'était pour situer le débat ici, en faisant
référence à une culture commune.Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Du coup ta structure n'est plus appropriee ;-)
Je crois que je suivrais plutot qqchose du genre (a vue de nez):
Je fais un découpage.basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
string quand même, non ?
scope & namespace & lifetime
C'est ce que je voyais en 'strate I', ie C++ comme langage
impératif procédural moderne.
class I (0 base, encapI)
ctor, dtor I
inheritance I (single)
class II (1 base, encapII)
exception
template II (class)
traits
meta-programming I (factorielle)
STL-use II (string, map, iostream, algoII)
polymorphism I (virtual)
ctor, dtor II (virtual)
inheritance II (multi, virtual)
polymorphism II (multi, virtual)
C'est globalement le II que j'imaginais (avec les templates
en plus, mais vous avez levé certaines de mes réticences).
STL-use III (alloc)
polymorphism III (covariance, contravariance, vtable)
overloading III (resolution)
template III (resolution)
meta-programming II (intro)
STL-use IV (valarray)
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
Une chose qui me manque dans les cours de C++ que j'ai vu,
c'est qu'on présente des mécanismes relativement indépendants,
sans dire comment s'en servir.
Marc Boyer wrote:
Bonjour à tous,
risquant d'avoir à faire un cours de C++, je réflechissais
un peu à la présentation générale, à la hiérarchisation des
connaissances en C++.
Je vois actuellement 3 strates dans C++:
D'un point de vue general, je ne parlerais pas des autres langages (C
inclu) parce que ca n'apporte rien et ca ne peux que produire des
confusions, ou des racourcis abusifs dans la tete de certains etudiants.
Je suis d'accord, c'était pour situer le débat ici, en faisant
référence à une culture commune.
Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Du coup ta structure n'est plus appropriee ;-)
Je crois que je suivrais plutot qqchose du genre (a vue de nez):
Je fais un découpage.
basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
string quand même, non ?
scope & namespace & lifetime
C'est ce que je voyais en 'strate I', ie C++ comme langage
impératif procédural moderne.
class I (0 base, encapI)
ctor, dtor I
inheritance I (single)
class II (1 base, encapII)
exception
template II (class)
traits
meta-programming I (factorielle)
STL-use II (string, map, iostream, algoII)
polymorphism I (virtual)
ctor, dtor II (virtual)
inheritance II (multi, virtual)
polymorphism II (multi, virtual)
C'est globalement le II que j'imaginais (avec les templates
en plus, mais vous avez levé certaines de mes réticences).
STL-use III (alloc)
polymorphism III (covariance, contravariance, vtable)
overloading III (resolution)
template III (resolution)
meta-programming II (intro)
STL-use IV (valarray)
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
Une chose qui me manque dans les cours de C++ que j'ai vu,
c'est qu'on présente des mécanismes relativement indépendants,
sans dire comment s'en servir.
Marc Boyer wrote:Bonjour à tous,
risquant d'avoir à faire un cours de C++, je réflechissais
un peu à la présentation générale, à la hiérarchisation des
connaissances en C++.
Je vois actuellement 3 strates dans C++:
D'un point de vue general, je ne parlerais pas des autres langages (C
inclu) parce que ca n'apporte rien et ca ne peux que produire des
confusions, ou des racourcis abusifs dans la tete de certains etudiants.
Je suis d'accord, c'était pour situer le débat ici, en faisant
référence à une culture commune.Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Du coup ta structure n'est plus appropriee ;-)
Je crois que je suivrais plutot qqchose du genre (a vue de nez):
Je fais un découpage.basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
string quand même, non ?
scope & namespace & lifetime
C'est ce que je voyais en 'strate I', ie C++ comme langage
impératif procédural moderne.
class I (0 base, encapI)
ctor, dtor I
inheritance I (single)
class II (1 base, encapII)
exception
template II (class)
traits
meta-programming I (factorielle)
STL-use II (string, map, iostream, algoII)
polymorphism I (virtual)
ctor, dtor II (virtual)
inheritance II (multi, virtual)
polymorphism II (multi, virtual)
C'est globalement le II que j'imaginais (avec les templates
en plus, mais vous avez levé certaines de mes réticences).
STL-use III (alloc)
polymorphism III (covariance, contravariance, vtable)
overloading III (resolution)
template III (resolution)
meta-programming II (intro)
STL-use IV (valarray)
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
Une chose qui me manque dans les cours de C++ que j'ai vu,
c'est qu'on présente des mécanismes relativement indépendants,
sans dire comment s'en servir.
Marc Boyer wrote:
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
La je me rabattrais sur la litterature et les Design Patterns
pour le pourquoi de l'utilite: heritage d'implementation,
singleton, atom, visitor...
Marc Boyer wrote:
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
La je me rabattrais sur la litterature et les Design Patterns
pour le pourquoi de l'utilite: heritage d'implementation,
singleton, atom, visitor...
Marc Boyer wrote:
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
La je me rabattrais sur la litterature et les Design Patterns
pour le pourquoi de l'utilite: heritage d'implementation,
singleton, atom, visitor...
Marc Boyer wrote:Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Tu peux t'inspirer de ce qui existe.
Sinon en 93 ou 94 pour des
genie-electrique, j'avais fait un tetris. C'est presque l'ideal, simple,
connu, ludique, OO par nature, et pas plus de 150-300 lignes. Mais a
l'epoque c'etait du turbo C++ 1.0 sous DOS et j'attaquais la memoire
video joyeusement ;-) Aujourd'hui il te faudra passer par ncurse mais
normalement, qques fonctions "opaque" devrait faire l'affaire sans
encombrer l'esprit des etudiants.
basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
string quand même, non ?
eventuellement, surtout comme le dit James tu veux passer au TP dans la
foulee.scope & namespace & lifetime
C'est ce que je voyais en 'strate I', ie C++ comme langage
impératif procédural moderne.
Absolument.
class I (0 base, encapI)
ctor, dtor I
inheritance I (single)
class II (1 base, encapII)
exception
template II (class)
traits
meta-programming I (factorielle)
STL-use II (string, map, iostream, algoII)
polymorphism I (virtual)
ctor, dtor II (virtual)
inheritance II (multi, virtual)
polymorphism II (multi, virtual)
C'est globalement le II que j'imaginais (avec les templates
en plus, mais vous avez levé certaines de mes réticences).
J'ai constater que les eleves (voir mes collegues) comprennent plus vite
les templates que le polymorphisme d'heritage, que j'ai mis expres vers
la fin du plan pour attendre au maximum que les autres concepts soient
bien digeres. En fait on pourrait penser le contaire parce que
techinquement les templates sont plus compliques que le polymorphisme
d'heritage, mais ils semblent que les concepts eux-memes soient mieux
digerer dans l'autre sens.
STL-use III (alloc)
polymorphism III (covariance, contravariance, vtable)
overloading III (resolution)
template III (resolution)
meta-programming II (intro)
STL-use IV (valarray)
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
La je me rabattrais sur la litterature et les Design Patterns pour le
pourquoi de l'utilite: heritage d'implementation, singleton, atom,
visitor...
Une chose qui me manque dans les cours de C++ que j'ai vu,
c'est qu'on présente des mécanismes relativement indépendants,
sans dire comment s'en servir.
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Marc Boyer wrote:
Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Tu peux t'inspirer de ce qui existe.
Sinon en 93 ou 94 pour des
genie-electrique, j'avais fait un tetris. C'est presque l'ideal, simple,
connu, ludique, OO par nature, et pas plus de 150-300 lignes. Mais a
l'epoque c'etait du turbo C++ 1.0 sous DOS et j'attaquais la memoire
video joyeusement ;-) Aujourd'hui il te faudra passer par ncurse mais
normalement, qques fonctions "opaque" devrait faire l'affaire sans
encombrer l'esprit des etudiants.
basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
string quand même, non ?
eventuellement, surtout comme le dit James tu veux passer au TP dans la
foulee.
scope & namespace & lifetime
C'est ce que je voyais en 'strate I', ie C++ comme langage
impératif procédural moderne.
Absolument.
class I (0 base, encapI)
ctor, dtor I
inheritance I (single)
class II (1 base, encapII)
exception
template II (class)
traits
meta-programming I (factorielle)
STL-use II (string, map, iostream, algoII)
polymorphism I (virtual)
ctor, dtor II (virtual)
inheritance II (multi, virtual)
polymorphism II (multi, virtual)
C'est globalement le II que j'imaginais (avec les templates
en plus, mais vous avez levé certaines de mes réticences).
J'ai constater que les eleves (voir mes collegues) comprennent plus vite
les templates que le polymorphisme d'heritage, que j'ai mis expres vers
la fin du plan pour attendre au maximum que les autres concepts soient
bien digeres. En fait on pourrait penser le contaire parce que
techinquement les templates sont plus compliques que le polymorphisme
d'heritage, mais ils semblent que les concepts eux-memes soient mieux
digerer dans l'autre sens.
STL-use III (alloc)
polymorphism III (covariance, contravariance, vtable)
overloading III (resolution)
template III (resolution)
meta-programming II (intro)
STL-use IV (valarray)
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
La je me rabattrais sur la litterature et les Design Patterns pour le
pourquoi de l'utilite: heritage d'implementation, singleton, atom,
visitor...
Une chose qui me manque dans les cours de C++ que j'ai vu,
c'est qu'on présente des mécanismes relativement indépendants,
sans dire comment s'en servir.
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Marc Boyer wrote:Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Tu peux t'inspirer de ce qui existe.
Sinon en 93 ou 94 pour des
genie-electrique, j'avais fait un tetris. C'est presque l'ideal, simple,
connu, ludique, OO par nature, et pas plus de 150-300 lignes. Mais a
l'epoque c'etait du turbo C++ 1.0 sous DOS et j'attaquais la memoire
video joyeusement ;-) Aujourd'hui il te faudra passer par ncurse mais
normalement, qques fonctions "opaque" devrait faire l'affaire sans
encombrer l'esprit des etudiants.
basics (type, var, func, loop, TU)
overloading I (func)
template I (func)
overloading II (op)
STL-use I (vector, iostream, iterator, algoI)
string quand même, non ?
eventuellement, surtout comme le dit James tu veux passer au TP dans la
foulee.scope & namespace & lifetime
C'est ce que je voyais en 'strate I', ie C++ comme langage
impératif procédural moderne.
Absolument.
class I (0 base, encapI)
ctor, dtor I
inheritance I (single)
class II (1 base, encapII)
exception
template II (class)
traits
meta-programming I (factorielle)
STL-use II (string, map, iostream, algoII)
polymorphism I (virtual)
ctor, dtor II (virtual)
inheritance II (multi, virtual)
polymorphism II (multi, virtual)
C'est globalement le II que j'imaginais (avec les templates
en plus, mais vous avez levé certaines de mes réticences).
J'ai constater que les eleves (voir mes collegues) comprennent plus vite
les templates que le polymorphisme d'heritage, que j'ai mis expres vers
la fin du plan pour attendre au maximum que les autres concepts soient
bien digeres. En fait on pourrait penser le contaire parce que
techinquement les templates sont plus compliques que le polymorphisme
d'heritage, mais ils semblent que les concepts eux-memes soient mieux
digerer dans l'autre sens.
STL-use III (alloc)
polymorphism III (covariance, contravariance, vtable)
overloading III (resolution)
template III (resolution)
meta-programming II (intro)
STL-use IV (valarray)
Il manque un mode d'emplois sur certains mécanismes.
Présenter la différence methode publique/privée, c'est facile.
Dire qu'on peut faire un opérateur de copie privé, c'est
une phrase à dire. Mais quand l'utiliser...
La je me rabattrais sur la litterature et les Design Patterns pour le
pourquoi de l'utilite: heritage d'implementation, singleton, atom,
visitor...
Une chose qui me manque dans les cours de C++ que j'ai vu,
c'est qu'on présente des mécanismes relativement indépendants,
sans dire comment s'en servir.
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Marc Boyer wrote:Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Tu peux t'inspirer de ce qui existe.
J'ai de vagues souvenirs de terminale (ou prépa ?). Tout circuit
ayant une capacité et une résistance équivalente... Faut voir.
J'ai réalise cette année en effet que dans la POO, on se jettais
souvent directement dans les bras du polymorphisme d'héritage sans
insister sur encapsullation et ctor/dtor.
Vous me convainquez (?) de présenter plus tôt les templates.
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Oui, mais aussi mettre en garde contre les difficultés.
Marc Boyer wrote:
Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Tu peux t'inspirer de ce qui existe.
J'ai de vagues souvenirs de terminale (ou prépa ?). Tout circuit
ayant une capacité et une résistance équivalente... Faut voir.
J'ai réalise cette année en effet que dans la POO, on se jettais
souvent directement dans les bras du polymorphisme d'héritage sans
insister sur encapsullation et ctor/dtor.
Vous me convainquez (?) de présenter plus tôt les templates.
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Oui, mais aussi mettre en garde contre les difficultés.
Marc Boyer wrote:Et dans la
meme lignee, je commencerais par 10min sur un exemple poilu de
resolution de probleme en C++ sur un sujet de leur domaine, histoire de
calmer ceux qui connaissent deja (croient connaitre) C++ et d'eveiller
la curiosite des autres en abordant un sujet qui les interesse. Tu
pourras aussi revenir dessus une fois les notions necessaires acquises
ce qui leur montrera leur evolution.
Va falloir que j'apprenne l'électronique. Heuh, dans l'idéal,
se serait bien. Mais je sais pas si je vais avoir le temps.
Tu peux t'inspirer de ce qui existe.
J'ai de vagues souvenirs de terminale (ou prépa ?). Tout circuit
ayant une capacité et une résistance équivalente... Faut voir.
J'ai réalise cette année en effet que dans la POO, on se jettais
souvent directement dans les bras du polymorphisme d'héritage sans
insister sur encapsullation et ctor/dtor.
Vous me convainquez (?) de présenter plus tôt les templates.
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Oui, mais aussi mettre en garde contre les difficultés.
Marc Boyer wrote:Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Oui, mais aussi mettre en garde contre les difficultés.
Normalement, si les concepts sont bien assimiles, les difficultes se
transforment en contraintes qui a leur tour se transforment en regles ou
en pattern.
Marc Boyer wrote:
Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Oui, mais aussi mettre en garde contre les difficultés.
Normalement, si les concepts sont bien assimiles, les difficultes se
transforment en contraintes qui a leur tour se transforment en regles ou
en pattern.
Marc Boyer wrote:Parce que c'est ce qu'il y a de plus difficile. On voit souvent du tout
template ou du tout virtual. Mixer les deux demande plus d'experience en
design.
Oui, mais aussi mettre en garde contre les difficultés.
Normalement, si les concepts sont bien assimiles, les difficultes se
transforment en contraintes qui a leur tour se transforment en regles ou
en pattern.