TOUT -|- TOUT sur le visuel -|- TOUT sur la logistique
From: "momo" <mjaddani@europeexplorer.com>
To: <java@u-strasbg.fr>
Subject: multi-heritage
Date sent: Thu, 23 Nov 2000 15:22:07 +0100
Send reply to: java@u-strasbg.fr
est - il possible de le faire
je sais que c'est possible mais je ne me rappelle pas comment
Date sent: Thu, 23 Nov 2000 15:45:27 +0100 (MET)
From: Remi Koutcherawy <koutch@shom.fr>
Send reply to: Remi Koutcherawy <koutch@shom.fr>
Subject: Re: multi-heritage
To: java@u-strasbg.fr
Bonjour,
L'héritage multiple est possible via des inner-classes.
De mémoire :
class A extends B
{
class C extends D
{
// ici on a accès aux membres de B et D
A.this.foo(); // B::foo()
C.super.foo(); // D::foo()
}
}
> est - il possible de le faire
> je sais que c'est possible mais je ne me rappelle pas comment
From: "Cedric Beust" <cedric@beust.com>
To: "Remi Koutcherawy" <koutch@shom.fr>, <java@u-strasbg.fr>
Subject: RE: multi-heritage
Date sent: Thu, 23 Nov 2000 09:38:12 -0800
Send reply to: java@u-strasbg.fr
> From: Remi Koutcherawy [mailto:koutch@shom.fr]
>
> De mémoire :
>
> class A extends B
> {
> class C extends D
> {
> // ici on a accès aux membres de B et D
> A.this.foo(); // B::foo()
> C.super.foo(); // D::foo()
> }
> }
Je ne vois pas ce que ca apporte : si tu modifies une classe, tu es oblige
de modifier l'autre aussi. Ca annule completement l'interet et rend la
maintenance bien plus complexe.
Pour repondre a la question initiale :
- Java supporte l'heritage multiple d'interfaces
- Java ne supporte pas l'heritage multiple d'implementation (il faut
recourir a la delegation)
--
Cedric
From: "Zeljko Velaja" <zvelaja@club-internet.fr>
To: <java@u-strasbg.fr>
Subject: Re: multi-heritage
Date sent: Thu, 23 Nov 2000 23:15:59 +0100
Send reply to: java@u-strasbg.fr
Effectivement, cela ne semble pas apporter grand chose, d'autant plus que
l'un des intérêts principaux de l'héritage multiple (le polymorphisme - à
cause duquel on a créé les interfaces) est impossible avec les classes
internes (A n'est pas transtypable en D, par exemple).
----- Original Message -----
From: Cedric Beust <cedric@beust.com>
To: Remi Koutcherawy <koutch@shom.fr>; <java@u-strasbg.fr>
Sent: Thursday, November 23, 2000 6:38 PM
Subject: RE: multi-heritage
> > From: Remi Koutcherawy [mailto:koutch@shom.fr]
>
> >
> > De mémoire :
> >
> > class A extends B
> > {
> > class C extends D
> > {
> > // ici on a accès aux membres de B et D
> > A.this.foo(); // B::foo()
> > C.super.foo(); // D::foo()
> > }
> > }
>
> Je ne vois pas ce que ca apporte : si tu modifies une classe, tu es
> oblige
de
> modifier l'autre aussi. Ca annule completement l'interet et rend la
maintenance
> bien plus complexe.
>
Date sent: Fri, 24 Nov 2000 11:13:31 +0100 (MET)
From: Remi Koutcherawy <koutch@shom.fr>
Send reply to: Remi Koutcherawy <koutch@shom.fr>
Subject: RE: multi-heritage
To: java@u-strasbg.fr
Bonjour,
Pour moi l'héritage multiple, c'etait juste hériter de 2 classes...
Certes, je ne prétends pas être informaticien, mais je croyais comprendre.
Là, je suis perdu par vos remarques, du coup je suis curieux ;-)
> Je ne vois pas ce que ca apporte : si tu modifies une classe, tu es
> oblige de modifier l'autre aussi.
Pas un Pb, il s'agit juste d'hériter de 2 classes.
> Ca annule completement l'interet et rend la maintenance bien plus
> complexe.
C'est quoi l'intérêt de l'héritage multiple ?
- à part d'hériter de 2 classes -
> - Java ne supporte pas l'heritage multiple d'implementation
> (il faut recourir a la delegation)
Kezako ?
C'est quoi l'heritage multiple d'implementation ?
C'est quoi la délégation ?
> Effectivement, cela ne semble pas apporter grand chose, d'autant plus
> que l'un des intérêts principaux de l'héritage multiple (le
> polymorphisme - à cause duquel on a créé les interfaces) est impossible
> avec les classes internes (A n'est pas transtypable en D, par exemple).
C'est quoi le polymorphisme ?
Qu'entend t-on par transtypable ?
En m'excusant par avance de ces questions qui pourront sembler naïves,
mais bon, ma culture informatique est ce qu'elle est :-)
A+
Rémi Koutchérawy
From: Olivier Dedieu <Olivier.Dedieu@inria.fr>
Date sent: Fri, 24 Nov 2000 14:24:21 +0100 (MET)
To: Remi Koutcherawy <koutch@shom.fr>
Copies to: java@u-strasbg.fr
Subject: RE: multi-heritage
Send reply to: Olivier.Dedieu@inria.fr
> Pour moi l'héritage multiple, c'etait juste hériter de 2 classes...
> Certes, je ne prétends pas être informaticien, mais je croyais
> comprendre.
>
> Là, je suis perdu par vos remarques, du coup je suis curieux ;-)
>
> > Je ne vois pas ce que ca apporte : si tu modifies une classe, tu es
> > oblige de modifier l'autre aussi.
>
> Pas un Pb, il s'agit juste d'hériter de 2 classes.
Il faut vraiment distinguer l'heritage de classe (i.e. de code) de
l'heritage d'interface (i.e. du type et du comportement attendu de
l'objet).
> C'est quoi l'heritage multiple d'implementation ?
L'heritage classe (comme en C++). C'est pas autoriser en Java sauf par
l'effet de bord des classes internes.
> C'est quoi la délégation ?
De l'heritage a la main : un objet A possède une methode m() mais
renvoit le traitement sur un objet B qui sait faire (le
délégué).
Voila quelques proposition/Implementation de delegation en Java :
http://pharos.inria.fr/Java/query.jsp?kind=fulltext&history=history0%3Dkeyword.s1%253A62%253Don&text=delegation&mode=all
>
> > Effectivement, cela ne semble pas apporter grand chose, d'autant plus
> > que l'un des intérêts principaux de l'héritage multiple (le
> > polymorphisme - à cause duquel on a créé les interfaces) est
> > impossible avec les classes internes (A n'est pas transtypable en D,
> > par exemple).
>
> C'est quoi le polymorphisme ?
Un exemple simpliste :
FigGeo[] tab = new FigGeo[] {new Carre(), new Triangle(), new Cercle()};
for(int i=0; i < tab.length; i++) {
tab[i].dessineToi();
}
Toutes les figures (Carre, Triangle, Cercle) implement la meme
interface (FigGeo) ce qui permet de les gerer dans un meme conteneur
(tab) tout en pouvant invoquer une de leur méthode (dessineToi())
> Qu'entend t-on par transtypable ?
Qu'un objet puisse etre gere sous plusieur type :
class X implement A, B, C {
.
}
X x = new X();
A a = x;
B b = x;
C c = x;
Ca permet de voir un meme objet avec différentes
facettes/comportement.
a+
---------------------------------------------------------------
Olivier Dedieu - (INRIA - Bull / WebTools - Pharos)
Web: http://www-sor.inria.fr/~dedieu
JavaChannel: http://www.java-channel.org/
Pharos team: http://webtools.dyade.fr/pharos/
---------------------------------------------------------------
From: "Cedric Beust" <cedric@beust.com>
To: <Olivier.Dedieu@inria.fr>, "Remi Koutcherawy" <koutch@shom.fr>
Copies to: <java@u-strasbg.fr>
Subject: RE: multi-heritage
Date sent: Fri, 24 Nov 2000 09:05:16 -0800
Send reply to: java@u-strasbg.fr
> From: Olivier Dedieu [mailto:Olivier.Dedieu@inria.fr]
> De l'heritage a la main : un objet A possède une methode m() mais
> renvoit le traitement sur un objet B qui sait faire (le
> délégué).
.. et aussi garder en memoire que cette methode n'emule qu'une partie de
l'heritage multiple d'implementation (pas de polymorphisme, pas de
principe de substitution) et force beaucoup de codage a la main, donc tres
sujette a erreurs.
--
Cedric