Les interfaces [Résolu]

Messages postés
16
Date d'inscription
jeudi 15 mars 2007
Dernière intervention
10 janvier 2009
- - Dernière réponse : slytek
Messages postés
16
Date d'inscription
jeudi 15 mars 2007
Dernière intervention
10 janvier 2009
- 12 déc. 2008 à 14:12
Bonjour a tous

Je suis débutant en Programmation C# .NET et actuellement en auto-formation. J'ai un problème qui m'ennuie énormément, je n'arrive pas à comprendre l'utilité concrète des interfaces (pas graphiques ).

Je sais seulement que l'on définit des méthodes et/ou des propriétés qu'une classe doit ensuite implémenter.
Mais quelle est la réelle utilité ? ça me fait beaucoup penser aux header (.h) en langage C mais j'ai l'impression que ce n'est pas aussi simple...

J'ai déjà cherché des réponses sur des forums mais je ne trouve pas... Je trouve souvent des explications en VB .NET...

En fait la notion d'interface m'a particulièrement embrouillé quand j'ai lu un cours sur les 3 couches : UI, métier et DAO ou ils se servaient des interfaces pour simplifier la maintenance du code. (enfin je crois )

Si quelqu'un peut m'éclaircir..sa sera avec plaisir
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
3
Merci
Bonjour,

Il est vrai que ce n'est pas une notion très facile à appréhender.
Personnellement, je vais essayer de t'expliquer un peu plus avec un exemple:

Imagines que tu implémentes une librairie en .net (dll) qui va exécuter plein d'actions à la suite les unes des autres (un espèce de workflow :) ) mais que tu t'en fous de coder les actions.
Tu veux juste implémenter le système qui va enchaîner les actions les unes après les autres. En gros, on pourra dire que c'est une coquille vide, ton projet ne servira à rien tel que mais si les gens prennent ta librairie et codent des actions alors, elle prendra tout son sens.

Pour ce faire, tu peux alors opter pour une interface du type:
public interface IAction
{
   /// <summary>
   /// Executes process
   /// </summary>
   void Do();
}

Comme ça, tu te fous (excusez moi le langage) complet des actions. C'est pas ton boulot, toi tu veux juste les enchaîner.
Et alors, tu auras ta classe (j'ai fait simple, j'ai pas tout coder, on m'en voudras pas):
public class WorkFlow
{
   /// <summary>
   /// List of actions to execute
   /// </summary>
   private List _actions;

   /// <summary>
   /// Constructor
   /// </summary>
   public WorkFlow()
   {
      _actions = new List();
   }

   /// <summary>
   /// Adds an action to current list
   /// </summary>
   /// Action implementing <see cref="IAction"/> interface

   public void Add(IAction action)
   {
      _actions.Add(action);
   }

   /// <summary>
   /// Executes all actions from list
   /// </summary>
   public void Execute()
   {
      foreach (IAction action in _actions)
      {
         action.Do();
      }
   }
}

Et voila, ta librairie est prête ! (enfin faudrait coder un peu plus ^^)

Alors, là, un type à qui tu donne ta librairie n'aura plus qu'à créer une classe qui hérite de l'interface IAction pour pouvoir utiliser ton WorkFlow.
Bien entendu, il aura pour obligation (une fois hérité) de coder la fonction Do() [mais pas toi :) ]

Et cela ne l'empêchera aucunement d'hériter d'une autre classe et d'hériter en plus de ton interface. Ceci permet donc de palier aux problèmes de multi-héritage (en détournant un peu le principe) du C#. Car une classe C# ne peut hériter que d'une seule autre classe C#. Par contre, tu peux ajouter autant d'interface que tu veux !

En gros, cela te permet d'avoir un peu de transparence dans tes développements tout en proposant aux gens qui utiliserons ta librairie de pouvoir interagir avec tes classes sans trop de difficulté.
Un bon exemple dans le framework .Net est l'interface ICollection: http://msdn.microsoft.com/fr-fr/library/system.collections.icollection.aspx
C'est très intéressant d'hériter de cette interface de temps en temps :)

Voila, j'espère que ça t'aura au moins expliquer une partie (ou du moins, une utilisation).

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Merci billou_13 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de billou_13
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
Salut, l'explication de billou_13 est déja bien complète mais au cas ou, tu as d'autres explications ici :

http://www.csharpfr.com/forum/sujet-INTERFACE-DOCUMENTATION-SIMPLE-FRANCAIS_533601.aspx

Merci Lutinore 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
3
Merci
slytek,

Effectivement, tu as raison pour les balises de commentaire. Elles sont utilisées pour la génération de document: style .htm ou msdn ou autre...
Quand tu compiles ton projet, tu peux demander dans les options de chaque projet (sous Visual Studio), la création du fichier xml de documentation.
Il te suffira alors de faire tourner une routine sur ce fichier xml pour générer un fichier .htm, un fichier style msdn ou un site web. Ceci te permettra d'avoir un document d'aide sur ta librairie. C'est utile qd tu veux distribuer une librairie.
Voici quelques liens:
- http://www.codeplex.com/SHFB
- http://blogs.msdn.com/ansonh/archive/2006/09/11/750056.aspx
- http://www.jmdoudoux.fr/microsoft/doctechcsharp/doctechcsharp.htm
- http://msdn.microsoft.com/fr-fr/library/b2s063f7(VS.80).aspx

Bonne après midi,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Merci billou_13 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de billou_13
Messages postés
16
Date d'inscription
jeudi 15 mars 2007
Dernière intervention
10 janvier 2009
0
Merci
Dans cet exemple :

IImpotMetier metier = new ImpotMetier();

Si IImpotMetier est une Interface, metier est donc du type IImpotMetier.
Est ce que sa veut dire que l'objet métier ne pourra utiliser que les méthodes se trouvant
dans l'interface IImpotMetier et implémentées par la classe ImpotMetier ?

Je ne sais pas si j'ai été clair, mais c'est le genre d'exemple qui me trouble...
Commenter la réponse de slytek
Messages postés
16
Date d'inscription
jeudi 15 mars 2007
Dernière intervention
10 janvier 2009
0
Merci
Merci beaucoup pour l'explication, je commence désormais a cerner les interfaces

parcontre j'aurai une dernière question un peu bête mais le code :

///<summary></summary>

c'est utilisé pour la génération éventuelle d'une doc ?
Commenter la réponse de slytek
Messages postés
16
Date d'inscription
jeudi 15 mars 2007
Dernière intervention
10 janvier 2009
0
Merci
merci lutinore pour le lien
Commenter la réponse de slytek
Messages postés
16
Date d'inscription
jeudi 15 mars 2007
Dernière intervention
10 janvier 2009
0
Merci
Encore merci Billou_13, bonne après midi a toi aussi !
Commenter la réponse de slytek

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.