Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template
Merde, un pb de vocabulaire français. En fait, je me plie au vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut rédéfinir que les fonctions virtuelles.
Bon, si vous avez deux minutes, rappelez moi comment on nomme ces 3 cas en anglais et français.
class A { void f(int i); void f(float f); // en: overloading | fr: surcharge virtual void g(int i); }
class A : public B { void f(float f); // en: ?? | fr: redefinition ? void g(int i); // en: ?? | fr: redefinition ? }
override. En fr je crois que Gaby a dit une fois que supplanter avait ete choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi surdefinir, substituer.
OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual overriding' pour montrer la nuance entre les deux, ou 'dynamic' overriding'.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
Le 18-01-2007, Jean-Marc Bourguet <jm@bourguet.org> a écrit :
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Le 18-01-2007, Laurent Deniau <laurent.deniau@cern.ch> a écrit :
Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template
Merde, un pb de vocabulaire français. En fait, je me plie au
vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut
rédéfinir que les fonctions virtuelles.
Bon, si vous avez deux minutes, rappelez moi comment on nomme
ces 3 cas en anglais et français.
class A {
void f(int i);
void f(float f); // en: overloading | fr: surcharge
virtual void g(int i);
}
class A : public B {
void f(float f); // en: ?? | fr: redefinition ?
void g(int i); // en: ?? | fr: redefinition ?
}
override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi
surdefinir, substituer.
OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual
overriding' pour montrer la nuance entre les deux, ou 'dynamic'
overriding'.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template
Merde, un pb de vocabulaire français. En fait, je me plie au vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut rédéfinir que les fonctions virtuelles.
Bon, si vous avez deux minutes, rappelez moi comment on nomme ces 3 cas en anglais et français.
class A { void f(int i); void f(float f); // en: overloading | fr: surcharge virtual void g(int i); }
class A : public B { void f(float f); // en: ?? | fr: redefinition ? void g(int i); // en: ?? | fr: redefinition ? }
override. En fr je crois que Gaby a dit une fois que supplanter avait ete choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi surdefinir, substituer.
OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual overriding' pour montrer la nuance entre les deux, ou 'dynamic' overriding'.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
Je lierai le subtyping avec le polymorphisme d'inclusion plutot qu'avec l'overloading.
Du point de vue des types (et des classes) je suis d'accord. Mais du point de vue pratique, ce n'est pas le subtyping qui nous interesse, mais la resolution statique des surchages (les fonctions membres etant un cas particulier), c'est a dire les regles de resolution ennoncees dans l'overloading (13.3). Parce que sans ca, rien n'est possible.
En ce qui concerne les templates, je pense que c'est un concept orthogonal a l'overloading qui ajoute une deuxieme dimension au systeme de type permettant de "configurer" la resolution de l'overloading (14.8.2) avec les specialisations pour obtenir des comportements specifiques.
Le tout donne un systeme effectivement tres flexible a la compilation (13.3 + 14.8.3) mais qui ne fait pas bon menage avec le dynamic binding (virtual). S'il faisait bon menage, les multimethodes seraient a portee de mains car ce n'est rien d'autre que de la surcharge dynamique et C++ deviendrait du meme coup le plus flexible des languages (enfin presque, parce que pour etre utilisable il lui faudrait la possibilite de preciser dans les specialisations si un argument est covariant ou contravariant comme en Scala).
Ceci dit, il faut deja un bon niveau d'expertise en C++ (et bien connaitre son compilateur) pour melanger les trois concepts massivement (comprendre != cas d'ecole).
Je lierai le subtyping avec le polymorphisme d'inclusion plutot qu'avec
l'overloading.
Du point de vue des types (et des classes) je suis d'accord. Mais du
point de vue pratique, ce n'est pas le subtyping qui nous interesse,
mais la resolution statique des surchages (les fonctions membres etant
un cas particulier), c'est a dire les regles de resolution ennoncees
dans l'overloading (13.3). Parce que sans ca, rien n'est possible.
En ce qui concerne les templates, je pense que c'est un concept
orthogonal a l'overloading qui ajoute une deuxieme dimension au systeme
de type permettant de "configurer" la resolution de l'overloading
(14.8.2) avec les specialisations pour obtenir des comportements
specifiques.
Le tout donne un systeme effectivement tres flexible a la compilation
(13.3 + 14.8.3) mais qui ne fait pas bon menage avec le dynamic binding
(virtual). S'il faisait bon menage, les multimethodes seraient a portee
de mains car ce n'est rien d'autre que de la surcharge dynamique et C++
deviendrait du meme coup le plus flexible des languages (enfin presque,
parce que pour etre utilisable il lui faudrait la possibilite de
preciser dans les specialisations si un argument est covariant ou
contravariant comme en Scala).
Ceci dit, il faut deja un bon niveau d'expertise en C++ (et bien
connaitre son compilateur) pour melanger les trois concepts massivement
(comprendre != cas d'ecole).
Je lierai le subtyping avec le polymorphisme d'inclusion plutot qu'avec l'overloading.
Du point de vue des types (et des classes) je suis d'accord. Mais du point de vue pratique, ce n'est pas le subtyping qui nous interesse, mais la resolution statique des surchages (les fonctions membres etant un cas particulier), c'est a dire les regles de resolution ennoncees dans l'overloading (13.3). Parce que sans ca, rien n'est possible.
En ce qui concerne les templates, je pense que c'est un concept orthogonal a l'overloading qui ajoute une deuxieme dimension au systeme de type permettant de "configurer" la resolution de l'overloading (14.8.2) avec les specialisations pour obtenir des comportements specifiques.
Le tout donne un systeme effectivement tres flexible a la compilation (13.3 + 14.8.3) mais qui ne fait pas bon menage avec le dynamic binding (virtual). S'il faisait bon menage, les multimethodes seraient a portee de mains car ce n'est rien d'autre que de la surcharge dynamique et C++ deviendrait du meme coup le plus flexible des languages (enfin presque, parce que pour etre utilisable il lui faudrait la possibilite de preciser dans les specialisations si un argument est covariant ou contravariant comme en Scala).
Ceci dit, il faut deja un bon niveau d'expertise en C++ (et bien connaitre son compilateur) pour melanger les trois concepts massivement (comprendre != cas d'ecole).
a+, ld.
Serge Paccalin
Le 18.01.2007 13:44, Jean-Marc Bourguet a ecrit:
override. En fr je crois que Gaby a dit une fois que supplanter avait ete choisi (mais pose le probleme qu'il n'y a pas de nom).
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Pour bien répondre avec Google, ne pas cliquer -'(__) « Répondre », mais « Afficher les options », _/___(_) puis cliquer « Répondre » (parmi les options).
Le 18.01.2007 13:44, Jean-Marc Bourguet a ecrit:
override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom).
--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Pour bien répondre avec Google, ne pas cliquer
-'(__) « Répondre », mais « Afficher les options »,
_/___(_) puis cliquer « Répondre » (parmi les options).
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Pour bien répondre avec Google, ne pas cliquer -'(__) « Répondre », mais « Afficher les options », _/___(_) puis cliquer « Répondre » (parmi les options).
Laurent Deniau
Marc Boyer wrote:
Marc Boyer writes:
Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template plutot l'overloading non ?
virtual -> redefinition dynamique (dynamic binding) overloading -> redifinition statique (subtyping) Merde, un pb de vocabulaire français. En fait, je me plie au
vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut rédéfinir que les fonctions virtuelles.
Bon, si vous avez deux minutes, rappelez moi comment on nomme ces 3 cas en anglais et français.
class A { void f(int i); void f(float f); // en: overloading | fr: surcharge virtual void g(int i); }
class A : public B { void f(float f); // en: ?? | fr: redefinition ? void g(int i); // en: ?? | fr: redefinition ? } override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi surdefinir, substituer.
OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual
perso, je comprends:
[type -> terme -> traduction (support)] static -> overloading -> surcharge (decoration de nom) dynamic (virtual) -> overriding -> redefinition (table de pointeur) parametric (template) -> specialisation -> idem (generation de code)
Pour les subtilites de salon, ce sera seulement autour d'une tasse de the ;-)
a+, ld.
Marc Boyer wrote:
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template
plutot l'overloading non ?
virtual -> redefinition dynamique (dynamic binding)
overloading -> redifinition statique (subtyping)
Merde, un pb de vocabulaire français. En fait, je me plie au
vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut
rédéfinir que les fonctions virtuelles.
Bon, si vous avez deux minutes, rappelez moi comment on nomme
ces 3 cas en anglais et français.
class A {
void f(int i);
void f(float f); // en: overloading | fr: surcharge
virtual void g(int i);
}
class A : public B {
void f(float f); // en: ?? | fr: redefinition ?
void g(int i); // en: ?? | fr: redefinition ?
}
override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi
surdefinir, substituer.
OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual
perso, je comprends:
[type -> terme -> traduction (support)]
static -> overloading -> surcharge (decoration de nom)
dynamic (virtual) -> overriding -> redefinition (table de pointeur)
parametric (template) -> specialisation -> idem (generation de code)
Pour les subtilites de salon, ce sera seulement autour d'une tasse de
the ;-)
Si C++ est 'object-based', est-ce au sens 1) ou 2). Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template plutot l'overloading non ?
virtual -> redefinition dynamique (dynamic binding) overloading -> redifinition statique (subtyping) Merde, un pb de vocabulaire français. En fait, je me plie au
vocabulaire qu'on utilise en TD, et comme on fait Java, on ne peut rédéfinir que les fonctions virtuelles.
Bon, si vous avez deux minutes, rappelez moi comment on nomme ces 3 cas en anglais et français.
class A { void f(int i); void f(float f); // en: overloading | fr: surcharge virtual void g(int i); }
class A : public B { void f(float f); // en: ?? | fr: redefinition ? void g(int i); // en: ?? | fr: redefinition ? } override. En fr je crois que Gaby a dit une fois que supplanter avait ete
choisi (mais pose le probleme qu'il n'y a pas de nom). On trouve aussi surdefinir, substituer.
OK, et donc, on doit préciser 'virtual overriding' ou 'non virtual
perso, je comprends:
[type -> terme -> traduction (support)] static -> overloading -> surcharge (decoration de nom) dynamic (virtual) -> overriding -> redefinition (table de pointeur) parametric (template) -> specialisation -> idem (generation de code)
Pour les subtilites de salon, ce sera seulement autour d'une tasse de the ;-)
a+, ld.
Fabien LE LEZ
On Thu, 18 Jan 2007 11:32:08 +0100, Azuriel :
Mais je crois qu'on s'éloigne du sujet.
À l'intérieur d'un troll, tout est permis.
On Thu, 18 Jan 2007 11:32:08 +0100, Azuriel <azuriel@nospam.fr>:
Si vous voulez briller en société, vous pouvez glisser que C++ est un langage multi-paradigme.
MDR, j'essaierai tiens :p
Mathias Gaunard
Une définition un peu courte qui nous dit:
In computer science, the term object-based has two different, incompatible senses:
1. A somehow limited version of object-oriented programming where one or more of the following restrictions applies: * there is no implicit inheritance * there is no polymorphism * only a very reduced subset of the available values are objects (typically the GUI components) 2. Prototype-based systems (i.e., those based on "prototype" objects which are not instances of any class)
Si C++ est 'object-based', est-ce au sens 1) ou 2).
En 1), bien évidemment.
Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template)
Tu confonds concepts et fonctionnalités. Cette définition explique le concept de la programmation basée objet, qui est un sous-ensemble du concept de programmation orientée objet (appelée "par objets" en français par certains).
Ce n'est pas parce que C++ permet de faire de la programmation orientée objet que le concept basé objet n'est pas plus important dans le langage.
C'est pourtant explicite : la virtualité, et donc le polymorphisme d'héritage, ne sont pas activés par défaut. Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à tort et à travers et de préférer les approches à base de templates.
Donc, en quoi C++ est-il 'basée objet' ?
Grouper des choses dans des objets, définir constructeurs et destructeurs selon l'idiome RAII, le C++ c'est avant tout cela. Et on voit que la programmation basée objet en est un élément clé.
Une définition un peu courte qui nous dit:
In computer science, the term object-based has two different,
incompatible senses:
1. A somehow limited version of object-oriented programming where one
or more of the following restrictions applies:
* there is no implicit inheritance
* there is no polymorphism
* only a very reduced subset of the available values are
objects (typically the GUI components)
2. Prototype-based systems (i.e., those based on "prototype" objects
which are not instances of any class)
Si C++ est 'object-based', est-ce au sens 1) ou 2).
En 1), bien évidemment.
Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template)
Tu confonds concepts et fonctionnalités.
Cette définition explique le concept de la programmation basée objet,
qui est un sous-ensemble du concept de programmation orientée objet
(appelée "par objets" en français par certains).
Ce n'est pas parce que C++ permet de faire de la programmation orientée
objet que le concept basé objet n'est pas plus important dans le langage.
C'est pourtant explicite : la virtualité, et donc le polymorphisme
d'héritage, ne sont pas activés par défaut.
Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à
tort et à travers et de préférer les approches à base de templates.
Donc, en quoi C++ est-il 'basée objet' ?
Grouper des choses dans des objets, définir constructeurs et
destructeurs selon l'idiome RAII, le C++ c'est avant tout cela.
Et on voit que la programmation basée objet en est un élément clé.
In computer science, the term object-based has two different, incompatible senses:
1. A somehow limited version of object-oriented programming where one or more of the following restrictions applies: * there is no implicit inheritance * there is no polymorphism * only a very reduced subset of the available values are objects (typically the GUI components) 2. Prototype-based systems (i.e., those based on "prototype" objects which are not instances of any class)
Si C++ est 'object-based', est-ce au sens 1) ou 2).
En 1), bien évidemment.
Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template)
Tu confonds concepts et fonctionnalités. Cette définition explique le concept de la programmation basée objet, qui est un sous-ensemble du concept de programmation orientée objet (appelée "par objets" en français par certains).
Ce n'est pas parce que C++ permet de faire de la programmation orientée objet que le concept basé objet n'est pas plus important dans le langage.
C'est pourtant explicite : la virtualité, et donc le polymorphisme d'héritage, ne sont pas activés par défaut. Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à tort et à travers et de préférer les approches à base de templates.
Donc, en quoi C++ est-il 'basée objet' ?
Grouper des choses dans des objets, définir constructeurs et destructeurs selon l'idiome RAII, le C++ c'est avant tout cela. Et on voit que la programmation basée objet en est un élément clé.
Mathias Gaunard
Si vous voulez briller en société, vous pouvez glisser que C++ est un langage multi-paradigme.
Merci, j'essaierai de caser ça au déjeuner de la prochaine réunion du comité, en avril à Oxford.
Si vous voulez briller en société, vous pouvez glisser que C++ est un
langage multi-paradigme.
Merci, j'essaierai de caser ça au déjeuner de la prochaine réunion du
comité, en avril à Oxford.
C'est pourtant explicite : la virtualité, et donc le polymorphisme d'héritage, ne sont pas activés par défaut.
soit.
Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à tort et à travers et de préférer les approches à base de templates.
pardon ? c'est recommandé où cette censure ?
Sylvain.
Marc Boyer
Le 19-01-2007, Mathias Gaunard a écrit :
In computer science, the term object-based has two different, incompatible senses: 1. A somehow limited version of object-oriented programming where one or more of the following restrictions applies: * there is no implicit inheritance * there is no polymorphism * only a very reduced subset of the available values are objects (typically the GUI components) 2. Prototype-based systems (i.e., those based on "prototype" objects which are not instances of any class)
Si C++ est 'object-based', est-ce au sens 1) ou 2).
En 1), bien évidemment.
Bien sur...
Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template)
Tu confonds concepts et fonctionnalités.
Heuh... Les infos que tu as indique ne s'embarassent pas non plus de cette distinction. On pourrait aussi distinguer fonctionnalite et support. Car bon, avec des pointeurs de fonction, on fait de la POO en C. Donc il y a du polymorphisme en C ?
Cette définition explique le concept de la programmation basée objet, qui est un sous-ensemble du concept de programmation orientée objet (appelée "par objets" en français par certains).
OK
Ce n'est pas parce que C++ permet de faire de la programmation orientée objet que le concept basé objet n'est pas plus important dans le langage.
OK, mais ca ne montre pas l'inverse non plus. C permet de faire de la POO et ca n'implique pas grand chose non plus sur l'important du concept 'base objet' dans le langage.
C'est pourtant explicite : la virtualité, et donc le polymorphisme d'héritage, ne sont pas activés par défaut.
C'est ca l'argument ? D'une part, la def citee ne precise pas quel type de polymorphisme, et ensuite, dire qu'il faut ajouter un mot clef pour obtenir le polymorphisme d'heritage est en deduire que ca correspond a la definition 'no polymorphism', c'est un non argument.
'C n'a pas de type non signe (comme Java) car il faut rajouter le mot clee "unsigned" pour en avoir, ce n'est pas actif par defaut'...
Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à tort et à travers et de préférer les approches à base de templates.
De toute facon, aucun usage n'est recommande "a tort et a travers".
Donc, en quoi C++ est-il 'basée objet' ?
Grouper des choses dans des objets, définir constructeurs et destructeurs selon l'idiome RAII, le C++ c'est avant tout cela. Et on voit que la programmation basée objet en est un élément clé.
'Tu' vois peut etre plein de choses. Je ne connais pas de definition claire de 'prog basee objet', ni de 'orientee objet'. Mais la ref que tu as donne definit des criteres dans lequel C++ n'entre pas.
Je ne suis pas contre une discussion sur des nuances dans le monde objet, je suis pret a reconnaitre les limites de mes connaissances, mais si en cours de discussion il y a des arguments du genre 'il n'y a pas de polymorphisme dynamique en C++ parce que ce n'est pas active par defaut', ca va me lasser.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
Le 19-01-2007, Mathias Gaunard <loufoque@remove.gmail.com> a écrit :
In computer science, the term object-based has two different,
incompatible senses:
1. A somehow limited version of object-oriented programming where one
or more of the following restrictions applies:
* there is no implicit inheritance
* there is no polymorphism
* only a very reduced subset of the available values are
objects (typically the GUI components)
2. Prototype-based systems (i.e., those based on "prototype" objects
which are not instances of any class)
Si C++ est 'object-based', est-ce au sens 1) ou 2).
En 1), bien évidemment.
Bien sur...
Ca ne peut pas
être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition
et statique par les template)
Tu confonds concepts et fonctionnalités.
Heuh... Les infos que tu as indique ne s'embarassent pas non plus
de cette distinction. On pourrait aussi distinguer fonctionnalite et
support. Car bon, avec des pointeurs de fonction, on fait de la POO
en C. Donc il y a du polymorphisme en C ?
Cette définition explique le concept de la programmation basée objet,
qui est un sous-ensemble du concept de programmation orientée objet
(appelée "par objets" en français par certains).
OK
Ce n'est pas parce que C++ permet de faire de la programmation orientée
objet que le concept basé objet n'est pas plus important dans le langage.
OK, mais ca ne montre pas l'inverse non plus.
C permet de faire de la POO et ca n'implique pas grand chose non plus
sur l'important du concept 'base objet' dans le langage.
C'est pourtant explicite : la virtualité, et donc le polymorphisme
d'héritage, ne sont pas activés par défaut.
C'est ca l'argument ? D'une part, la def citee ne precise pas
quel type de polymorphisme, et ensuite, dire qu'il faut ajouter
un mot clef pour obtenir le polymorphisme d'heritage est en deduire
que ca correspond a la definition 'no polymorphism', c'est un
non argument.
'C n'a pas de type non signe (comme Java) car il faut rajouter
le mot clee "unsigned" pour en avoir, ce n'est pas actif par defaut'...
Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à
tort et à travers et de préférer les approches à base de templates.
De toute facon, aucun usage n'est recommande "a tort et a travers".
Donc, en quoi C++ est-il 'basée objet' ?
Grouper des choses dans des objets, définir constructeurs et
destructeurs selon l'idiome RAII, le C++ c'est avant tout cela.
Et on voit que la programmation basée objet en est un élément clé.
'Tu' vois peut etre plein de choses. Je ne connais pas de
definition claire de 'prog basee objet', ni de 'orientee objet'.
Mais la ref que tu as donne definit des criteres dans lequel C++
n'entre pas.
Je ne suis pas contre une discussion sur des nuances dans
le monde objet, je suis pret a reconnaitre les limites de mes
connaissances, mais si en cours de discussion il y a des arguments
du genre 'il n'y a pas de polymorphisme dynamique en C++
parce que ce n'est pas active par defaut', ca va me lasser.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
In computer science, the term object-based has two different, incompatible senses: 1. A somehow limited version of object-oriented programming where one or more of the following restrictions applies: * there is no implicit inheritance * there is no polymorphism * only a very reduced subset of the available values are objects (typically the GUI components) 2. Prototype-based systems (i.e., those based on "prototype" objects which are not instances of any class)
Si C++ est 'object-based', est-ce au sens 1) ou 2).
En 1), bien évidemment.
Bien sur...
Ca ne peut pas être 1) puisqu'en C++ on a du polymorphisme (dynamique par redefinition et statique par les template)
Tu confonds concepts et fonctionnalités.
Heuh... Les infos que tu as indique ne s'embarassent pas non plus de cette distinction. On pourrait aussi distinguer fonctionnalite et support. Car bon, avec des pointeurs de fonction, on fait de la POO en C. Donc il y a du polymorphisme en C ?
Cette définition explique le concept de la programmation basée objet, qui est un sous-ensemble du concept de programmation orientée objet (appelée "par objets" en français par certains).
OK
Ce n'est pas parce que C++ permet de faire de la programmation orientée objet que le concept basé objet n'est pas plus important dans le langage.
OK, mais ca ne montre pas l'inverse non plus. C permet de faire de la POO et ca n'implique pas grand chose non plus sur l'important du concept 'base objet' dans le langage.
C'est pourtant explicite : la virtualité, et donc le polymorphisme d'héritage, ne sont pas activés par défaut.
C'est ca l'argument ? D'une part, la def citee ne precise pas quel type de polymorphisme, et ensuite, dire qu'il faut ajouter un mot clef pour obtenir le polymorphisme d'heritage est en deduire que ca correspond a la definition 'no polymorphism', c'est un non argument.
'C n'a pas de type non signe (comme Java) car il faut rajouter le mot clee "unsigned" pour en avoir, ce n'est pas actif par defaut'...
Il est aussi recommandé de ne pas utiliser les fonctions virtuelles à tort et à travers et de préférer les approches à base de templates.
De toute facon, aucun usage n'est recommande "a tort et a travers".
Donc, en quoi C++ est-il 'basée objet' ?
Grouper des choses dans des objets, définir constructeurs et destructeurs selon l'idiome RAII, le C++ c'est avant tout cela. Et on voit que la programmation basée objet en est un élément clé.
'Tu' vois peut etre plein de choses. Je ne connais pas de definition claire de 'prog basee objet', ni de 'orientee objet'. Mais la ref que tu as donne definit des criteres dans lequel C++ n'entre pas.
Je ne suis pas contre une discussion sur des nuances dans le monde objet, je suis pret a reconnaitre les limites de mes connaissances, mais si en cours de discussion il y a des arguments du genre 'il n'y a pas de polymorphisme dynamique en C++ parce que ce n'est pas active par defaut', ca va me lasser.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)