IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

les interfaces; quelle utilité?


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut les interfaces; quelle utilité?
    salut tout le monde
    c# c# c# c# c# c# c# c# c# c# c# c#

    S.V.P si qq'un peut m'expliquer l'importance des interfaces puisqu'on va implémenter les mêthodes qu'elles contiennent dans dans toute classe qui a recours à ces mêthodes, une chose qu'on peut bien faire sans ces interfaces
    je n'arrive vraiment pas à toucher l'utilité


    encore une question:
    pourquoi le terme "interface"

    merci beaucoup

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    C'est très simple, prenons un exemple concret avec les bases de données et les interfaces IDataReader.
    Tu as une base de données SqlServer, et tu veux une méthode M qui renvoie un DataReader. Dans ton cas tu renvoies un SqlDataReader. Juste là ça marche. Admettons maintenant que tu veuilles passer sous une base Oracle. Tu es en train de te dire "bah c'est pas grave, je remplace mon SqlDataReader par un OracleDataReader dans les méthodes qui en ont besoin".
    C'est une solution mais tu perds un temps précieux.
    En regardant la définition de SqlDataReader et OracleDataReader, tu vois que les deux implémentent IDataReader.
    Dans ton cas, M, au lieu de renvoyer un SqlDataReader devrait renvoyer un IDataReader. Dans le code qui appelle M tu n'aurais rien eu à changer vu que dans les deux cas, tu obtiens un IDataReader. Tu n'aurais eu qu'à modifier le corps de M.
    De manière générale, les interfaces permettent d'ajouter un niveau d'abstraction pour pouvoir faire des changements dans une couche de l'application sans avoir à modifier les couches supérieures.
    Typiquement un Web Service devrait toujours prendre en paramètre et retourner des interfaces, histoire de découpler au maximum le Web Service et les applications qui l'utilisent.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Les interfaces sont un concept POO, c'est beaucoup plus généraliste que C#
    Lis un bouquin (online ou pas) sur les concepts POO tu comprendra très vite l'énorme utilité.

  4. #4
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    En clair, imagines que tu t'amuses à réaliser un programme qui manipule des véhicules.

    Tu as plein de véhicules différents... Avion, Voiture, Charette.... Tricycle....

    Et tu pour te simplifier la vie, au lieu d'avoir 200000 variables différentes, tu utilises une liste (logique non ?)

    Donc on va dire List<T> ça parait un très bon choix.
    Problème... List<T> demande un type particulier.... Bon, il faudrait pouvoir dire qu'on veut mettre des véhicules dans cette liste. Alors... List<Avion> ? List<Voiture> ?

    Bon, finalement, pas pratique cette List<T>, on va utiliser un ArrayList (qui correspond à List<object> en fait), comme ça on peut mettre ce qu'on veut dedans...

    Alors...
    ArrayList maListe = new ArrayList();
    [blablabla...]
    maListe.add(new Avion());
    maListe.add(new Voiture());
    maListe.add(new....);
    etc...

    Cool, on a notre liste bien remplie.
    Bon, maintenant, le problème, c'est qu'on aimerait bien démarrer un de ces appareils (mettre le contact quoi).

    Alors, on fait comment, dans la mesure où on a que les types Avion, Voiture, Bicyclette....

    if(maListe[i] is Avion){
    (maListe[i] as Avion).demarrer();
    }else if(maListe[i] is Voiture){
    .... blablabla

    C'est galère non ?

    Alors, au lieu de se faire chier avec ces spaghettis, on utilise une interface qui implémente demarrer();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    interface IVehicule{
      void demarrer();
    }
     
    class Avion : IVehicule{...}
    class Voiture : IVehicule{...}
    etc...
     
    Et au final on peut même utiliser notre List<T> du début :
    List<IVehicule> maListe = new List<IVehicule>();
    maListe.add(new Avion());
    maListe.add(new Bicyclette());
    foreach(IVehicule v in maListe){
      v.demarrer();
    }
    C'est beaucoup plus simple que l'immonde armée des if imbriqués non ?

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Ouais c'est bien beau tout ça, mais il y a quand même une faille dans ton raisonnement :
    on a que les types Avion, Voiture, Bicyclette
    Comment tu démarres un vélo ?

    Ouais je sors...

    PS : Je me demandais : "l'immonde armée des if imbriqués", ça serait pas un film de Romero ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Tu connais pas les solex ? :p

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut problème interface demeurant
    Salut tout le monde

    je vous demande pardon mais je crois que j'ai mal pauser ma question, je comprends tout ce que vous avez dit mais, mon problème et je ne sais pas si je doit pas poser cette question! :

    quel est l'interêt de créer une chose dit interface qui ne contient que des déclarrations de membres, si je vais ensuite créer des classes dans lesquelles on va dééclarrer et implémenterai ces membres .

    Autrement dit qu'y a-t-il de différent si je déclarre et implémente ces membre tout simplement et directement dans la classe sans avoir à dériver d'une interface .

    SaumonAgile a parlé de gasspille de temps mais il a donné un exemple par Idatareader mais moi je ne sais pas encore rien sur les base de données. je souhaite que qq'un puisse me donner un exemple simple.

    Merci vivement

  8. #8
    Membre habitué Avatar de Capitaine Kirk
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 128
    Points
    128
    Par défaut
    Bonsoir

    noubigh les interfaces sont des "contrats" passés avec les classes qui les implémentent, en fait un exemple d'utilisation qui peu aider à comprendre leur utilité, imagine que tu développes une assemblie avec une classe qui se nommerai Class1 et une interface qui se nommerai Interface1 dans laquelle tu déclare par exemple une méthode qui vérifie d'abord si le fichier existe avant de l'ouvrir etc...tu fais hérité ta Class1 de Interface1 alors le développeur qui utilisera ton assemblie sera obligé d'implémenter les méthodes déclarer dans ton interface ainsi tu t'assures d'un "standard" d'utilisation qui sécuriserai l'utilisation de ton assemblie. j'espère avoir été clair, les spécialistes du forum reprendront mon exemple si j'ai dis une bétise

    Capitaine Kirk.
    Capitaine Kirk.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut


    merci kapitaine !

    je crois que je suis un peu satisfait maintenant
    si j'ai bien compri, soit l'interface IStandardWindow qui désigne une fenètre windows standard, si on déclare dans cette inteface les membre suivants:

    - Restaurer()
    - Réduire()
    - Fermer()
    comme ça une classe qui veut se définir comme une fenêtre standard en passant par notre interface doit obligatoirement remplir ces trois membres!!

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Je ne voudrais pas insister trop, mais la réponse de Capitaine, ne donne qu'un des aspects des avantages de l'interface.

    J'avais beaucoup de mal à comprendre l'utilité des interfaces, jusqu'à ce que je les utilise. Je pense que l'exemple de SaumonAgile est le plus frappant dans l'utilité de l'interface pour rendre un code plus facile à maintenir.

    Tu peux aussi faire un tour du côté des designs patterns (un bon livre : "tête la première dans les designs patterns") où elles sont souvent implémentées.

    Tu trouveras un exemple d'une pattern courante sur le site de developpez.com, c'est Model-View-Controler et son dérivé Model-View-Presenter. Le tutoriel montre parfaitement l'utilité des interfaces dans l'aspect "ajout d'abstraction" pour limiter un maximum les modifications risquées et couteuses de code lors des changements.

    [EDIT]
    Voici un lien qui illustre bien les explications de SaumonAgile
    http://lowrymedia.com/blogs/technica...crete-classes/
    [/EDIT]

Discussions similaires

  1. [C#] Les interfaces en C# - interet
    Par igorzup dans le forum Windows Forms
    Réponses: 14
    Dernier message: 10/03/2005, 11h01
  2. Réponses: 9
    Dernier message: 03/03/2005, 14h36
  3. [C#] A quoi servent les interfaces???
    Par sof_nns dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/10/2004, 20h51
  4. à quoit sert les interfaces ?
    Par nytmare dans le forum MVC
    Réponses: 13
    Dernier message: 12/09/2004, 11h57
  5. Réponses: 2
    Dernier message: 31/10/2003, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo