On Wed, 21 Jul 2004 18:55:51 +0200, Laurent Deniau :
Est-ce qu'une classe est une subclasse d'elle meme? Est-ce qu'une classe est une super classe d'elle meme?
Pour les "subclasses" et "superclasses", je ne sais pas -- c'est le genre de termes que je n'ai jamais rencontré en C++.
En C++ on parle plutôt de "classe de base" ou "classe dérivée", et ces termes impliquent un héritage (donc une classe n'est pas dérivée d'elle-même).
-- ;-)
Loïc Joly
Laurent Deniau wrote:
Quelques questions (philosophique?) qui me viennent a l'esprit:
Est-ce qu'une classe est une subclasse d'elle meme? Est-ce qu'une classe est une super classe d'elle meme?
Vu maintenant du point pratique, si on avait deux fonctions pour repondre a ces questions:
isSubClassOf (A, A) == true isSuperClassOf(A, A) == true
seraient toujours vraies ou toujours fausses?
Contrairement à Fabien, je pense que la question n'est pas aussi simple. Ca dépend si on est essentialiste ou existencialiste.
L'existentialiste ira voir la notion intrinsèque d'une classe de base et dérivée, et répondra comme Fabien. Je ne reviens pas sur son argument.
L'essentialisme dira que ces notions ne se définissent que par leur propriétés, et verra que A possède presque toutes les caractèristiques que doivent possèder une classe de base de A, mais pas toutes. En particulier, une classe de base B de A possède la propriété que toutes ses fonctions private peuvent être appelées de B mais pas de A, ce qui n'est pas le cas pour A=B.
La conclusion est la même, mais la démarche me semble plus productive. Maintenant, pour ce qui est de savoir si ça sert à quelque chose...
-- Loïc
Laurent Deniau wrote:
Quelques questions (philosophique?) qui me viennent a l'esprit:
Est-ce qu'une classe est une subclasse d'elle meme?
Est-ce qu'une classe est une super classe d'elle meme?
Vu maintenant du point pratique, si on avait deux fonctions pour
repondre a ces questions:
isSubClassOf (A, A) == true
isSuperClassOf(A, A) == true
seraient toujours vraies ou toujours fausses?
Contrairement à Fabien, je pense que la question n'est pas aussi simple.
Ca dépend si on est essentialiste ou existencialiste.
L'existentialiste ira voir la notion intrinsèque d'une classe de base et
dérivée, et répondra comme Fabien. Je ne reviens pas sur son argument.
L'essentialisme dira que ces notions ne se définissent que par leur
propriétés, et verra que A possède presque toutes les caractèristiques
que doivent possèder une classe de base de A, mais pas toutes. En
particulier, une classe de base B de A possède la propriété que toutes
ses fonctions private peuvent être appelées de B mais pas de A, ce qui
n'est pas le cas pour A=B.
La conclusion est la même, mais la démarche me semble plus productive.
Maintenant, pour ce qui est de savoir si ça sert à quelque chose...
Quelques questions (philosophique?) qui me viennent a l'esprit:
Est-ce qu'une classe est une subclasse d'elle meme? Est-ce qu'une classe est une super classe d'elle meme?
Vu maintenant du point pratique, si on avait deux fonctions pour repondre a ces questions:
isSubClassOf (A, A) == true isSuperClassOf(A, A) == true
seraient toujours vraies ou toujours fausses?
Contrairement à Fabien, je pense que la question n'est pas aussi simple. Ca dépend si on est essentialiste ou existencialiste.
L'existentialiste ira voir la notion intrinsèque d'une classe de base et dérivée, et répondra comme Fabien. Je ne reviens pas sur son argument.
L'essentialisme dira que ces notions ne se définissent que par leur propriétés, et verra que A possède presque toutes les caractèristiques que doivent possèder une classe de base de A, mais pas toutes. En particulier, une classe de base B de A possède la propriété que toutes ses fonctions private peuvent être appelées de B mais pas de A, ce qui n'est pas le cas pour A=B.
La conclusion est la même, mais la démarche me semble plus productive. Maintenant, pour ce qui est de savoir si ça sert à quelque chose...
-- Loïc
Laurent Deniau
Loïc Joly wrote:
Laurent Deniau wrote:
Quelques questions (philosophique?) qui me viennent a l'esprit:
Est-ce qu'une classe est une subclasse d'elle meme? Est-ce qu'une classe est une super classe d'elle meme?
Vu maintenant du point pratique, si on avait deux fonctions pour repondre a ces questions:
isSubClassOf (A, A) == true isSuperClassOf(A, A) == true
seraient toujours vraies ou toujours fausses?
Contrairement à Fabien, je pense que la question n'est pas aussi simple. Ca dépend si on est essentialiste ou existencialiste.
Yep.
L'existentialiste ira voir la notion intrinsèque d'une classe de base et dérivée, et répondra comme Fabien. Je ne reviens pas sur son argument.
Yep. D'ailleurs c'est pour cela que je n'ai pas employe base et derivee car avec ce vocabulaire, il n'y a pas d'ambiguite.
L'essentialisme dira que ces notions ne se définissent que par leur propriétés, et verra que A possède presque toutes les caractèristiques que doivent possèder une classe de base de A, mais pas toutes. En particulier, une classe de base B de A possède la propriété que toutes ses fonctions private peuvent être appelées de B mais pas de A, ce qui n'est pas le cas pour A=B.
Ca c'est l'aspect philosophique avec lequel j'adhere 100%.
Dans l'aspect pratique, quand on veut savoir si une classe est une classe de base d'une autre classe, cela inclu souvent que l'on accepte une "egalite" de classe.
Par exemple le code (fictif) suivant inclu l'egalite:
bool isSubClassOf(Class class, Class super) { while (class != super && class) class = superOf(class);
return class == super && class; }
Mais l'utilisation pratique d'un tel code implique souvent le besoin d'inclure l'egalite. L'exclure complique passablement sont utilisation.
La conclusion est la même, mais la démarche me semble plus productive. Maintenant, pour ce qui est de savoir si ça sert à quelque chose...
oui. par exemple l'implementation de catch ou de dynamic_cast sur heritage simple en prenant Class ci-dessus comme etant par exemple un pointeur de vtbl ou de typdeid.
a+, ld.
Loïc Joly wrote:
Laurent Deniau wrote:
Quelques questions (philosophique?) qui me viennent a l'esprit:
Est-ce qu'une classe est une subclasse d'elle meme?
Est-ce qu'une classe est une super classe d'elle meme?
Vu maintenant du point pratique, si on avait deux fonctions pour
repondre a ces questions:
isSubClassOf (A, A) == true
isSuperClassOf(A, A) == true
seraient toujours vraies ou toujours fausses?
Contrairement à Fabien, je pense que la question n'est pas aussi simple.
Ca dépend si on est essentialiste ou existencialiste.
Yep.
L'existentialiste ira voir la notion intrinsèque d'une classe de base et
dérivée, et répondra comme Fabien. Je ne reviens pas sur son argument.
Yep. D'ailleurs c'est pour cela que je n'ai pas employe base et derivee
car avec ce vocabulaire, il n'y a pas d'ambiguite.
L'essentialisme dira que ces notions ne se définissent que par leur
propriétés, et verra que A possède presque toutes les caractèristiques
que doivent possèder une classe de base de A, mais pas toutes. En
particulier, une classe de base B de A possède la propriété que toutes
ses fonctions private peuvent être appelées de B mais pas de A, ce qui
n'est pas le cas pour A=B.
Ca c'est l'aspect philosophique avec lequel j'adhere 100%.
Dans l'aspect pratique, quand on veut savoir si une classe est une
classe de base d'une autre classe, cela inclu souvent que l'on accepte
une "egalite" de classe.
Par exemple le code (fictif) suivant inclu l'egalite:
bool isSubClassOf(Class class, Class super)
{
while (class != super && class)
class = superOf(class);
return class == super && class;
}
Mais l'utilisation pratique d'un tel code implique souvent le besoin
d'inclure l'egalite. L'exclure complique passablement sont utilisation.
La conclusion est la même, mais la démarche me semble plus productive.
Maintenant, pour ce qui est de savoir si ça sert à quelque chose...
oui. par exemple l'implementation de catch ou de dynamic_cast sur
heritage simple en prenant Class ci-dessus comme etant par exemple un
pointeur de vtbl ou de typdeid.
Quelques questions (philosophique?) qui me viennent a l'esprit:
Est-ce qu'une classe est une subclasse d'elle meme? Est-ce qu'une classe est une super classe d'elle meme?
Vu maintenant du point pratique, si on avait deux fonctions pour repondre a ces questions:
isSubClassOf (A, A) == true isSuperClassOf(A, A) == true
seraient toujours vraies ou toujours fausses?
Contrairement à Fabien, je pense que la question n'est pas aussi simple. Ca dépend si on est essentialiste ou existencialiste.
Yep.
L'existentialiste ira voir la notion intrinsèque d'une classe de base et dérivée, et répondra comme Fabien. Je ne reviens pas sur son argument.
Yep. D'ailleurs c'est pour cela que je n'ai pas employe base et derivee car avec ce vocabulaire, il n'y a pas d'ambiguite.
L'essentialisme dira que ces notions ne se définissent que par leur propriétés, et verra que A possède presque toutes les caractèristiques que doivent possèder une classe de base de A, mais pas toutes. En particulier, une classe de base B de A possède la propriété que toutes ses fonctions private peuvent être appelées de B mais pas de A, ce qui n'est pas le cas pour A=B.
Ca c'est l'aspect philosophique avec lequel j'adhere 100%.
Dans l'aspect pratique, quand on veut savoir si une classe est une classe de base d'une autre classe, cela inclu souvent que l'on accepte une "egalite" de classe.
Par exemple le code (fictif) suivant inclu l'egalite:
bool isSubClassOf(Class class, Class super) { while (class != super && class) class = superOf(class);
return class == super && class; }
Mais l'utilisation pratique d'un tel code implique souvent le besoin d'inclure l'egalite. L'exclure complique passablement sont utilisation.
La conclusion est la même, mais la démarche me semble plus productive. Maintenant, pour ce qui est de savoir si ça sert à quelque chose...
oui. par exemple l'implementation de catch ou de dynamic_cast sur heritage simple en prenant Class ci-dessus comme etant par exemple un pointeur de vtbl ou de typdeid.
a+, ld.
Fabien LE LEZ
On Thu, 22 Jul 2004 10:11:49 +0200, Laurent Deniau :
Ca c'est l'aspect philosophique avec lequel j'adhere 100%.
Donc, en gros, tu définis la relation "est une superclasse de" comme une relation d'ordre,au sens mathématique du terme ?
-- ;-)
On Thu, 22 Jul 2004 10:11:49 +0200, Laurent Deniau
<Laurent.Deniau@cern.ch>:
Ca c'est l'aspect philosophique avec lequel j'adhere 100%.
Donc, en gros, tu définis la relation "est une superclasse de" comme
une relation d'ordre,au sens mathématique du terme ?
On Thu, 22 Jul 2004 16:49:06 +0200, Laurent Deniau :
Yep. Mais apres les reponses que j'ai eues, il semble que inclure l'egalite ammene trop de confusion. J'ai donc ecarte ce cas.
De toutes façons, ça reste de la métaphysique (ou de la linguistique). Et tu peux très bien dire, au début d'un exposé :
"Définition : on dira ici qu'une "subclasse" (ou "épagneul breton") d'une classe est une classe dérivée, ou elle-même".
-- ;-)
Falk Tannhäuser
Loïc Joly wrote:
L'essentialisme dira que ces notions ne se définissent que par leur propriétés, et verra que A possède presque toutes les caractèristiques que doivent possèder une classe de base de A, mais pas toutes. En particulier, une classe de base B de A possède la propriété que toutes ses fonctions private peuvent être appelées de B mais pas de A, ce qui n'est pas le cas pour A=B.
Vu de l'extérieur, les fonctions 'private' sont inaccessibles, par contre une fonction membre (ou amie) de la classe de base 'B' peut les appeler, peu importe qu'elle opère sur une instance de la classe 'B' ou une instance de la classe dérivée 'D'. Dans le cas de la dérivation publique, les instances de la classe dérivée peuvent apparaître partout où sont acceptées les instances de la classe de base (parce que les conversions 'D*' vers 'B*' et 'D&' vers 'B&' sont implicites et automatiques). Il appartient au concepteur de 'D' de s'assurer que les fonctions membres de 'D' répondent à toutes les contraintes imposées au niveau de 'B' (invariantes, pré- et postconditions) - c'est en gros le principe de substituabilité (ça se dit ainsi en français ?) de Liskov. En revanche, une classe peut toujours être substituée par elle-même - c'est pour cela que je dirais que, dans la pratique, la relation "_ est une subclasse de ou égale à _" est plus importante que la relation "_ est une vraie subclasse de _".
Falk
Loïc Joly wrote:
L'essentialisme dira que ces notions ne se définissent que par leur
propriétés, et verra que A possède presque toutes les caractèristiques
que doivent possèder une classe de base de A, mais pas toutes. En
particulier, une classe de base B de A possède la propriété que toutes
ses fonctions private peuvent être appelées de B mais pas de A, ce qui
n'est pas le cas pour A=B.
Vu de l'extérieur, les fonctions 'private' sont inaccessibles, par contre
une fonction membre (ou amie) de la classe de base 'B' peut les appeler,
peu importe qu'elle opère sur une instance de la classe 'B' ou une instance
de la classe dérivée 'D'.
Dans le cas de la dérivation publique, les instances de la classe dérivée
peuvent apparaître partout où sont acceptées les instances de la classe
de base (parce que les conversions 'D*' vers 'B*' et 'D&' vers 'B&' sont
implicites et automatiques). Il appartient au concepteur de 'D' de s'assurer
que les fonctions membres de 'D' répondent à toutes les contraintes imposées
au niveau de 'B' (invariantes, pré- et postconditions) - c'est en gros le
principe de substituabilité (ça se dit ainsi en français ?) de Liskov.
En revanche, une classe peut toujours être substituée par elle-même -
c'est pour cela que je dirais que, dans la pratique, la relation
"_ est une subclasse de ou égale à _" est plus importante que la relation
"_ est une vraie subclasse de _".
L'essentialisme dira que ces notions ne se définissent que par leur propriétés, et verra que A possède presque toutes les caractèristiques que doivent possèder une classe de base de A, mais pas toutes. En particulier, une classe de base B de A possède la propriété que toutes ses fonctions private peuvent être appelées de B mais pas de A, ce qui n'est pas le cas pour A=B.
Vu de l'extérieur, les fonctions 'private' sont inaccessibles, par contre une fonction membre (ou amie) de la classe de base 'B' peut les appeler, peu importe qu'elle opère sur une instance de la classe 'B' ou une instance de la classe dérivée 'D'. Dans le cas de la dérivation publique, les instances de la classe dérivée peuvent apparaître partout où sont acceptées les instances de la classe de base (parce que les conversions 'D*' vers 'B*' et 'D&' vers 'B&' sont implicites et automatiques). Il appartient au concepteur de 'D' de s'assurer que les fonctions membres de 'D' répondent à toutes les contraintes imposées au niveau de 'B' (invariantes, pré- et postconditions) - c'est en gros le principe de substituabilité (ça se dit ainsi en français ?) de Liskov. En revanche, une classe peut toujours être substituée par elle-même - c'est pour cela que je dirais que, dans la pratique, la relation "_ est une subclasse de ou égale à _" est plus importante que la relation "_ est une vraie subclasse de _".
Falk
Vincent Lascaux
"Définition : on dira ici qu'une "subclasse" (ou "épagneul breton") d'une classe est une classe dérivée, ou elle-même".
Le problème est qu'alors tu ne peux plus parler d'épagneul breton. Dans ce cas, il faut ajouter "on dira qu'une casserole est un chien au pelage blanc et orangé et à la queue écourtée".
-- Vincent
"Définition : on dira ici qu'une "subclasse" (ou "épagneul breton")
d'une classe est une classe dérivée, ou elle-même".
Le problème est qu'alors tu ne peux plus parler d'épagneul breton. Dans ce
cas, il faut ajouter "on dira qu'une casserole est un chien au pelage blanc
et orangé et à la queue écourtée".
"Définition : on dira ici qu'une "subclasse" (ou "épagneul breton") d'une classe est une classe dérivée, ou elle-même".
Le problème est qu'alors tu ne peux plus parler d'épagneul breton. Dans ce cas, il faut ajouter "on dira qu'une casserole est un chien au pelage blanc et orangé et à la queue écourtée".
-- Vincent
Fabien LE LEZ
On Thu, 22 Jul 2004 23:54:42 +0100, "Vincent Lascaux" :
Le problème est qu'alors tu ne peux plus parler d'épagneul breton.
Pas grave, on n'est pas sur fr.rec.jeux.nomic ici.
-- ;-)
On Thu, 22 Jul 2004 23:54:42 +0100, "Vincent Lascaux"
<nospam@nospam.org>:
Le problème est qu'alors tu ne peux plus parler d'épagneul breton.
Pas grave, on n'est pas sur fr.rec.jeux.nomic ici.