OVH Cloud OVH Cloud

interface (oo polymorphisme)

6 réponses
Avatar
eric
Bonjonr,
pouvez-vous m'expliquer les cas d'utilisation du polymorphisme
d'interface. Si je créer une interface IClassA et une coClassB
implémentant l'interface de IClassA.
Soit trois cas, sachant que chaque classe implémentant l'interface
doivent changées si l'interface change :
- Je dois étandre les fonctionnalitées (une sub, fct en plus part
exemple.)
- Je dois changer les types ou le nombre des arguments.
- Je dois changer l'implémentation d'une des fonctions.
* Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface.
d'avance merci.

@+ Eric

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

6 réponses

Avatar
Jean-Marc
"eric" a écrit dans le message de
news:
Bonjonr,
pouvez-vous m'expliquer les cas d'utilisation du polymorphisme
d'interface. Si je créer une interface IClassA et une coClassB
implémentant l'interface de IClassA.
Soit trois cas, sachant que chaque classe implémentant l'interface
doivent changées si l'interface change :
- Je dois étandre les fonctionnalitées (une sub, fct en plus part
exemple.)
- Je dois changer les types ou le nombre des arguments.
- Je dois changer l'implémentation d'une des fonctions.
* Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface.
d'avance merci.



Heu, à tout hasard, quelle est la question?
Tu es sur d'être sur le bon groupe ?
Ici, on parle de VB (Visual Basic).

Je ne peux même pas t'orienter vers un meilleur groupe, je n'ai pas saisi un
mot de tes 4 posts :-(

--
Jean-marc
Avatar
Guy DETIENNE
Salut ;O)

Tu seras très certainement mieux servi sur le forum de VB.NET :
microsoft.public.fr.dotnet.vb

Guy

"eric" a écrit dans le message de
news:
Bonjonr,
pouvez-vous m'expliquer les cas d'utilisation du polymorphisme
d'interface. Si je créer une interface IClassA et une coClassB
implémentant l'interface de IClassA.
Soit trois cas, sachant que chaque classe implémentant l'interface
doivent changées si l'interface change :
- Je dois étandre les fonctionnalitées (une sub, fct en plus part
exemple.)
- Je dois changer les types ou le nombre des arguments.
- Je dois changer l'implémentation d'une des fonctions.
* Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface.
d'avance merci.

@+ Eric

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com



Avatar
eric
Bonsoir,
je suis sur et certain de me trouver dans le bon groupe. Ceci, de par
le fait que MS Visual Basic 6.0 (maintenant sp6) permet
l'implémentation du polymorphisme d'interface (Concept O.O.).

Je suis surement gauche dans ma question (veuillez m'exscuser). Donc,
je la reformule autrement.

Je cherche des exemples, des explications, des expériences, des cas
vécus sur les circonstances d'implémentations du polymorphisme
d'interface en vb6.

Voici par exemple les cas possible auquel je pense :
1. Je dois étandre les fonctionnalitées de l'interface. Si je dois
ajouter une méthode en plus.
2. Je dois changer les types ou le nombre des arguments d'une méthode
de l'interface.
3. Je dois changer l'algo, d'une propriétée d'une classe implémentent
l'interface.
Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface ?

Si l'on prend comme exemple l'interface IPeople et les deux classes
coManager, coSercretary, qu'est ce que cela peut donner?

D'avance merci.

@+ Eric

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Guy DETIENNE
Salut !

Voici donc de la lecture...
Polymorphisme dans Visual Basic
La plupart des systèmes de programmation orientée objet gère le
polymorphisme par l'intermédiaire de l'héritage. Par exemple, les classes
Flea et Tyrannosaur pourraient toutes deux hériter des caractéristiques
d'une classe Animal. Dans les deux classes, la méthode Bite de la classe
Animal serait redéfinie, afin que soient conservées les spécificités des
classes Flea et Tyrannosaur.

Le polymorphisme permet d'appeler la méthode Bite d'un objet appartenant à
une classe quelconque dérivée d'Animal, sans savoir à quelle classe
appartient l'objet.

Polymorphisme par interface
Visual Basic n'a pas recours à l'héritage pour gérer le polymorphisme ; il
prend en charge le polymorphisme par l'intermédiaire de plusieurs interfaces
ActiveX. Dans le modèle COM (Component Object Model) qui constitue
l'infrastructure de la technologie ActiveX, plusieurs interfaces permettent
d'assurer l'évolution des systèmes de composants logiciels en conservant le
code existant.

Une interface est un ensemble de propriétés et de méthodes connexes. La
majeure partie de la technologie ActiveX concerne la mise en ½uvre
d'interfaces standard fournissant des services système ou des
fonctionnalités à d'autres programmes.

Dans Visual Basic, vous pouvez créer une interface Animal et l'implémenter
dans les classes Flea et Tyrannosaur. Vous pouvez ensuite appeler la méthode
Bite de tout type d'objet, sans connaître ce dernier.

Polymorphisme et performances
Le polymorphisme a une grande incidence sur les performances. Cet aspect est
illustré dans la fonction suivante :

Public Sub GetFood(ByVal Critter As Object, _
ByVal Food As Object)
Dim dblDistance As Double
' Code calculant la distance jusqu'à la nourriture
' (omis).
Critter.Move dblDistance ' Late bound
Critter.Bite Food ' Late bound
End Sub
Les méthodes Move et Bite sont à liaison tardive sur Critter. Une liaison
tardive se produit lorsque Visual Basic ne peut déterminer au moment de la
compilation le type d'objet que va contenir une variable. Dans cet exemple,
l'argument Critter (créature) est déclaré avec As Object. Au moment de
l'exécution, il peut donc contenir une référence à n'importe quel type
d'objet, Car ou Rock, par exemple.

Visual Basic, qui ne peut prévoir quel sera l'objet, compile du code
supplémentaire pour vérifier que l'objet prend en charge la méthode appelée.
Dans l'affirmative, ce code supplémentaire l'appelle ; dans le cas
contraire, le code supplémentaire déclenche une erreur. Tous les appels de
méthode ou de propriété impliquent ce traitement additionnel.

En revanche, les interfaces permettent les liaisons précoces. Lorsque Visual
Basic sait, au moment de la compilation, quelle interface est appelée, il
peut vérifier dans la bibliothèque de types si l'interface prend en charge
la méthode. Visual Basic peut alors intégrer à la compilation un passage
direct à la méthode en utilisant une table de fonction virtuelle (vtable).
Cette approche est bien plus rapide que la liaison tardive.

Imaginons maintenant que les méthodes Move et Bite appartiennent à une
interface Animal et que toutes les classes à nom d'animal implémentent cette
interface. L'argument Critter peut désormais être déclaré avec As Animal et
les méthodes Move et Bite feront l'objet d'une liaison précoce :

Public Sub GetFood(ByVal Critter As Animal, _
ByVal Food As Object)
Dim dblDistance As Double
' Code calculant la distance jusqu'à la nourriture (omis).
Critter.Move dblDistance ' Liaison précoce (vtable).
Critter.Bite Food ' Liaison précoce (vtable).
End Sub
Mise à disposition du polymorphisme par l'implémentation des interfaces
Une des caractéristiques les plus surprenantes du modèle d'objet composant
(COM, Component Object Model) est la possibilité offerte à un objet
d'implémenter des interfaces multiples. Outre l'activation du polymorphisme,
les interfaces multiples offrent un mécanisme de développement progressif ou
par étapes qui rend superflue la recompilation de tous les composants du
système en cas de modifications.

En définissant les caractéristiques en termes d'interfaces, composées de
petits groupes de fonctions étroitement liées, vous pouvez implémenter les
caractéristiques du composant au fur et à mesure des besoins en sachant que
vous pouvez les développer ultérieurement en ajoutant simplement des
interfaces supplémentaires.

Il est ainsi plus simple de préserver la compatibilité, étant donné que les
nouvelles versions d'un composant peuvent continuer à fournir des interfaces
existantes tout en ajoutant de nouvelles interfaces ou des interfaces
améliorées qui peuvent être exploitées par les versions successives des
applications client lorsque cela s'avère utile.

Héritage et polymorphisme
La plupart des outils de programmation orientée objet autorisent le
polymorphisme par l'intermédiaire de l'héritage, comme expliqué à la section
« Polymorphisme » du chapitre « Utilisation d'objets en programmation » du
Guide de l'utilisateur de Visual Basic. Comme il s'agit d'un mécanisme
puissant pour les tâches de développement à échelle réduite, il a souvent
engendré des problèmes sur les grands systèmes.

Ces difficultés sont partiellement dues aux modifications nécessaires
apportées au c½ur même du graphe d'héritage des classes. Pour bénéficier de
ces modifications, une recompilation s'impose. En cas d'échec, vous risquez
d'être confronté à des surprises désagréables au moment où vous n'avez plus
d'autre choix que de sortir une nouvelle version.

Plus sérieusement, si vous mettez trop l'accent sur le polymorphisme piloté
par héritage, vous serez normalement amené à déplacer une partie
considérable des ressources consacrées aux tâches de développement pour les
affecter à des tâches d'analyse importantes, ce qui ne résoudra en rien le
retard accumulé dans le développement, pas plus que cela ne réduira
l'attente des utilisateurs finals, anxieux de disposer de l'application pour
découvrir si elle répond bien à leur besoins.

En conséquence, les outils destinés au prototypage rapide et au
développement rapide d'applications (RAD, Rapid Application Development) ont
supplanté les outils de programmation orientée objet (OOP, Object-Oriented
Programming).

Visual Basic et COM
Visual Basic suit l'exemple de COM en considérant les interfaces multiples
comme un moyen d'accès au polymorphisme plus souple. Le logiciel peut
évoluer de manière différente selon l'interface au lieu de dépendre de tous
les versions précédentes, ce qui allonge le processus de création.

Initialement, les objets peuvent être petits et dotés de fonctionnalités
minimales. Au fil du temps, ils peuvent acquérir des caractéristiques
supplémentaires que leur utilisation effective aura fait apparaître. Le code
existant est protégé grâce à la poursuite de la prise en charge des
anciennes interfaces, parallèlement à l'implémentation des nouvelles.

Le mot clé Implements
Visual Basic fournit le mot clé Implements qui permet l'incorporation d'une
interface secondaire. Si, par exemple, votre projet fait référence à une
bibliothèque de types qui décrivait l'interface IFinance, vous pouvez placer
le code suivant dans un module de classe :

Implements IFinance
Comme les bibliothèques de types ne contiennent que des interfaces et aucune
implémentation, vous devriez ajouter du code pour chacune des propriétés et
méthodes de l'interface IFinance, de la manière décrite à la section «
Implémentation et utilisation d'interfaces standard ».

Une interface est un contrat
Lorsque vous créez une interface destinée à être utilisée avec le mécanisme
Implements, vous la figez pour toujours. Cet immobilisme de l'interface est
un principe important de la création des composants, car il protège les
systèmes existants qui ont été écrits pour une interface.

Lorsqu'il devient évident qu'une interface doit être améliorée, il faut en
créer une nouvelle qui pourrait être appelée Interface2, de manière à
indiquer sa relation avec l'interface existante.

Alors que la création trop fréquente de nouvelles interfaces peut encombrer
vos composants avec des interfaces inutiles, des interfaces bien conçues
sont généralement de petite taille et indépendantes les unes des autres, ce
qui réduit le risque d'altération des performances.

Construction des interfaces
Le processus de détermination des propriétés et des méthodes appartenant à
une interface est désigné sous le terme de construction.

En règle générale, vous devez regrouper dans une même interface quelques
fonctions étroitement liées. Si ces fonctions sont trop nombreuses,
l'interface est difficile à manier. Par ailleurs, en morcelant exagérément
une caractéristique, vous engendrez une surcharge supplémentaire. Le code
suivant, par exemple, appelle des méthodes de trois interfaces différentes
de la classe Velociraptor :

Public Sub CretaceousToDoList(ByVal vcr1 As _
Velociraptor, ByVal vcr2 As Velociraptor)
Dim dnr As IDinosaur
Dim prd As IPredator
vcr1.Mate vcr2
Set dnr = vcr1
dnr.LayEggs
Set prd = vcr1
prd.KillSomethingAndEatIt
End Sub
Pour utiliser les méthodes des interfaces IDinosaur et IPredator, vous devez
affecter l'objet à une variable du type d'interface correct.

Dans la mesure du possible, les interfaces conçues pour utiliser des
structures de données souples dureront plus longtemps que les interfaces
fondées sur des types de données fixes.

Comme indiqué plus haut, le risque d'erreur est nettement moins élevé si
vous créez des interfaces plutôt que de créer des graphes d'héritage de
grande taille. En limitant la taille initiale, vous parviendrez assez
rapidement à exécuter des éléments d'un système. La possibilité de faire
évoluer le système en ajoutant des interfaces vous permet de bénéficier des
avantages que la programmation orientée objet était censée vous apporter.

Création d'interfaces standard à l'aide de Visual Basic


Vous pouvez créer des interfaces standard pour votre organisation en
compilant des classes abstraites dans des projets Exe ou DLL ActiveX Visual
Basic, ou encore à l'aide de l'utilitaire MkTypLib que vous trouverez dans
le dossier Tools.

Si vous connaissez bien Microsoft Visual C++, vous n'éprouverez probablement
aucune difficulté à utiliser l'utilitaire MkTypLib.

Les programmeurs moins avertis apprécieront de pouvoir créer une interface à
l'aide d'un module de classe Visual Basic. Ouvrez un nouveau projet Exe ou
DLL ActiveX et ajoutez les propriétés et méthodes souhaitées à un module de
classe. N'insérez pas de code dans les procédures. Affectez à la classe le
nom que vous souhaitez attribuer à l'interface, par exemple IFinance, puis
créez le projet.

Note C'est en raison de l'application d'une convention ActiveX que les
noms d'interface commencent par la lettre majuscule « I ». Il n'est pas
absolument nécessaire d'appliquer cette convention. Toutefois, elle permet
de distinguer facilement les interfaces abstraites que vous implémentez et
les interfaces par défaut des classes. Ces dernières sont généralement
désignées par le nom de classe dans Visual Basic.

La bibliothèque de types du fichier .dll ou .exe obtenu contient les
informations requises par l'instruction Implements. Pour l'utiliser dans un
autre projet, cliquez sur le bouton Parcourir de la boîte de dialogue
Références afin de rechercher le fichier .dll ou .exe et de définir une
référence. L'Explorateur d'objets vous permet également d'afficher les
interfaces contenues dans une bibliothèque de types.

Important La fonctionnalité Implements ne prend pas en charge les
interfaces sortantes. C'est ainsi que tout événement que vous déclarez dans
un module de classe sera automatiquement ignoré.

Comme expliqué plus haut à la section « Mise à disposition du polymorphisme
par l'implémentation des interfaces », une interface qui a été définie et
acceptée doit demeurer immobile afin de protéger les applications qui ont
été écrites à son intention. N'essayez PAS de modifier les interfaces
standard à l'aide de l'option Compatibilité des versions de Visual Basic.

Pour plus d'informations sur les concepts importants tels que la
construction et l'invariance de l'interface, reportez-vous à la section «
Mise à disposition du polymorphisme par l'implémentation des interfaces ».
La section « Implémentation et utilisation d'interfaces standard » explique
la manière dont les interfaces sont implémentées et utilisées dans





"eric" a écrit dans le message de
news:
Bonsoir,
je suis sur et certain de me trouver dans le bon groupe. Ceci, de par
le fait que MS Visual Basic 6.0 (maintenant sp6) permet
l'implémentation du polymorphisme d'interface (Concept O.O.).

Je suis surement gauche dans ma question (veuillez m'exscuser). Donc,
je la reformule autrement.

Je cherche des exemples, des explications, des expériences, des cas
vécus sur les circonstances d'implémentations du polymorphisme
d'interface en vb6.

Voici par exemple les cas possible auquel je pense :
1. Je dois étandre les fonctionnalitées de l'interface. Si je dois
ajouter une méthode en plus.
2. Je dois changer les types ou le nombre des arguments d'une méthode
de l'interface.
3. Je dois changer l'algo, d'une propriétée d'une classe implémentent
l'interface.
Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface ?

Si l'on prend comme exemple l'interface IPeople et les deux classes
coManager, coSercretary, qu'est ce que cela peut donner?

D'avance merci.

@+ Eric

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com



Avatar
ng
Salut,

Toutes les méthodes et propriétés de l'interface doivent être implémentée,
si tu en rajoutes ds l'interface il faudra les rajouter dans tes classes qui
l'implémentent.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


eric wrote:
Bonjonr,
pouvez-vous m'expliquer les cas d'utilisation du polymorphisme
d'interface. Si je créer une interface IClassA et une coClassB
implémentant l'interface de IClassA.
Soit trois cas, sachant que chaque classe implémentant l'interface
doivent changées si l'interface change :
- Je dois étandre les fonctionnalitées (une sub, fct en plus part
exemple.)
- Je dois changer les types ou le nombre des arguments.
- Je dois changer l'implémentation d'une des fonctions.
* Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface.
d'avance merci.

@+ Eric


Avatar
Eric
eric explained on 9/11/2004 :
Bonjonr,
pouvez-vous m'expliquer les cas d'utilisation du polymorphisme
d'interface. Si je créer une interface IClassA et une coClassB
implémentant l'interface de IClassA.
Soit trois cas, sachant que chaque classe implémentant l'interface
doivent changées si l'interface change :
- Je dois étandre les fonctionnalitées (une sub, fct en plus part
exemple.)
- Je dois changer les types ou le nombre des arguments.
- Je dois changer l'implémentation d'une des fonctions.
* Je pense que c'est le plus facile, puisque l'on change juste
l'implémantation et on recompile l'objet imlémentant l'interface.
d'avance merci.

@+ Eric



Un grand merci à vous.

@+ Eric

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com