-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Lucas Levrel
Le 6 mars 2015, Jean-Marc Bourguet a écrit :
Les cas où c'est sensé sont l'exception plutôt que la règle. En général, l'héritage public concerne les classes entité (pas copiable, présence de fonctions virtuelles) et pas les classes valeur (copiable, absence de fonctions virtuelles). vector est clairement dans la seconde catégorie.
Peux-tu donner un exemple de classe entité ?
La question de fond est de savoir quelles sont les invariants que la classe peut bien avoir qu'il n'est pas possible de mettre à mal en la manipulant comme un vecteur?
Pas compris. Peux-tu détailler ?
(complèter une API perçue comme incomplète en ignorant le risque de faire une classe n'a pas une responsabilité claire est la raison la plus valable).
Syntax error :-)
-- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Le 6 mars 2015, Jean-Marc Bourguet a écrit :
Les cas où c'est sensé sont l'exception plutôt que la règle. En
général, l'héritage public concerne les classes entité (pas copiable,
présence de fonctions virtuelles) et pas les classes valeur (copiable,
absence de fonctions virtuelles). vector est clairement dans la seconde
catégorie.
Peux-tu donner un exemple de classe entité ?
La question de fond est de savoir quelles sont les
invariants que la classe peut bien avoir qu'il n'est pas possible de
mettre à mal en la manipulant comme un vecteur?
Pas compris. Peux-tu détailler ?
(complèter une API perçue comme incomplète en ignorant le risque de
faire une classe n'a pas une responsabilité claire est la raison la plus
valable).
Les cas où c'est sensé sont l'exception plutôt que la règle. En général, l'héritage public concerne les classes entité (pas copiable, présence de fonctions virtuelles) et pas les classes valeur (copiable, absence de fonctions virtuelles). vector est clairement dans la seconde catégorie.
Peux-tu donner un exemple de classe entité ?
La question de fond est de savoir quelles sont les invariants que la classe peut bien avoir qu'il n'est pas possible de mettre à mal en la manipulant comme un vecteur?
Pas compris. Peux-tu détailler ?
(complèter une API perçue comme incomplète en ignorant le risque de faire une classe n'a pas une responsabilité claire est la raison la plus valable).
Syntax error :-)
-- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Lucas Levrel
Le 6 mars 2015, Dominique MICOLLET a écrit :
Par ailleurs, je "potasse" en ce moment : http://www.icce.rug.nl/documents/cplusplus/ C'est un cours dont le début est très prometteur.
Merci pour cette référence.
-- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Le 6 mars 2015, Dominique MICOLLET a écrit :
Par ailleurs, je "potasse" en ce moment :
http://www.icce.rug.nl/documents/cplusplus/
C'est un cours dont le début est très prometteur.
La question de fond est de savoir quelles sont les invariants que la classe peut bien avoir qu'il n'est pas possible de mettre à mal en la manipulant comme un vecteur?
Si tu fais une classe vecteur_trie qui herite publiquement de vector et qui essaie de faire en sorte de garder le vecteur trie, le fait que tu peux acceder a la classe de base va te permettre de casser l'invariant (le fait que le vecteur est trie)
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
La question de fond est de savoir quelles sont les invariants que la
classe peut bien avoir qu'il n'est pas possible de mettre à mal en la
manipulant comme un vecteur?
Si tu fais une classe vecteur_trie qui herite publiquement de vector et
qui essaie de faire en sorte de garder le vecteur trie, le fait que tu
peux acceder a la classe de base va te permettre de casser l'invariant
(le fait que le vecteur est trie)
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
La question de fond est de savoir quelles sont les invariants que la classe peut bien avoir qu'il n'est pas possible de mettre à mal en la manipulant comme un vecteur?
Si tu fais une classe vecteur_trie qui herite publiquement de vector et qui essaie de faire en sorte de garder le vecteur trie, le fait que tu peux acceder a la classe de base va te permettre de casser l'invariant (le fait que le vecteur est trie)
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
espie
En complement, et de facon bien moins technique: l'heritage public est LA relation la plus forte qui peut exister entre deux classes. Il faut se poser la question: si la classe de base change, est-ce qu'on veut heriter de tout le nouveau comportement ? Si ce n'est pas le cas, c'est que l'heritage public est une mauvaise idee, et qu'il faudrait utiliser un autre schema (composition ou delegation le plus souvent).
Je sais que ca peut paraitre bizarre, pour vector, qui est dans la norme et qui donc "change" peu (meme si il y a plein de trucs cools en C++2011) mais c'est la vraie question a se poser...
A la base, l'objet c'est surtout cense permettre d'isoler l'utilisateur final de changements intempestifs dans l'implementation. Et l'heritage public "garantit" que l'utilisateur final va se palucher les changements ET dans la classe derivee, ET dans la classe de base... c'est en meme temps tres puissant et tres intrusif.
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
En complement, et de facon bien moins technique: l'heritage public est LA
relation la plus forte qui peut exister entre deux classes. Il faut se
poser la question: si la classe de base change, est-ce qu'on veut heriter
de tout le nouveau comportement ? Si ce n'est pas le cas, c'est que
l'heritage public est une mauvaise idee, et qu'il faudrait utiliser un
autre schema (composition ou delegation le plus souvent).
Je sais que ca peut paraitre bizarre, pour vector, qui est dans la norme
et qui donc "change" peu (meme si il y a plein de trucs cools en C++2011)
mais c'est la vraie question a se poser...
A la base, l'objet c'est surtout cense permettre d'isoler l'utilisateur
final de changements intempestifs dans l'implementation. Et l'heritage
public "garantit" que l'utilisateur final va se palucher les changements
ET dans la classe derivee, ET dans la classe de base... c'est en meme temps
tres puissant et tres intrusif.
Perso, je n'herite plus guere que d'interfaces au sens java, des classes
qui ne contiennent que le comportement que je veux, et rien cote
implementation...
En complement, et de facon bien moins technique: l'heritage public est LA relation la plus forte qui peut exister entre deux classes. Il faut se poser la question: si la classe de base change, est-ce qu'on veut heriter de tout le nouveau comportement ? Si ce n'est pas le cas, c'est que l'heritage public est une mauvaise idee, et qu'il faudrait utiliser un autre schema (composition ou delegation le plus souvent).
Je sais que ca peut paraitre bizarre, pour vector, qui est dans la norme et qui donc "change" peu (meme si il y a plein de trucs cools en C++2011) mais c'est la vraie question a se poser...
A la base, l'objet c'est surtout cense permettre d'isoler l'utilisateur final de changements intempestifs dans l'implementation. Et l'heritage public "garantit" que l'utilisateur final va se palucher les changements ET dans la classe derivee, ET dans la classe de base... c'est en meme temps tres puissant et tres intrusif.
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
Jean-Marc Bourguet
(Marc Espie) writes:
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
espie@lain.home (Marc Espie) writes:
Perso, je n'herite plus guere que d'interfaces au sens java, des classes
qui ne contiennent que le comportement que je veux, et rien cote
implementation...
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index. html Site de usenet-fr: http://www.usenet-fr.news.eu.org
espie
In article , Jean-Marc Bourguet wrote:
(Marc Espie) writes:
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
Je trouve que Qt s'en sort pas trop mal, ils ont un design qu'est quand meme un poil date ces jours-ci, mais qui marche encore relativement bien avec du C++14...
In article <pxbegp29ex7.fsf@bourguet.org>,
Jean-Marc Bourguet <jm@bourguet.org> wrote:
espie@lain.home (Marc Espie) writes:
Perso, je n'herite plus guere que d'interfaces au sens java, des classes
qui ne contiennent que le comportement que je veux, et rien cote
implementation...
Je trouve que Qt s'en sort pas trop mal, ils ont un design qu'est quand meme
un poil date ces jours-ci, mais qui marche encore relativement bien avec
du C++14...
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
Je trouve que Qt s'en sort pas trop mal, ils ont un design qu'est quand meme un poil date ces jours-ci, mais qui marche encore relativement bien avec du C++14...
Jean-Marc Bourguet
(Marc Espie) writes:
In article , Jean-Marc Bourguet wrote:
(Marc Espie) writes:
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
Ça peut être difficile si on n'a pas écrit toutes les libs qu'ont utilise. (Je pense à Qt p.e.)
Ouaip. Bien sur sur mon propre design.
Je trouve que Qt s'en sort pas trop mal, ils ont un design qu'est quand meme un poil date ces jours-ci, mais qui marche encore relativement bien avec du C++14...
C'est daté, mais pas insupportable. Le pire, c'est moc et l'idée d'une classe dont (presque) tout hérite, et le fait qu'ils ont une approche framework plutôt que lib et donc une certaine tendance à tout lier.
A+
-- Jean-Marc FAQ de fclc++: http://web.archive.org/web/*/http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
espie@lain.home (Marc Espie) writes:
In article <pxbegp29ex7.fsf@bourguet.org>,
Jean-Marc Bourguet <jm@bourguet.org> wrote:
espie@lain.home (Marc Espie) writes:
Perso, je n'herite plus guere que d'interfaces au sens java, des classes
qui ne contiennent que le comportement que je veux, et rien cote
implementation...
Ça peut être difficile si on n'a pas écrit toutes les libs qu'ont
utilise. (Je pense à Qt p.e.)
Ouaip. Bien sur sur mon propre design.
Je trouve que Qt s'en sort pas trop mal, ils ont un design qu'est quand meme
un poil date ces jours-ci, mais qui marche encore relativement bien avec
du C++14...
C'est daté, mais pas insupportable. Le pire, c'est moc et l'idée d'une
classe dont (presque) tout hérite, et le fait qu'ils ont une approche
framework plutôt que lib et donc une certaine tendance à tout lier.
A+
--
Jean-Marc
FAQ de fclc++: http://web.archive.org/web/*/http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Perso, je n'herite plus guere que d'interfaces au sens java, des classes qui ne contiennent que le comportement que je veux, et rien cote implementation...
Ça peut être difficile si on n'a pas écrit toutes les libs qu'ont utilise. (Je pense à Qt p.e.)
Ouaip. Bien sur sur mon propre design.
Je trouve que Qt s'en sort pas trop mal, ils ont un design qu'est quand meme un poil date ces jours-ci, mais qui marche encore relativement bien avec du C++14...
C'est daté, mais pas insupportable. Le pire, c'est moc et l'idée d'une classe dont (presque) tout hérite, et le fait qu'ils ont une approche framework plutôt que lib et donc une certaine tendance à tout lier.
A+
-- Jean-Marc FAQ de fclc++: http://web.archive.org/web/*/http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Lucas Levrel
Le 6 mars 2015, Jean-Marc Bourguet a écrit :
Completer l'API obscurcit souvent la responsabilite n'est pas claire l'elargit
Trois verbes à la suite, j'ai un problème d'analyse syntaxique de cette phrase :-)
(exemple de chose à ne pas faire, les classes string de la SL [...] font beaucoup trop de choses qui a mon avis ne relevent pas de la responsabilite d'une classe mais devraient etre faites par des fonctions libres).
Est-ce que tu fais allusion aux fonctions copy, find, compare, substr de la STL ?
-- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Le 6 mars 2015, Jean-Marc Bourguet a écrit :
Completer l'API obscurcit souvent la responsabilite n'est pas
claire l'elargit
Trois verbes à la suite, j'ai un problème d'analyse syntaxique de cette
phrase :-)
(exemple de chose à ne pas faire, les classes string de la SL [...] font
beaucoup trop de choses qui a mon avis ne relevent pas de la
responsabilite d'une classe mais devraient etre faites par des fonctions
libres).
Est-ce que tu fais allusion aux fonctions copy, find, compare, substr de
la STL ?
Completer l'API obscurcit souvent la responsabilite n'est pas claire l'elargit
Trois verbes à la suite, j'ai un problème d'analyse syntaxique de cette phrase :-)
(exemple de chose à ne pas faire, les classes string de la SL [...] font beaucoup trop de choses qui a mon avis ne relevent pas de la responsabilite d'une classe mais devraient etre faites par des fonctions libres).
Est-ce que tu fais allusion aux fonctions copy, find, compare, substr de la STL ?